<?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>226421</bug_id>
          
          <creation_ts>2021-05-29 12:12:17 -0700</creation_ts>
          <short_desc>Split calc() related files into 1-class per file structure</short_desc>
          <delta_ts>2021-05-29 17:52:20 -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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1765101</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 12:12:17 -0700</bug_when>
    <thetext>Split calc() related files into proper 1-file per class structure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765102</commentid>
    <comment_count>1</comment_count>
      <attachid>430100</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 12:17:22 -0700</bug_when>
    <thetext>Created attachment 430100
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765104</commentid>
    <comment_count>2</comment_count>
      <attachid>430102</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 12:22:34 -0700</bug_when>
    <thetext>Created attachment 430102
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765105</commentid>
    <comment_count>3</comment_count>
      <attachid>430103</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 12:26:54 -0700</bug_when>
    <thetext>Created attachment 430103
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765110</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-29 13:28:41 -0700</bug_when>
    <thetext>&quot;proper&quot;

Does seem like a great idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765113</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 13:38:30 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #4)
&gt; &quot;proper&quot;
&gt; 
&gt; Does seem like a great idea.

&quot;proper&quot; in the British sense of course: nice, polite, respectable. :).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765114</commentid>
    <comment_count>6</comment_count>
      <attachid>430105</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 13:38:43 -0700</bug_when>
    <thetext>Created attachment 430105
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765116</commentid>
    <comment_count>7</comment_count>
      <attachid>430107</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 13:39:36 -0700</bug_when>
    <thetext>Created attachment 430107
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765117</commentid>
    <comment_count>8</comment_count>
      <attachid>430107</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2021-05-29 13:40:35 -0700</bug_when>
    <thetext>Comment on attachment 430107
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=430107&amp;action=review

&gt; Source/WebCore/Headers.cmake:1159
&gt; +    platform/calc/CalcExpressionNode

Missing &quot;.h&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765121</commentid>
    <comment_count>9</comment_count>
      <attachid>430108</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 13:46:18 -0700</bug_when>
    <thetext>Created attachment 430108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765122</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 13:46:36 -0700</bug_when>
    <thetext>(In reply to Darin Adler from comment #8)
&gt; Comment on attachment 430107 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=430107&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Headers.cmake:1159
&gt; &gt; +    platform/calc/CalcExpressionNode
&gt; 
&gt; Missing &quot;.h&quot;?

Indeed. Fixed in the latest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765123</commentid>
    <comment_count>11</comment_count>
      <attachid>430109</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 14:03:20 -0700</bug_when>
    <thetext>Created attachment 430109
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765151</commentid>
    <comment_count>12</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-05-29 17:08:00 -0700</bug_when>
    <thetext>Ok, looks like it all compiles now. Should be ready for review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765152</commentid>
    <comment_count>13</comment_count>
      <attachid>430109</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2021-05-29 17:15:47 -0700</bug_when>
    <thetext>Comment on attachment 430109
Patch

rs=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765159</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-05-29 17:51:32 -0700</bug_when>
    <thetext>Committed r278246 (238283@main): &lt;https://commits.webkit.org/238283@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430109.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1765160</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-29 17:52:20 -0700</bug_when>
    <thetext>&lt;rdar://problem/78654675&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430100</attachid>
            <date>2021-05-29 12:17:22 -0700</date>
            <delta_ts>2021-05-29 12:31:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226421-20210529121720.patch</filename>
            <type>text/plain</type>
            <size>327451</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAyMS0wNS0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQg
ZmlsZXMgaW50byBwcm9wZXIgMS1maWxlIHBlciBjbGFzcyBzdHJ1Y3R1cmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0J3MgYm90aGVyZWQgbWUgZm9y
IGEgd2hpbGUgdGhhdCB0aGUgY2FsYyByZWxhdGVkIGNsYXNzZXMgKGJvdGggaW4gY3NzLworICAg
ICAgICBhbmQgaW4gcGxhdGZvcm0vKSB3ZXJlIGJ1bmRsZWQgYWxsIGluIHR3byBiaWcgZmlsZXMu
IFRoaXMgY2hhbmdlIHNwbGl0cworICAgICAgICB0aGVtIGFsbCBvdXQgaW50byB0aGVpciBvd24g
aGVhZGVyIGFuZCBpbXBsZW1lbnRhdGlvbiBmaWxlcyB0aGF0IG1hdGNoCisgICAgICAgIHRoZWly
IG5hbWUsIGFuZCBwdXRzIHRoZW0gaW4gbmV3IGNhbGMvIHN1YmRpcmVjdG9yaWVzIChjc3MvY2Fs
Yy8uLi4gYW5kCisgICAgICAgIHBsYXRmb3JtL2NhbGMvLi4uKS4gVGhpcyBzaG91bGQgaG9wZWZ1
bGx5IG1ha2UgdGhlIG1vZGlmaWNhdGlvbnMgSSBuZWVkCisgICAgICAgIHRvIG1ha2UgdG8gY2Fs
YygpIHRvIHN1cHBvcnQgcmVsYXRpdmUgY29sb3Igc3ludGF4IGEgbGl0dGxlIGVhc2llci4KKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmNwcDoKKyAg
ICAgICAgKiBjc3MvY2FsYzogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0NhdGVn
b3J5TWFwcGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FsY1VuaXRDYXRlZ29y
eSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVn
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0RvdWJsZVZhbHVlKToKKyAgICAgICAgKiBjc3Mv
Y2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9jYWxj
L0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV0dHlQcmludE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6cHJldHR5UHJpbnROb2Rlcyk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjplcXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjpjYXRlZ29yeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZSk6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6Om9wZXJhdG9yVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tEZXB0aEFuZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9k
dWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VDYWxjU3VtKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcik6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0ludmVydE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNJbnZl
cnROb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0ludmVydE5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjSW52ZXJ0Tm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY0ludmVydE5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05l
Z2F0ZU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNOZWdhdGVOb2Rl
OjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
TmVnYXRlTm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0
ZU5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZUNhdGVnb3J5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhdGVnb3J5Rm9ySW52ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjppc1NhbWVQYWly
KToKKyAgICAgICAgKFdlYkNvcmU6OnNvcnRpbmdDYXRlZ29yeUZvclR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6c29ydGluZ0NhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OnByaW1pdGl2ZVR5
cGVGb3JDb21iaW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJzaW9uVG9BZGRWYWx1
ZXNXaXRoVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZnVuY3Rpb25Gcm9tT3BlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3Bl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNhbkNvbWJp
bmVBbGxDaGlsZHJlbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y29tYmluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRp
b25Ob2RlOjpzaW1wbGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6c2ltcGxpZnlSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlv
bk5vZGU6OnNpbXBsaWZ5Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6cHJpbWl0aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVy
YXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHRSZWN1cnNpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmVxdWFscyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcik6
CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaDogQWRkZWQuCisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmN1c3RvbUNTU1RleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6cHJpbWl0
aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTnVtZXJpY1ZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmludmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjphZGQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29udmVydFRvVW5pdFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y2Fub25pY2FsaXplVW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVD
YWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjpkb3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzWmVy
byBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpl
cXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsZW5kSGFsZik6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDU1MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpDU1NDYWxjVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjYXRlZ29yeSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OnByaW1pdGl2ZVR5cGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIGNz
cy9jYWxjL0NTU0NhbGNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25W
YWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vY2FsYzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZHVtcCBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbkxlbmd0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHBy
ZXNzaW9uTGVuZ3RoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNF
eHByZXNzaW9uTGVuZ3RoOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uTGVuZ3RoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6
ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlv
bjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGU6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2Rl
OjpDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25OdW1iZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk51bWJlcjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk51
bWJlcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpDYWxjRXhwcmVzc2lvbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZh
bHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpDYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2Nh
bGMvQ2FsY09wZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYWxjdWxhdGlvblZhbHVlOjpzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXhwcmVzc2lvbiBjb25zdCk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisKIDIwMjEtMDUtMjkgIEFsYW4g
QnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gRG8gbm90IGlu
Y2x1ZGUgdmVydGljYWwgc3BhY2luZyB3aGVuIHJlc29sdmluZyBwZXJjZW50IGhlaWdodCBmb3Ig
dGFibGUgY29udGVudApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyAr
MzQxLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgY3J5
cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgKIAotICAgIGNzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmgKICAgICBjc3MvQ1NTQ29uZGl0aW9uUnVsZS5oCiAgICAgY3NzL0NTU0N1c3RvbVByb3Bl
cnR5VmFsdWUuaAogICAgIGNzcy9DU1NGb250RmFjZVJ1bGUuaApAQCAtMzg5LDYgKzM4OCw4IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBjc3MvU3R5bGVTaGVl
dENvbnRlbnRzLmgKICAgICBjc3MvU3R5bGVTaGVldExpc3QuaAogCisgICAgY3NzL2NhbGMvQ1NT
Q2FsY1ZhbHVlLmgKKwogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKICAgICBjc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaAogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCkBAIC0x
MDAzLDcgKzEwMDQsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9BYm9ydGFibGVUYXNrUXVldWUuaAogICAgIHBsYXRmb3JtL0NQVU1vbml0
b3IuaAotICAgIHBsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAogICAgIHBsYXRmb3JtL0NvbG9y
Q2hvb3Nlci5oCiAgICAgcGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xpZW50LmgKICAgICBwbGF0Zm9y
bS9Db250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIuaApAQCAtMTE1Niw2ICsxMTU2LDggQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAogCisgICAgcGxhdGZvcm0vY2Fs
Yy9DYWxjdWxhdGlvblZhbHVlLmgKKwogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUVu
Y3J5cHRpb25TY2hlbWUuaAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUZhY3Rvcnku
aAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNzE4LDcgKzcxOCw2IEBAIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVl
LmNwcAogY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAogY3NzL0NTU0JvcmRlckltYWdlLmNwcAogY3Nz
L0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAKLWNzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNw
cAogY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKIGNzcy9DU1NDb25kaXRpb25SdWxlLmNwcApAQCAtODI1LDYgKzgyNCwxNCBAQCBjc3Mv
U3R5bGVTaGVldC5jcHAKIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCiBjc3MvU3R5bGVTaGVl
dExpc3QuY3BwCiBjc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0Nh
dGVnb3J5TWFwcGluZy5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKK2Nz
cy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNJ
bnZlcnROb2RlLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCitjc3MvY2FsYy9D
U1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUuY3BwCitjc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCiBjc3MvcGFyc2VyL0NTU0F0UnVsZUlE
LmNwcAogY3NzL3BhcnNlci9DU1NEZWZlcnJlZFBhcnNlci5jcHAKIGNzcy9wYXJzZXIvQ1NTUGFy
c2VyLmNwcApAQCAtMTgxNCw3ICsxODIxLDYgQEAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2NybwogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
Y3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNw
cAogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAotcGxhdGZvcm0vQ2Fs
Y3VsYXRpb25WYWx1ZS5jcHAKIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiBwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uY3BwCkBAIC0xOTI4LDYgKzE5
MzQsMTYgQEAgcGxhdGZvcm0vYXVkaW8vU3RlcmVvUGFubmVyLmNwcAogcGxhdGZvcm0vYXVkaW8v
VXBTYW1wbGVyLmNwcAogcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1
ZGlvL1plcm9Qb2xlLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
LmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAKK3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTmVnYXRpb24uY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKK3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uT3BlcmF0aW9uLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwCitw
bGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGN1
bGF0aW9uVmFsdWUuY3BwCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAog
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNTG9nZ2luZy5jcHAKIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVByaXZhdGUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEzNTQsNyArMTM1NCw3IEBACiAJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0
Zm9ybUNBTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5OUIzRUMzMTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OTlCM0VENzEyOENE
MzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTlCM0VENTEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhp
Y3NMYXllckNBLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDk5QjNFREQxMjhEQjUwMjAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OUIzRURDMTI4
REI1MDEwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5MjBB
IC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlv
blZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlBRTJEOEQxMzRFRTUwQzAwNzI5
MjBBIC8qIENTU0NhbGNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQ5QUUyRDk3MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFF
MkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5QUYyRDY5MTQ0MzVEMDUwMDE2
QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODExMDQy
RDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLzsgfTsKQEAgLTQxOTAsNiArNDE5MCwy
MiBAQAogCQlCQ0VGNDVGNjBFNjg3QjVDMDAxQzEyODcgLyogSlNUZXh0TWV0cmljcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRjQ1RjQwRTY4N0I1
QzAwMUMxMjg3IC8qIEpTVGV4dE1ldHJpY3MuaCAqLzsgfTsKIAkJQkNFRjg2OUYwRTg0NEU5RDAw
QTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRjg2OUUwRTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJh
clRoZW1lTWFjLm1tICovOyB9OwogCQlCQ0VGRTFFQjBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xU
UHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0VGRTFFOTBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vzc29yLmggKi87IH07CisJ
CUJDRjE2NDUxMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDRGMjY2MjlG
QzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NTUy
NjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDUzMjY2MkExMjIwMDAy
RjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmggKi87IH07CisJCUJDRjE2NDU5MjY2
MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NTcyNjYyQTFFOTAwMDJGN0VGIC8qIENT
U0NhbGNOZWdhdGVOb2RlLmggKi87IH07CisJCUJDRjE2NDVEMjY2MkEyMzcwMDAyRjdFRiAvKiBD
U1NDYWxjSW52ZXJ0Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNGMTY0NUIyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmgg
Ki87IH07CisJCUJDRjE2NDYxMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0
NUYyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmggKi87IH07CisJCUJD
RjE2NDY1MjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDYzMjY2
MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCAqLzsgfTsKKwkJ
QkNGMTY0NkEyNjYyQTkzNDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDY4MjY2MkE5
MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmggKi87IH07CisJCUJDRjE2NDZF
MjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ2RDI2NjJBQTUwMDAwMkY3RUYg
LyogQ2FsY3VsYXRpb25DYXRlZ29yeS5oICovOyB9OworCQlCQ0YxNjQ3MjI2NjJBQUMzMDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ3MDI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25Ob2RlLmggKi87IH07CisJCUJDRjE2NDc2MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVz
c2lvbk51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGMTY0NzQyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmggKi87
IH07CisJCUJDRjE2NDdBMjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0Nzgy
NjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmggKi87IH07CisJCUJDRjE2
NDdFMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ3QzI2NjJBQkU3MDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oICovOyB9OworCQlCQ0YxNjQ4MjI2NjJB
QzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDgwMjY2MkFDNTEwMDAyRjdFRiAv
KiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oICovOyB9OworCQlCQ0YxNjQ4NjI2NjJBQ0EzMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDg0MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbk9wZXJhdGlvbi5oICovOyB9OworCQlCQ0YxNjQ4QTI2NjJBRDUyMDAwMkY3RUYg
LyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0ODgyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGguaCAqLzsgfTsKKwkJQkNGMTY0OEUyNjYyQUREODAwMDJGN0VGIC8q
IENhbGNPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGMTY0OEMyNjYyQUREODAwMDJGN0VGIC8qIENhbGNPcGVyYXRvci5oICovOyB9Owog
CQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNDhDRTYxMzcwRDEx
NDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ZBOTMwODEwMzMzMTkzMDA3QjI1RDEgLyog
UmVuZGVyT3ZlcmZsb3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRkE5MzA3MTAzMzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkIyRTVFMDk3
OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQjJFNUQwOTc5RTQ2NDAwQkE3MDNEIC8q
IENhY2hlZFJlc291cmNlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTg0NDMsOCArODQ1OSw4IEBACiAJCTQ5OUIzRUQ0MTI4Q0QzMTQw
MEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NMYXllckNBLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDk5QjNFRDUxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyQ0EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk5QjNFREMxMjhEQjUwMTAwRTcyNkMyIC8qIFBsYXRmb3Jt
Q0FBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1D
QUFuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUFFMkQ4QzEzNEVF
NTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0
aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUFFMkQ4QzEzNEVFNTBD
MDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU0NhbGNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGN1bGF0aW9uVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUFFMkQ5NTEzNEVFNUY5MDA3Mjky
MEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxjdWxhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QUYy
RDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUyMSw2ICsxNDUzNywzOCBAQAogCQlCQ0VGRTFEQzBE
Q0E1Q0ZEMDA3MzkyMTkgLyogWFNMVFByb2Nlc3Nvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gWFNMVFByb2Nlc3Nvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUZF
MUU4MERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYU0xUUHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNFRkUxRTkwRENBNUY2NDAwNzM5MjE5IC8qIEpTWFNMVFByb2Nl
c3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hTTFRQcm9jZXNzb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NEYyNjYyOUZDNzAwMDJGN0VG
IC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTAyNjYyOUZD
NzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0YxNjQ1MzI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDU0MjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1NzI2NjJB
MUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2Fs
Y05lZ2F0ZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTgyNjYy
QTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENTU0NhbGNOZWdhdGVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNG
MTY0NUIyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0NhbGNJbnZlcnROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDVDMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRjE2NDVGMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ2MDI2NjJBMjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlv
bk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2MzI2NjJBMzFBMDAwMkY3RUYgLyog
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2
NDI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDY4MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxj
Q2F0ZWdvcnlNYXBwaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNDYXRlZ29yeU1hcHBpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjkyNjYyQTkzNDAwMDJGN0VG
IC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2Fs
Y0NhdGVnb3J5TWFwcGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2
NDZEMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGN1bGF0aW9uQ2F0ZWdvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkNGMTY0NkYyNjYyQUE2RjAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRjE2NDcwMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDRjE2NDcxMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzQyNjYyQUIzNjAwMDJGN0VGIC8qIENh
bGNFeHByZXNzaW9uTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uTnVtYmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDc1MjY2MkFCMzYwMDAyRjdF
RiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjRXhw
cmVzc2lvbk51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDc4
MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxjRXhwcmVzc2lvbkxlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0YxNjQ3OTI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ3QzI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25O
ZWdhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDdEMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbk5lZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9u
TmVnYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4MDI2NjJB
QzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkNGMTY0ODEyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODQyNjYyQUNBMzAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDg1MjY2MkFDQTMwMDAyRjdF
RiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxj
RXhwcmVzc2lvbk9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDg4MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODkyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDhDMjY2MkFERDgw
MDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY09wZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDhEMjY2MkFERDgwMDAyRjdFRiAv
KiBDYWxjT3BlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY09wZXJhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMzRBMzYxMUEyMzFDRDAwQzcxODA0IC8q
IE5hbWVkTm9kZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
YW1lZE5vZGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y0OENFNjEz
NzBEMTE0MDA0RTg3RDYgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBZGp1c3RWaWV3U2l6ZU9yTm90Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRkE5MzA3MTAzMzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJPdmVyZmxvdy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc4OTEsMTEgKzI3OTM5LDYyIEBACiAJCQluYW1l
ID0gQ29uc3RydWN0b3JzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkNG
MTY0NEQyNjYyOUY5QTAwMDJGN0VGIC8qIGNhbGMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUJDRjE2NDY5MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxj
Q2F0ZWdvcnlNYXBwaW5nLmNwcCAqLywKKwkJCQlCQ0YxNjQ2ODI2NjJBOTM0MDAwMkY3RUYgLyog
Q1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oICovLAorCQkJCUJDRjE2NDUwMjY2MjlGQzcwMDAyRjdF
RiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwICovLAorCQkJCUJDRjE2NDRGMjY2MjlGQzcw
MDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLywKKwkJCQlCQ0YxNjQ2NDI2NjJB
MzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcCAqLywKKwkJCQlC
Q0YxNjQ2MzI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgg
Ki8sCisJCQkJQkNGMTY0NUMyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmNw
cCAqLywKKwkJCQlCQ0YxNjQ1QjI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUu
aCAqLywKKwkJCQlCQ0YxNjQ1ODI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUu
Y3BwICovLAorCQkJCUJDRjE2NDU3MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9k
ZS5oICovLAorCQkJCUJDRjE2NDYwMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9u
Tm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NUYyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVy
YXRpb25Ob2RlLmggKi8sCisJCQkJQkNGMTY0NTQyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGUuY3BwICovLAorCQkJCUJDRjE2NDUzMjY2MkExMjIwMDAyRjdFRiAv
KiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmggKi8sCisJCQkJNDlBRTJEOEMxMzRFRTUwQzAw
NzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5jcHAgKi8sCisJCQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5
MjBBIC8qIENTU0NhbGNWYWx1ZS5oICovLAorCQkJKTsKKwkJCXBhdGggPSBjYWxjOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQkNGMTY0NkMyNjYyQUEwQTAwMDJGN0VGIC8q
IGNhbGMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUJD
RjE2NDg5MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcCAq
LywKKwkJCQlCQ0YxNjQ4ODI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aC5oICovLAorCQkJCUJDRjE2NDgxMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bkludmVyc2lvbi5jcHAgKi8sCisJCQkJQkNGMTY0ODAyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uLmggKi8sCisJCQkJQkNGMTY0NzkyNjYyQUI4NTAwMDJGN0VGIC8q
IENhbGNFeHByZXNzaW9uTGVuZ3RoLmNwcCAqLywKKwkJCQlCQ0YxNjQ3ODI2NjJBQjg1MDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguaCAqLywKKwkJCQlCQ0YxNjQ3RDI2NjJBQkU3MDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAgKi8sCisJCQkJQkNGMTY0N0MyNjYy
QUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAqLywKKwkJCQlCQ0YxNjQ3
MTI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAqLywKKwkJCQlCQ0Yx
NjQ3MDI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggKi8sCisJCQkJQkNG
MTY0NzUyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmNwcCAqLywKKwkJ
CQlCQ0YxNjQ3NDI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCAqLywK
KwkJCQlCQ0YxNjQ4NTI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24u
Y3BwICovLAorCQkJCUJDRjE2NDg0MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbi5oICovLAorCQkJCUJDRjE2NDhEMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0
b3IuY3BwICovLAorCQkJCUJDRjE2NDhDMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3Iu
aCAqLywKKwkJCQlCQ0YxNjQ2RjI2NjJBQTZGMDAwMkY3RUYgLyogQ2FsY3VsYXRpb25DYXRlZ29y
eS5jcHAgKi8sCisJCQkJQkNGMTY0NkQyNjYyQUE1MDAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0
ZWdvcnkuaCAqLywKKwkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25W
YWx1ZS5jcHAgKi8sCisJCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9u
VmFsdWUuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gY2FsYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAJCUJDRjFBNUJBMDk3ODMyMDkwMDYxQTEyMyAvKiBwbGF0Zm9ybSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNDlFOTEyQTQwRUZB
QzhFNjAwOUQwQ0FGIC8qIGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0MDEyQjAyNkEzMDBDMUEz
NTkgLyogYXVkaW8gKi8sCisJCQkJQkNGMTY0NkMyNjYyQUEwQTAwMDJGN0VGIC8qIGNhbGMgKi8s
CiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8qIGNmICovLAogCQkJCUE1Qzk3NENFMTE0
ODVGREEwMDY2RjJBQiAvKiBjb2NvYSAqLywKIAkJCQlDRDk0QTVDQjFGNzFDQjQ2MDBGNTI1QzUg
LyogZW5jcnlwdGVkbWVkaWEgKi8sCkBAIC0yNzkxMiw4ICsyODAxMSw2IEBACiAJCQkJQjJDM0Q5
RUMwRDAwNkMxRDAwRUY2RjI2IC8qIHRleHQgKi8sCiAJCQkJRTFFRThCNkIyNDEyQjJBNzAwRTc5
NEQ2IC8qIHhyICovLAogCQkJCURGREI5MTJDRjhFODhBNkRBMUFEMjY0RiAvKiBBYm9ydGFibGVU
YXNrUXVldWUuaCAqLywKLQkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRp
b25WYWx1ZS5jcHAgKi8sCi0JCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0
aW9uVmFsdWUuaCAqLywKIAkJCQlDMzMwQTIyMTEzRUMxOTZCMDAwMEI0NUIgLyogQ29sb3JDaG9v
c2VyLmggKi8sCiAJCQkJQzM3Q0RFQkMxNDlFRjIwMzAwNDIwOTBEIC8qIENvbG9yQ2hvb3NlckNs
aWVudC5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3Bl
cmYgKi8sCkBAIC0yOTcwNyw2ICsyOTgwNCw3IEBACiAJCUY1MjNEMTg0MDJERTQyRTgwMTg2MzVD
QSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CUJDRjE2NDREMjY2MjlGOUEwMDAyRjdFRiAvKiBjYWxjICovLAogCQkJCTk0NkQzNzI3MUQ2Q0Iy
MjUwMDc3MDg0RiAvKiBwYXJzZXIgKi8sCiAJCQkJNEJBRkQwREEyMTkyMUVBRDAwQzBBQjY0IC8q
IHR5cGVkb20gKi8sCiAJCQkJRkJENkFGODQxNUVGMjFENDAwOEI3MTEwIC8qIEJhc2ljU2hhcGVG
dW5jdGlvbnMuY3BwICovLApAQCAtMjk3MjAsOCArMjk4MTgsNiBAQAogCQkJCUUxNkE4NEY4MTRD
ODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5oICovLAogCQkJCUJDMjc0QjMwMTQwRUJF
RDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovLAogCQkJCUJDMjc0
QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCAqLywKLQkJ
CQk0OUFFMkQ4QzEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8s
Ci0JCQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCAq
LywKIAkJCQlCQzYwNEE0MjBEQjU2MzRFMDAyMDQ3MzkgLyogQ1NTQ2FudmFzVmFsdWUuY3BwICov
LAogCQkJCUJDNjA0OUNCMERCNTYwQzIwMDIwNDczOSAvKiBDU1NDYW52YXNWYWx1ZS5oICovLAog
CQkJCUJDRUE0NzdDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwICovLApAQCAtMzE4MTEsNiArMzE5MDcsMTUgQEAKIAkJCQk0MUQxMjlEMzFGM0QwRjE2
MDBEMTVFNDcgLyogQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDFEMTI5RDUxRjNEMEY2OTAwRDE1RTQ3IC8qIENhY2hlU3RvcmFnZVByb3ZpZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ4QTI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0ODIyNjYyQUM1
MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQ0YxNjQ3QTI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDRjE2NDdFMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk5lZ2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3MjI2NjJBQUMzMDAwMkY3RUYg
LyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3NjI2NjJB
QjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDg2MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0OEUyNjYyQUREODAwMDJGN0VGIC8qIENhbGNPcGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NkUyNjYyQUE1MDAwMDJGN0VGIC8qIENhbGN1
bGF0aW9uQ2F0ZWdvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QUUyRDk3MTM0RUU1RjkwMDcy
OTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzFFOEQwMTFF
RDBDMkRBMDBCMUQ5ODMgLyogQ2FsbGJhY2tSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUVG
Q0M2QzhGMjBGRTkxNDQwMEEyMzIxQiAvKiBDYW52YXNBY3Rpdml0eVJlY29yZC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMjA4MSw3ICszMjE4NiwxNCBAQAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhC
NzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE2QTg0RkExNEM4
NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzI3
NEIyRjE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NkEyNjYyQTkzNDAwMDJGN0VGIC8qIENT
U0NhbGNDYXRlZ29yeU1hcHBpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDUxMjY2MjlG
QzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDY1MjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDVEMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxj
SW52ZXJ0Tm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NTkyNjYyQTFFOTAwMDJGN0VG
IC8qIENTU0NhbGNOZWdhdGVOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ2MTI2NjJB
MjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDU1MjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1Zh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzYwNDlDQzBEQjU2MEMyMDAyMDQ3MzkgLyogQ1NT
Q2FudmFzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0NzkwMDk3Q0FBQzgwMDk0QzlF
NCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
MEFBQzlBMjUwRUI4NDkwMDEzREE5RiAvKiBDU1NDb25kaXRpb25SdWxlLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHJl
dmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVl
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgotCi0jaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIgotI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLQotc3RhdGljIGNvbnN0IGludCBtYXhFeHByZXNzaW9uRGVwdGggPSAxMDA7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU7Ci1j
bGFzcyBDU1NDYWxjT3BlcmF0aW9uTm9kZTsKLWNsYXNzIENTU0NhbGNOZWdhdGVOb2RlOwotY2xh
c3MgQ1NTQ2FsY0ludmVydE5vZGU7Ci19Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FM
Q0VYUFJFU1NJT05fTk9ERShDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLCB0eXBlKCkgPT0gV2Vi
Q29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjUHJpbWl0aXZlVmFsdWUp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5
cGU6OkNzc0NhbGNPcGVyYXRpb24pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBS
RVNTSU9OX05PREUoQ1NTQ2FsY05lZ2F0ZU5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxj
RXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNOZWdhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY0ludmVydE5vZGUsIHR5cGUoKSA9PSBX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNJbnZlcnQpCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IGNyZWF0ZUNTUyhjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmLCBjb25zdCBSZW5kZXJTdHlsZSYp
Owotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBM
ZW5ndGgmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQot
ewotICAgIG5vZGUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGF0aWMgQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYWxjVW5pdENhdGVnb3J5KENTU1VuaXRUeXBlIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKLSAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkg6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1ZNQVg6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgIHJldHVybiBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50OwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
R1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUzoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlRpbWU7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19LSFo6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpGcmVxdWVuY3k7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyOwotICAgIH0KLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2Fs
Y3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKLSAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19NTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Okxlbmd0aDsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAg
ICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJO
OgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgotICAgICAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKLSAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKLSAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Vkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1ZNQVg6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyOwotICAgIH0KLX0KLQotc3RhdGljIENTU1VuaXRUeXBlIGNhbm9uaWNhbFVu
aXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
KQotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcjogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOwotICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19QWDsKLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHJldHVybiBDU1NVbml0VHlwZTo6
Q1NTX1BFUkNFTlRBR0U7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTogcmV0
dXJuIENTU1VuaXRUeXBlOjpDU1NfREVHOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
VGltZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTVM7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpGcmVxdWVuY3k6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX0haOwotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExl
bmd0aDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwotfQotCi1zdGF0aWMgYm9v
bCBoYXNEb3VibGVWYWx1ZShDU1NVbml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19UVVJOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0tIWjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRElNRU5TSU9OOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Vkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1ZNQVg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQUFg6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0RQSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFBDTToKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRlI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUkxIUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1VOS05PV046Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NUUklORzoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfRk9OVF9GQU1JTFk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1VS
SToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSURFTlQ6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0FUVFI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NPVU5URVI6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1JFQ1Q6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JHQkNP
TE9SOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQUlSOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19VTklDT0RFX1JBTkdFOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DT1VOVEVS
X05BTUU6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NIQVBFOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19RVUFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUlSS1lfRU1TOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19DQUxDX1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0NBTENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UFJPUEVSVFlfSUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZBTFVFX0lEOgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBDU1NWYWx1ZUlEIGZ1bmN0aW9uRnJvbU9wZXJhdG9y
KENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkFkZDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAgY2FzZSBD
YWxjT3BlcmF0b3I6Ok11bHRpcGx5OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0g
ICAgICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoK
LSAgICAgICAgcmV0dXJuIENTU1ZhbHVlTWluOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6
Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZU1heDsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xh
bXA6Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZUNsYW1wOwotICAgIH0KLSAgICByZXR1cm4gQ1NT
VmFsdWVDYWxjOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIFN0cmluZyBwcmV0dHlQ
cmludE5vZGUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQotewotICAgIFRleHRT
dHJlYW0gbXVsdGlsaW5lU3RyZWFtOwotICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlOwotICAg
IHJldHVybiBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgU3RyaW5nIHBy
ZXR0eVByaW50Tm9kZXMoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYg
bm9kZXMpCi17Ci0gICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0gICAgbXVsdGlsaW5l
U3RyZWFtIDw8IG5vZGVzOwotICAgIHJldHVybiBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOwot
fQotI2VuZGlmCi0KLWNsYXNzIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUgZmluYWwgOiBwdWJs
aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IGNyZWF0
ZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFdURk1vdmUodmFsdWUpKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBj
cmVhdGUoZG91YmxlIHZhbHVlLCBDU1NVbml0VHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgaWYg
KCFzdGQ6OmlzZmluaXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSkpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZS0+Y3Nz
VGV4dCgpOwotICAgIH0KLQotICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBm
aW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAg
ICB9Ci0KLSAgICBib29sIGlzTnVtZXJpY1ZhbHVlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc05lZ2F0
aXZlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG5lZ2F0ZSgpOwotICAgIHZvaWQgaW52ZXJ0KCk7Ci0K
LSAgICBlbnVtIGNsYXNzIFVuaXRDb252ZXJzaW9uIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAg
ICAgUHJlc2VydmUsCi0gICAgICAgIENhbm9uaWNhbGl6ZQotICAgIH07Ci0gICAgdm9pZCBhZGQo
Y29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSYsIFVuaXRDb252ZXJzaW9uID0gVW5pdENv
bnZlcnNpb246OlByZXNlcnZlKTsKLSAgICB2b2lkIG11bHRpcGx5KGRvdWJsZSk7Ci0KLSAgICB2
b2lkIGNvbnZlcnRUb1VuaXRUeXBlKENTU1VuaXRUeXBlKTsKLSAgICB2b2lkIGNhbm9uaWNhbGl6
ZVVuaXQoKTsKLQotICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzWmVybygpIGNv
bnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gIW1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7
Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBv
dGhlcikgY29uc3QgZmluYWw7Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Q3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBl
KSBjb25zdCBmaW5hbDsKLQotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY29sbGVjdERpcmVj
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0
IGZpbmFsOwotICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCi0g
ICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhbGNVbml0Q2F0ZWdvcnkodmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKSkpCi0gICAgICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKLSAgICB7
Ci0gICAgfQotCi0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3ZhbHVlOwotfTsKLQotLy8g
RklYTUU6IFVzZSBjYWxjVW5pdENhdGVnb3J5PwotYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjppc051bWVyaWNWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWUtPmlzTGVu
Z3RoKCkgfHwgbV92YWx1ZS0+aXNOdW1iZXIoKSB8fCBtX3ZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8
fCBtX3ZhbHVlLT5pc0FuZ2xlKCkKLSAgICAgICAgfHwgbV92YWx1ZS0+aXNUaW1lKCkgfHwgbV92
YWx1ZS0+aXNSZXNvbHV0aW9uKCkgfHwgbV92YWx1ZS0+aXNGbGV4KCkgfHwgbV92YWx1ZS0+aXNG
cmVxdWVuY3koKTsKLX0KLQotYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc05lZ2F0
aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNOdW1lcmljVmFsdWUoKSAmJiBtX3ZhbHVlLT5k
b3VibGVWYWx1ZSgpIDwgMC4wOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
Om5lZ2F0ZSgpCi17Ci0gICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVlKCkpOwotICAgIG1fdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuMCAtIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6aW52ZXJ0KCkKLXsKLSAgICBBU1NFUlQoaXNOdW1lcmljVmFsdWUoKSk7Ci0gICAg
aWYgKCFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpKQotICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSgxLjAgLyBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3ZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmFkZChj
b25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiBub2RlLCBVbml0Q29udmVyc2lvbiB1bml0
Q29udmVyc2lvbikKLXsKLSAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFsdWUtPnByaW1pdGl2ZVR5
cGUoKTsKLQotICAgIHN3aXRjaCAodW5pdENvbnZlcnNpb24pIHsKLSAgICBjYXNlIFVuaXRDb252
ZXJzaW9uOjpJbnZhbGlkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6UHJlc2VydmU6Ci0gICAgICAgIEFTU0VS
VChub2RlLnByaW1pdGl2ZVR5cGUoKSA9PSB2YWx1ZVR5cGUpOwotICAgICAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpICsgbm9kZS5k
b3VibGVWYWx1ZSh2YWx1ZVR5cGUpLCB2YWx1ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFVuaXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU6IHsKLSAgICAgICAgYXV0byB2YWx1ZUNh
dGVnb3J5ID0gdW5pdENhdGVnb3J5KHZhbHVlVHlwZSk7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdz
IGF3a3dhcmQgdGhhdCBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5KCkgaGFzIHNwZWNpYWwg
aGFuZGxpbmcgZm9yIENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudC4KLSAgICAgICAgYXV0byBjYW5v
bmljYWxUeXBlID0gdmFsdWVDYXRlZ29yeSA9PSBDU1NVbml0Q2F0ZWdvcnk6OlBlcmNlbnQgPyBD
U1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UgOiBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5
KHZhbHVlQ2F0ZWdvcnkpOwotICAgICAgICBBU1NFUlQoY2Fub25pY2FsVHlwZSAhPSBDU1NVbml0
VHlwZTo6Q1NTX1VOS05PV04pOwotICAgICAgICBkb3VibGUgbGVmdFZhbHVlID0gbV92YWx1ZS0+
ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7Ci0gICAgICAgIGRvdWJsZSByaWdodFZhbHVlID0g
bm9kZS5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKLSAgICAgICAgbV92YWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVmdFZhbHVlICsgcmlnaHRWYWx1ZSwgY2Fub25pY2FsVHlw
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkoZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgYXV0byB2
YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgQVNTRVJUKGhhc0RvdWJs
ZVZhbHVlKHZhbHVlVHlwZSkpOwotICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKHZhbHVlVHlwZSkgKiBtdWx0aXBsaWVyLCB2YWx1ZVR5
cGUpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbnZlcnRUb1VuaXRU
eXBlKENTU1VuaXRUeXBlIHVuaXRUeXBlKQotewotICAgIEFTU0VSVCh1bml0Q2F0ZWdvcnkodW5p
dFR5cGUpID09IHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKTsKLSAgICBk
b3VibGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7Ci0gICAgbV92
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmV3VmFsdWUsIHVuaXRUeXBlKTsKLX0K
LQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmljYWxpemVVbml0KCkKLXsK
LSAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1f
dmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci0gICAgaWYgKGNhdGVnb3J5ID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok90aGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNhbm9uaWNhbFR5
cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOwot
ICAgIGlmIChjYW5vbmljYWxUeXBlID09IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZG91YmxlIG5ld1ZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFsdWUo
Y2Fub25pY2FsVHlwZSk7Ci0gICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
bmV3VmFsdWUsIGNhbm9uaWNhbFR5cGUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lv
bihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcjoKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OdW1i
ZXI+KG1fdmFsdWUtPmZsb2F0VmFsdWUoKSk7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGg6Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3Ro
PihMZW5ndGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpLCBM
ZW5ndGhUeXBlOjpGaXhlZCkpOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6IHsKLSAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG1fdmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uPihjb252
ZXJzaW9uRGF0YSkpOwotICAgIH0KLSAgICAvLyBPbmx5IHR5cGVzIHRoYXQgY291bGQgYmUgcGFy
dCBvZiBhIExlbmd0aCBleHByZXNzaW9uIGNhbiBiZSBjb252ZXJ0ZWQKLSAgICAvLyB0byBhIENh
bGNFeHByZXNzaW9uTm9kZS4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciBtYWtl
cyBubyBzZW5zZSBhcyBhIExlbmd0aC4KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKLSAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpGcmVxdWVuY3k6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Ci17Ci0gICAg
aWYgKGhhc0RvdWJsZVZhbHVlKHVuaXRUeXBlKSkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgQVNTRVJUKHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpID09IHVu
aXRDYXRlZ29yeSh1bml0VHlwZSkpLCBidXQgb25seSB3aGVuIGFsbCBjYWxsZXJzIGFyZSBmaXhl
ZCAoZS5nLiB3ZWJraXQub3JnL2IvMjA0ODI2KS4KLSAgICAgICAgaWYgKHVuaXRDYXRlZ29yeSht
X3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpICE9IHVuaXRDYXRlZ29yeSh1bml0VHlwZSkpIHsKLSAg
ICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNhbGxpbmcgZG91Ymxl
VmFsdWUoKSB3aXRoIHVuaXQgIiA8PCB1bml0VHlwZSA8PCAiIG9uIGEgbm9kZSBvZiB1bml0IHR5
cGUgIiA8PCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPDwgIiB3aGljaCBpcyBpbmNvbXBhdGli
bGUiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Ci0gICAgICAgIHJldHVybiBtX3ZhbHVl
LT5jb21wdXRlTGVuZ3RoPGRvdWJsZT4oY29udmVyc2lvbkRhdGEpOwotICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlcjoKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7Ci0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lk
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVw
ZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBt
X3ZhbHVlLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwot
fQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RSb290Q29t
cHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNv
bnN0Ci17Ci0gICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5k
ZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZXF1
YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYg
KHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBjb21wYXJlQ1NTVmFsdWUobV92YWx1ZSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZSY+KG90aGVyKS5tX3ZhbHVlKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8
ICJ2YWx1ZSAiIDw8IG1fdmFsdWUtPmN1c3RvbUNTU1RleHQoKSA8PCAiIChjYXRlZ29yeTogIiA8
PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGU6ICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsKLX0K
LQotY2xhc3MgQ1NTQ2FsY05lZ2F0ZU5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNOZWdhdGVOb2RlPiBjcmVh
dGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNOZWdhdGVOb2RlKFdURk1vdmUoY2hpbGQpKSk7Ci0g
ICAgfQotCi0gICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxk
KCkgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRDaGlsZChSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNoaWxkKTsg
fQotCi1wcml2YXRlOgotICAgIENTU0NhbGNOZWdhdGVOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+JiYgY2hpbGQpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNoaWxkLT5j
YXRlZ29yeSgpKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCi0gICAgewotICAg
IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNF
eHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsK
LQotICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+aXNaZXJv
KCk7IH0KLSAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIC1tX2NoaWxkLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7IH0KLSAgICBk
b3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGlsZC0+Y29tcHV0ZUxlbmd0
aFB4KGNvbnZlcnNpb25EYXRhKTsgfQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIFR5cGU6OkNzc0NhbGNOZWdhdGU7IH0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAg
ICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NT
UHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERp
cmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLSAgICB2b2lkIGNv
bGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3Bl
cnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RS
b290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQotCi0gICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2Rl
PiBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGls
ZE5vZGUgPSBtX2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4oV1RGTW92ZShjaGls
ZE5vZGUpKTsKLX0KLQotdm9pZCBDU1NDYWxjTmVnYXRlTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKLXsKLSAgICB0cyA8PCAiLSIgPDwgbV9jaGlsZC5nZXQoKTsKLX0KLQotY2xhc3Mg
Q1NTQ2FsY0ludmVydE5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNJbnZlcnROb2RlPiBjcmVhdGUoUmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENTU0NhbGNJbnZlcnROb2RlKFdURk1vdmUoY2hpbGQpKSk7Ci0gICAgfQotCi0g
ICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hpbGQuZ2V0KCk7IH0KLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkgeyByZXR1
cm4gbV9jaGlsZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRDaGlsZChSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNoaWxkKTsgfQotCi1wcml2
YXRlOgotICAgIENTU0NhbGNJbnZlcnROb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
Y2hpbGQpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNoaWxkLT5jYXRlZ29yeSgp
KQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCi0gICAgewotICAgIH0KLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9u
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+aXNaZXJvKCk7IH0KLSAg
ICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJs
ZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0
IGZpbmFsOwotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNzc0Nh
bGNJbnZlcnQ7IH0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAgICB2b2lkIGNvbGxlY3RE
aXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHBy
b3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290
Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0
aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25h
bERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7
Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjSW52ZXJ0
Tm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGlsZE5vZGUgPSBtX2NoaWxk
LT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Ci0gICAgcmV0dXJuIG1ha2VV
bmlxdWU8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Ci19Ci0K
LWRvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5
cGUpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+ZG91YmxlVmFsdWUo
dW5pdFR5cGUpOwotICAgIGlmICghY2hpbGRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICByZXR1cm4gMS4wIC8gY2hpbGRW
YWx1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNJbnZlcnROb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0g
ICAgYXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25E
YXRhKTsKLSAgICBpZiAoIWNoaWxkVmFsdWUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0gICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7
Ci19Ci0KLXZvaWQgQ1NTQ2FsY0ludmVydE5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0
Ci17Ci0gICAgdHMgPDwgIjEvIiA8PCBtX2NoaWxkLmdldCgpOwotfQotCi0vLyBUaGlzIGlzIHRo
ZSByZXN1bHQgb2YgdGhlICJUbyBhZGQgdHdvIHR5cGVzIHR5cGUxIGFuZCB0eXBlMiwgcGVyZm9y
bSB0aGUgZm9sbG93aW5nIHN0ZXBzOiIgcnVsZXMuCi0KLXN0YXRpYyBjb25zdCBDYWxjdWxhdGlv
bkNhdGVnb3J5IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZSldW3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNh
dGVnb3J5OjpBbmdsZSldID0gewotLy8gICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICAg
ICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoICAgICAgICAgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciAg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAotICAgIHsgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TnVtYmVyLCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgICAgICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TGVuZ3RoCi0gICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVt
YmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50LCAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnQKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlcgotICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoCi19OwotCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRl
Z29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQotewotICAgIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgbGVmdENhdGVnb3J5ID0gbGVmdFNpZGUuY2F0ZWdvcnkoKTsKLSAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5IHJpZ2h0Q2F0ZWdvcnkgPSByaWdodFNpZGUuY2F0ZWdvcnkoKTsK
LSAgICBBU1NFUlQobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwot
ICAgIEFTU0VSVChyaWdodENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwot
Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgotICAgICAgICBpZiAobGVmdENhdGVnb3J5IDwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6QW5nbGUgJiYgcmlnaHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OkFuZ2xlKQotICAgICAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRp
Y19jYXN0PHVuc2lnbmVkPihsZWZ0Q2F0ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmln
aHRDYXRlZ29yeSldOwotICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0Q2F0ZWdvcnkp
Ci0gICAgICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5OwotICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5Ogot
ICAgICAgICBpZiAobGVmdENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAm
JiByaWdodENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICAgICAgcmV0dXJuIGxl
ZnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgPyByaWdodENhdGVnb3J5
IDogbGVmdENhdGVnb3J5OwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0gICAgICAg
IGlmIChyaWdodENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCByaWdo
dFNpZGUuaXNaZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
T3RoZXI7Ci0gICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok1pbjoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpDbGFtcDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci19Ci0KLS8v
IEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBjb3JyZWN0IGNhdGVnb3J5IGNvbXB1dGF0aW9uIHBl
cjoKLS8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nz
c251bWVyaWN2YWx1ZS1pbnZlcnQtYS10eXBlPgotLy8gVG8gaW52ZXJ0IGEgdHlwZSB0eXBlLCBw
ZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0vLyBMZXQgcmVzdWx0IGJlIGEgbmV3IHR5cGUg
d2l0aCBhbiBpbml0aWFsbHkgZW1wdHkgb3JkZXJlZCBtYXAgYW5kIGFuIGluaXRpYWxseSBudWxs
IHBlcmNlbnQgaGludAotLy8gRm9yIGVhY2ggdW5pdCDihpIgZXhwb25lbnQgb2YgdHlwZSwgc2V0
IHJlc3VsdFt1bml0XSB0byAoLTEgKiBleHBvbmVudCkuCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRl
Z29yeSBjYXRlZ29yeUZvckludmVydChDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotewot
ICAgIHJldHVybiBjYXRlZ29yeTsKLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0
ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYg
bm9kZXMsIENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBpZiAobm9kZXMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0KLSAgICBhdXRvIGN1cnJl
bnRDYXRlZ29yeSA9IG5vZGVzWzBdLT5jYXRlZ29yeSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIG5vZGUg
PSBub2Rlc1tpXS5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gdXNlZE9wZXJhdG9yID0g
b3A7Ci0gICAgICAgIGlmIChub2RlLnR5cGUoKSA9PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5
cGU6OkNzc0NhbGNJbnZlcnQpCi0gICAgICAgICAgICB1c2VkT3BlcmF0b3IgPSBDYWxjT3BlcmF0
b3I6OkRpdmlkZTsKLQotICAgICAgICBhdXRvIG5leHRDYXRlZ29yeSA9IG5vZGUuY2F0ZWdvcnko
KTsKLQotICAgICAgICBzd2l0Y2ggKHVzZWRPcGVyYXRvcikgewotICAgICAgICBjYXNlIENhbGNP
cGVyYXRvcjo6QWRkOgotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAg
ICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0x
LyNjc3NudW1lcmljdmFsdWUtYWRkLXR3by10eXBlcz4KLSAgICAgICAgICAgIC8vIEF0IGEgKyBv
ciAtIHN1Yi1leHByZXNzaW9uLCBhdHRlbXB0IHRvIGFkZCB0aGUgdHlwZXMgb2YgdGhlIGxlZnQg
YW5kIHJpZ2h0IGFyZ3VtZW50cy4KLSAgICAgICAgICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWls
dXJlLCB0aGUgZW50aXJlIGNhbGN1bGF0aW9u4oCZcyB0eXBlIGlzIGZhaWx1cmUuIE90aGVyd2lz
ZSwgdGhlIHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1cm5lZCB0eXBlLgotICAg
ICAgICAgICAgaWYgKGN1cnJlbnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xl
ICYmIG5leHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQotICAgICAgICAg
ICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVu
c2lnbmVkPihjdXJyZW50Q2F0ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obmV4dENhdGVn
b3J5KV07Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gbmV4dENhdGVn
b3J5KQotICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eToKLSAgICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5
cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1tdWx0aXBseS10d28tdHlwZXM+Ci0gICAgICAgICAg
ICAvLyBBdCBhICogc3ViLWV4cHJlc3Npb24sIG11bHRpcGx5IHRoZSB0eXBlcyBvZiB0aGUgbGVm
dCBhbmQgcmlnaHQgYXJndW1lbnRzLiBUaGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhl
IHJldHVybmVkIHJlc3VsdC4KLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICYmIG5leHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOwotCi0gICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjdXJyZW50Q2F0ZWdv
cnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyID8gbmV4dENhdGVnb3J5IDogY3VycmVu
dENhdGVnb3J5OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6OkRpdmlkZTogewotICAgICAgICAgICAgYXV0byBpbnZlcnRDYXRlZ29yeSA9IGNhdGVnb3J5
Rm9ySW52ZXJ0KG5leHRDYXRlZ29yeSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEF0
IGEgLyBzdWItZXhwcmVzc2lvbiwgbGV0IGxlZnQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRp
bmcgdGhlIHR5cGVzIG9mIGl0cyBsZWZ0IGFyZ3VtZW50LAotICAgICAgICAgICAgLy8gYW5kIHJp
Z2h0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgcmlnaHQg
YXJndW1lbnQgYW5kIHRoZW4gaW52ZXJ0aW5nIGl0LgotICAgICAgICAgICAgLy8gVGhlIHN1Yi1l
eHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGxlZnQg
dHlwZSBhbmQgcmlnaHQgdHlwZS4KLSAgICAgICAgICAgIGlmIChpbnZlcnRDYXRlZ29yeSAhPSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgbm9kZS5pc1plcm8oKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFt
cDoKLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIG9mIGEgbWluKCksIG1heCgpLCBvciBjbGFtcCgp
IGV4cHJlc3Npb24gaXMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgdGhlIHR5cGVzIG9mIGl0cyBjb21t
YS1zZXBhcmF0ZWQgY2FsY3VsYXRpb25zCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY3VycmVudENh
dGVnb3J5OwotfQotCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSByZXNvbHZlZFR5cGVGb3JN
aW5Pck1heE9yQ2xhbXAoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY3VsYXRpb25D
YXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpUaW1lOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5
OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgIHJldHVybiBj
YXRlZ29yeTsKLQotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKLSAgICAg
ICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg7
Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbkNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlcikKLSAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TnVtYmVyOwotICAgICAgICByZXR1cm4gY2F0ZWdvcnk7Ci0gICAgfQotCi0gICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotfQotCi1zdGF0aWMgYm9vbCBpc1NhbWVQYWlyKENh
bGN1bGF0aW9uQ2F0ZWdvcnkgYSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBiLCBDYWxjdWxhdGlvbkNh
dGVnb3J5IHgsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgeSkKLXsKLSAgICByZXR1cm4gKGEgPT0geCAm
JiBiID09IHkpIHx8IChhID09IHkgJiYgYiA9PSB4KTsKLX0KLQotY2xhc3MgQ1NTQ2FsY09wZXJh
dGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNP
cGVyYXRpb25Ob2RlPiBjcmVhdGUoQ2FsY09wZXJhdG9yLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYmIGxlZnRTaWRlLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0
U2lkZSk7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlU3Vt
KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpOwotICAgIHN0YXRp
YyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZVByb2R1Y3QoVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcyk7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciwgVmVj
dG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRl
Z29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KTsKLQotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBzaW1wbGlmeShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmKTsKLQotICAg
IHN0YXRpYyB2b2lkIGJ1aWxkQ1NTVGV4dChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmLCBT
dHJpbmdCdWlsZGVyJik7Ci0KLSAgICBDYWxjT3BlcmF0b3IgY2FsY09wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGVyYXRvcjsgfQotICAgIGJvb2wgaXNDYWxjU3VtTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpBZGQ7IH0KLSAgICBib29sIGlzQ2Fs
Y1Byb2R1Y3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5OyB9Ci0gICAgYm9vbCBpc01pbk9yTWF4Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0
b3I6Ok1heDsgfQotICAgIGJvb2wgc2hvdWxkU29ydENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4g
aXNDYWxjU3VtTm9kZSgpIHx8IGlzQ2FsY1Byb2R1Y3ROb2RlKCk7IH0KLQotICAgIHZvaWQgaG9p
c3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3IpOwotICAgIHZvaWQgY29tYmluZUNo
aWxkcmVuKCk7Ci0gICAgCi0gICAgYm9vbCBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdDsK
LQotICAgIGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQotCi1wcml2
YXRlOgotICAgIENTU0NhbGNPcGVyYXRpb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdv
cnksIENhbGNPcGVyYXRvciBvcCwgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lk
ZSwgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpCi0gICAgICAgIDogQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5KQotICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCi0g
ICAgewotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7Ci0gICAg
ICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUpKTsKLSAgICAg
ICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUpKTsKLSAgICB9
Ci0KLSAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
LCBDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBj
aGlsZHJlbikKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnkpCi0gICAg
ICAgICwgbV9vcGVyYXRvcihvcCkKLSAgICAgICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRy
ZW4pKQotICAgIHsKLSAgICB9Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBDc3NDYWxjT3BlcmF0aW9uOyB9Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsCi0g
ICAgewotICAgICAgICByZXR1cm4gIWRvdWJsZVZhbHVlKHByaW1pdGl2ZVR5cGUoKSk7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3Qg
ZmluYWw7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVD
YWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmlu
YWw7Ci0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWw7Ci0gICAg
ZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUg
Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBm
aW5hbDsKLQotICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMo
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY29sbGVjdERp
cmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4m
KSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7
Ci0KLSAgICBzdGF0aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBnZXROdW1iZXJTaWRlKENTU0Nh
bGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRT
aWRlKQotICAgIHsKLSAgICAgICAgaWYgKGxlZnRTaWRlLmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuICZsZWZ0U2lkZTsKLSAgICAg
ICAgaWYgKHJpZ2h0U2lkZS5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJl
cikKLSAgICAgICAgICAgIHJldHVybiAmcmlnaHRTaWRlOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBkb3VibGUgZXZhbHVhdGUoY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNo
aWxkcmVuKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGV2YWx1YXRlT3BlcmF0b3IobV9v
cGVyYXRvciwgY2hpbGRyZW4pOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgZXZhbHVhdGVP
cGVyYXRvcihDYWxjT3BlcmF0b3IsIGNvbnN0IFZlY3Rvcjxkb3VibGU+Jik7Ci0gICAgc3RhdGlj
IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNpbXBsaWZ5Tm9kZShSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiYmLCBpbnQgZGVwdGgpOwotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBzaW1wbGlmeVJlY3Vyc2l2ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmLCBp
bnQgZGVwdGgpOwotICAgIAotICAgIGVudW0gY2xhc3MgR3JvdXBpbmdQYXJlbnMgewotICAgICAg
ICBPbWl0LAotICAgICAgICBJbmNsdWRlCi0gICAgfTsKLSAgICBzdGF0aWMgdm9pZCBidWlsZENT
U1RleHRSZWN1cnNpdmUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRl
ciYsIEdyb3VwaW5nUGFyZW5zID0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpOwotCi0gICAgQ2Fs
Y09wZXJhdG9yIG1fb3BlcmF0b3I7Ci0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiBtX2NoaWxkcmVuOwotfTsKLQotUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvciBvcCwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4m
JiByaWdodFNpZGUpCi17Ci0gICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmlnaHRTaWRlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6OkFkZCB8
fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKLQotICAgIEFTU0VSVChsZWZ0U2lkZS0+
Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLSAgICBBU1NFUlQocmln
aHRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwotCi0gICAg
YXV0byBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lk
ZSwgb3ApOwotICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
cikgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8g
Y3JlYXRlIENTU0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBub2RlIGJlY2F1c2UgdW5h
YmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2RlKCpsZWZ0
U2lkZSkgPDwgIiBhbmQgIiA8PCAqcmlnaHRTaWRlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShu
ZXdDYXRlZ29yeSwgb3AsIGxlZnRTaWRlLnJlbGVhc2VOb25OdWxsKCksIHJpZ2h0U2lkZS5yZWxl
YXNlTm9uTnVsbCgpKSk7Ci19Ci0KLVJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4+JiYgdmFsdWVzKQotewotICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSh2
YWx1ZXMsIENhbGNPcGVyYXRvcjo6QWRkKTsKLSAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0
cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBzdW0gbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRl
cm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7Ci0gICAg
ICAgIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6
OkFkZCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNPcGVyYXRvcjo6
QWRkLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2Rl
PiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChWZWN0b3I8UmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKQotewotICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1p
bmVDYXRlZ29yeSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOwotICAgIGlmIChuZXdD
YXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHByb2R1Y3Qgbm9kZSBi
ZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50
Tm9kZXModmFsdWVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNP
cGVyYXRvcjo6TXVsdGlwbHksIFdURk1vdmUodmFsdWVzKSkpOwotfQotCi1SZWZQdHI8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xh
bXAoQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYg
dmFsdWVzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi17Ci0gICAg
QVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TWF4
IHx8IG9wID09IENhbGNPcGVyYXRvcjo6Q2xhbXApOwotICAgIEFTU0VSVF9JTVBMSUVTKG9wID09
IENhbGNPcGVyYXRvcjo6Q2xhbXAsIHZhbHVlcy5zaXplKCkgPT0gMyk7Ci0KLSAgICBPcHRpb25h
bDxDYWxjdWxhdGlvbkNhdGVnb3J5PiBjYXRlZ29yeSA9IHN0ZDo6bnVsbG9wdDsKLSAgICBmb3Ig
KGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7Ci0gICAgICAgIGF1dG8gdmFsdWVDYXRlZ29yeSA9IHJl
c29sdmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCh2YWx1ZS0+Y2F0ZWdvcnkoKSwgZGVzdGluYXRp
b25DYXRlZ29yeSk7Ci0KLSAgICAgICAgQVNTRVJUKHZhbHVlQ2F0ZWdvcnkgPCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcik7Ci0gICAgICAgIGlmICghY2F0ZWdvcnkpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Ci0gICAg
ICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNy
ZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJs
ZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVz
KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXRlZ29yeSA9IHZhbHVlQ2F0ZWdvcnk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoY2F0ZWdvcnkgIT0gdmFsdWVDYXRlZ29yeSkgewotICAgICAgICAgICAgaWYgKGlzU2FtZVBh
aXIoY2F0ZWdvcnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKSkgewotICAgICAgICAg
ICAgICAgIGNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChp
c1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikpIHsKLSAg
ICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1i
ZXI7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoY2F0ZWdvcnkudmFsdWUoKSwgb3AsIFdURk1vdmUo
dmFsdWVzKSkpOwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVu
V2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBBU1NFUlQob3AgPT0gQ2FsY09w
ZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7Ci0KLSAgICBhdXRv
IGhhc0NoaWxkV2l0aE9wZXJhdG9yID0gWyZdIChDYWxjT3BlcmF0b3Igb3ApIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGlmIChpczxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRp
b25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07
Ci0KLSAgICBpZiAoIWhhc0NoaWxkV2l0aE9wZXJhdG9yKG9wKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKLSAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICBpZiAoaXM8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9u
Tm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7Ci0gICAgICAgICAgICBh
dXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQo
KSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUgOiBjaGls
ZHJlbikKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZFRv
TW92ZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChX
VEZNb3ZlKGNoaWxkKSk7Ci0gICAgfQotICAgIAotICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0
KCk7Ci0gICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOwotfQotCi1lbnVtIGNs
YXNzIFNvcnRpbmdDYXRlZ29yeSB7Ci0gICAgTnVtYmVyLAotICAgIFBlcmNlbnQsCi0gICAgRGlt
ZW5zaW9uLAotICAgIE90aGVyCi19OwotCi1zdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdD
YXRlZ29yeUZvclR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpCi17Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBTb3J0aW5nQ2F0ZWdvcnkgc29ydE9yZGVyW10gPSB7Ci0gICAgICAgIFNvcnRpbmdDYXRl
Z29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLAotICAg
ICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpQZXJjZW50LCAgICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51
bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsCi0gICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aCwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5
OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLAotICAgICAgICBT
b3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZy
ZXF1ZW5jeSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpPdGhlciwgICAgICAgICAvLyBVT3Ro
ZXIKLSAgICB9OwotCi0gICAgQ09NUElMRV9BU1NFUlQoQVJSQVlfU0laRShzb3J0T3JkZXIpID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgKyAxLCBz
b3J0T3JkZXJfc2l6ZV9zaG91bGRfbWF0Y2hfVW5pdENhdGVnb3J5KTsKLSAgICByZXR1cm4gc29y
dE9yZGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihjYWxjVW5pdENhdGVnb3J5KHVuaXRUeXBlKSld
OwotfQotCi1zdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdDYXRlZ29yeShjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KG5vZGUpKQotICAgICAgICByZXR1cm4gc29ydGluZ0NhdGVnb3J5Rm9yVHlwZShu
b2RlLnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICByZXR1cm4gU29ydGluZ0NhdGVnb3J5OjpPdGhl
cjsKLX0KLQotc3RhdGljIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKGlzPENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQotICAgICAgICByZXR1cm4gbm9kZS5wcmltaXRpdmVU
eXBlKCk7Ci0gICAgCi0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLX0KLQot
c3RhdGljIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uIGNvbnZlcnNp
b25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhDU1NVbml0VHlwZSBmaXJzdFR5cGUsIENTU1VuaXRUeXBl
IHNlY29uZFR5cGUpCi17Ci0gICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV04gfHwgc2Vjb25kVHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV04pCi0gICAgICAg
IHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6SW52YWxp
ZDsKLQotICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21i
aW5hdGlvbihmaXJzdFR5cGUpOwotCi0gICAgLy8gQ29tcGF0aWJsZSB0eXBlcy4KLSAgICBpZiAo
Zmlyc3RDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBmaXJzdENhdGVn
b3J5ID09IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihzZWNvbmRUeXBlKSkKLSAg
ICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpD
YW5vbmljYWxpemU7Ci0KLSAgICAvLyBNYXRjaGluZyB0eXBlcy4KLSAgICBpZiAoZmlyc3RUeXBl
ID09IHNlY29uZFR5cGUgJiYgaGFzRG91YmxlVmFsdWUoZmlyc3RUeXBlKSkKLSAgICAgICAgcmV0
dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZTsK
LQotICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6
SW52YWxpZDsKLX0KLQotYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29tYmluZUFsbENo
aWxkcmVuKCkgY29uc3QKLXsKLSAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+
KG1fY2hpbGRyZW5bMF0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZpcnN0
VW5pdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgYXV0byBmaXJz
dENhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1fY2hpbGRyZW5b
MF0tPnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9j
aGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBub2RlID0gbV9jaGlsZHJlbltp
XTsKLQotICAgICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8gbm9kZVVuaXRUeXBlID0g
bm9kZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBhdXRvIG5vZGVDYXRlZ29yeSA9IGNhbGN1
bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihub2RlVW5pdFR5cGUpOwotCi0gICAgICAgIGlm
IChub2RlQ2F0ZWdvcnkgIT0gZmlyc3RDYXRlZ29yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBpZiAobm9kZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyICYmIG5vZGVVbml0VHlwZSAhPSBmaXJzdFVuaXRUeXBlKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFoYXNEb3VibGVWYWx1ZShub2RlVW5pdFR5
cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5lQ2hpbGRyZW4oKQotewot
ICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChzaG91bGRTb3J0Q2hpbGRyZW4oKSkgewotICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy12YWx1ZXMtNC8jc29ydC1hLWNhbGN1bGF0aW9ucy1jaGlsZHJlbj4KLSAgICAg
ICAgc3RkOjpzdGFibGVfc29ydChtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4uZW5kKCks
IFtdKGNvbnN0IGF1dG8mIGZpcnN0LCBjb25zdCBhdXRvJiBzZWNvbmQpIHsKLSAgICAgICAgICAg
IC8vIFNvcnQgb3JkZXI6IG51bWJlciwgcGVyY2VudGFnZSwgZGltZW5zaW9uLCBvdGhlci4KLSAg
ICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBmaXJzdENhdGVnb3J5ID0gc29ydGluZ0NhdGVnb3J5
KGZpcnN0LmdldCgpKTsKLSAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBzZWNvbmRDYXRlZ29y
eSA9IHNvcnRpbmdDYXRlZ29yeShzZWNvbmQuZ2V0KCkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoZmlyc3RDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiAmJiBz
ZWNvbmRDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbikgewotICAgICAgICAg
ICAgICAgIC8vIElmIG5vZGVzIGNvbnRhaW5zIGFueSBkaW1lbnNpb25zLCByZW1vdmUgdGhlbSBm
cm9tIG5vZGVzLCBzb3J0IHRoZW0gYnkgdGhlaXIgdW5pdHMsIGFuZCBhcHBlbmQgdGhlbSB0byBy
ZXQuCi0gICAgICAgICAgICAgICAgYXV0byBmaXJzdFVuaXRTdHJpbmcgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6dW5pdFR5cGVTdHJpbmcoZmlyc3QtPnByaW1pdGl2ZVR5cGUoKSk7Ci0gICAgICAgICAg
ICAgICAgYXV0byBzZWNvbmRVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBl
U3RyaW5nKHNlY29uZC0+cHJpbWl0aXZlVHlwZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGZpcnN0VW5pdFN0cmluZywgc2Vjb25kVW5pdFN0cmlu
Zyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZmlyc3RDYXRlZ29yeSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2Vjb25kQ2F0ZWdv
cnkpOwotICAgICAgICB9KTsKLQotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFt
IDw8ICJwb3N0LXNvcnQ6ICIgPDwgKnRoaXMpOwotICAgIH0KLQotICAgIGlmIChjYWxjT3BlcmF0
b3IoKSA9PSBDYWxjT3BlcmF0b3I6OkFkZCkgewotICAgICAgICAvLyBGb3IgZWFjaCBzZXQgb2Yg
cm9vdOKAmXMgY2hpbGRyZW4gdGhhdCBhcmUgbnVtZXJpYyB2YWx1ZXMgd2l0aCBpZGVudGljYWwg
dW5pdHMsCi0gICAgICAgIC8vIHJlbW92ZSB0aG9zZSBjaGlsZHJlbiBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBjb250YWluaW5nCi0gICAgICAgIC8vIHRoZSBz
dW0gb2YgdGhlIHJlbW92ZWQgbm9kZXMsIGFuZCB3aXRoIHRoZSBzYW1lIHVuaXQuCi0gICAgICAg
IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgICAg
IG5ld0NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOwot
ICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlblswXS5jb3B5UmVm
KCkpOwotCi0gICAgICAgIENTU1VuaXRUeXBlIHByZXZpb3VzVHlwZSA9IHByaW1pdGl2ZVR5cGVG
b3JDb21iaW5hdGlvbihuZXdDaGlsZHJlblswXS5nZXQoKSk7Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1
dG8mIGN1cnJlbnROb2RlID0gbV9jaGlsZHJlbltpXTsKLSAgICAgICAgICAgIENTU1VuaXRUeXBl
IGN1cnJlbnRUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlLmdl
dCgpKTsKLQotICAgICAgICAgICAgYXV0byBjb252ZXJzaW9uVHlwZSA9IGNvbnZlcnNpb25Ub0Fk
ZFZhbHVlc1dpdGhUeXBlcyhwcmV2aW91c1R5cGUsIGN1cnJlbnRUeXBlKTsKLSAgICAgICAgICAg
IGlmIChjb252ZXJzaW9uVHlwZSAhPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29u
dmVyc2lvbjo6SW52YWxpZCkgewotICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuYWRkKGRvd25jYXN0PENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGN1cnJlbnROb2RlLmdldCgpKSwgY29udmVyc2lvblR5
cGUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBwcmV2aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24oY3VycmVudE5v
ZGUpOwotICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKGN1cnJlbnROb2Rl
LmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG5ld0NoaWxkcmVuLnNo
cmlua1RvRml0KCk7Ci0gICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjYWxjT3BlcmF0b3IoKSA9PSBDYWxj
T3BlcmF0b3I6Ok11bHRpcGx5KSB7Ci0gICAgICAgIC8vIElmIHJvb3QgaGFzIG11bHRpcGxlIGNo
aWxkcmVuIHRoYXQgYXJlIG51bWJlcnMgKG5vdCBwZXJjZW50YWdlcyBvciBkaW1lbnNpb25zKSwK
LSAgICAgICAgLy8gcmVtb3ZlIHRoZW0gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xlIG51
bWJlciBjb250YWluaW5nIHRoZSBwcm9kdWN0IG9mIHRoZSByZW1vdmVkIG5vZGVzLgotICAgICAg
ICBkb3VibGUgbXVsdGlwbGllciA9IDE7Ci0KLSAgICAgICAgLy8gU29ydGluZyB3aWxsIGhhdmUg
cHV0IHRoZSBudW1iZXIgbm9kZXMgZmlyc3QuCi0gICAgICAgIHVuc2lnbmVkIGxlYWRpbmdOdW1i
ZXJOb2RlQ291bnQgPSAwOwotICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2NoaWxkcmVuKSB7
Ci0gICAgICAgICAgICBhdXRvIG5vZGVUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9u
KG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKG5vZGVUeXBlICE9IENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtdWx0aXBsaWVyICo9IG5vZGUtPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKLSAgICAgICAgICAgICsrbGVhZGluZ051bWJlck5vZGVDb3VudDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdD
aGlsZHJlbjsKLSAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2No
aWxkcmVuLnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiByb290IGNvbnRhaW5zIG9u
bHkgdHdvIGNoaWxkcmVuLCBvbmUgb2Ygd2hpY2ggaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRh
Z2Ugb3IgZGltZW5zaW9uKSBhbmQgdGhlIG90aGVyIG9mCi0gICAgICAgIC8vIHdoaWNoIGlzIGEg
U3VtIHdob3NlIGNoaWxkcmVuIGFyZSBhbGwgbnVtZXJpYyB2YWx1ZXMsIG11bHRpcGx5IGFsbCBv
ZiB0aGUgU3Vt4oCZcyBjaGlsZHJlbiBieSB0aGUgbnVtYmVyLCB0aGVuCi0gICAgICAgIC8vIHJl
dHVybiB0aGUgU3VtLgotICAgICAgICAvLyBUaGUgU3VtJ3MgY2hpbGRyZW4gc2ltcGxpZmljYXRp
b24gd2lsbCBoYXZlIGhhcHBlbmVkIGFscmVhZHkuCi0gICAgICAgIGJvb2wgZGlkTXVsdGlwbHkg
PSBmYWxzZTsKLSAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQgJiYgbV9jaGlsZHJl
bi5zaXplKCkgLSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID09IDEpIHsKLSAgICAgICAgICAgIGF1
dG8gbXVsdGlwbGljYW5kQ2F0ZWdvcnkgPSBjYWxjVW5pdENhdGVnb3J5KHByaW1pdGl2ZVR5cGVG
b3JDb21iaW5hdGlvbihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkpOwotICAgICAgICAgICAgaWYg
KG11bHRpcGxpY2FuZENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Ci0g
ICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW4ubGFz
dCgpLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW5bMF0uZ2V0KCkpLm11bHRpcGx5KG11bHRpcGxpZXIpOwot
ICAgICAgICAgICAgICAgIGRpZE11bHRpcGx5ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKSAmJiBk
b3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmNh
bGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7Ci0gICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgbXVsdGlwbHlpbmcgd2l0aCBhbm90aGVyIG9wZXJhdGlvbiB0aGF0IGlzIGFuIGFk
ZGl0aW9uIGFuZCBhbGwgdGhlIGFkZGVkIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgLy8gYXJl
IHBlcmNlbnRhZ2VzIG9yIGRpbWVuc2lvbnMsIHdlIHNob3VsZCBtdWx0aXBseSBlYWNoIGNoaWxk
IGFuZCBtYWtlIHRoaXMgZXhwcmVzc2lvbiBhbgotICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9u
LgotICAgICAgICAgICAgICAgIGF1dG8gYWxsQ2hpbGRyZW5BcmVQcmltaXRpdmVWYWx1ZXMgPSBb
XShjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbikgLT4g
Ym9vbAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkLmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8mIGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hp
bGRyZW4ubGFzdCgpLmdldCgpKS5jaGlsZHJlbigpOwotICAgICAgICAgICAgICAgIGlmIChhbGxD
aGlsZHJlbkFyZVByaW1pdGl2ZVZhbHVlcyhjaGlsZHJlbikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQuY29weVJlZigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxh
c3QoKS5nZXQoKSkubXVsdGlwbHkobXVsdGlwbGllcik7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgbV9vcGVyYXRvciA9IENhbGNPcGVyYXRvcjo6QWRkOwotICAg
ICAgICAgICAgICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFkaWRNdWx0aXBseSkgewot
ICAgICAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIG11bHRpcGxpZXJOb2RlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRl
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobXVsdGlwbGllciwgQ1NTVW5pdFR5cGU6OkNTU19O
VU1CRVIpKTsKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShtdWx0aXBsaWVyTm9kZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50OyBpIDwgbV9jaGlsZHJlbi5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9j
aGlsZHJlbltpXS5jb3B5UmVmKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3Q2hpbGRyZW4u
c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4p
OwotICAgIH0KLQotICAgIGlmIChpc01pbk9yTWF4Tm9kZSgpICYmIGNhbkNvbWJpbmVBbGxDaGls
ZHJlbigpKSB7Ci0gICAgICAgIGF1dG8gY29tYmluZWRVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0t
PnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0
ZWdvcnlGb3JDb21iaW5hdGlvbihjb21iaW5lZFVuaXRUeXBlKTsKLSAgICAgICAgaWYgKGNhdGVn
b3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQotICAgICAgICAgICAgY29tYmluZWRV
bml0VHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRlZ29y
eSk7Ci0KLSAgICAgICAgZG91YmxlIHJlc29sdmVkVmFsdWUgPSBkb3VibGVWYWx1ZShjb21iaW5l
ZFVuaXRUeXBlKTsKLSAgICAgICAgYXV0byBuZXdDaGlsZCA9IENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc29sdmVkVmFsdWUsIGNv
bWJpbmVkVW5pdFR5cGUpKTsKLQotICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7Ci0gICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUobmV3Q2hpbGQpKTsKLSAgICB9Ci19Ci0KLS8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBsaWZ5LWEtY2FsY3VsYXRp
b24tdHJlZQotCi1SZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6c2ltcGxpZnkoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSkKLXsKLSAg
ICByZXR1cm4gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShyb290Tm9kZSksIDApOwotfQotCi1S
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnlS
ZWN1cnNpdmUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSwgaW50IGRlcHRo
KQotewotICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAg
ICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4o
cm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVy
YXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
aGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byBjaGlsZCA9IGNoaWxkcmVu
W2ldLmNvcHlSZWYoKTsKLSAgICAgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJz
aXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgaWYgKG5ld05vZGUu
cHRyKCkgIT0gY2hpbGRyZW5baV0ucHRyKCkpCi0gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0g
PSBXVEZNb3ZlKG5ld05vZGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpczxDU1NDYWxj
TmVnYXRlTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICBSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiBjaGlsZCA9IG5lZ2F0ZU5vZGUuY2hpbGQoKTsKLSAgICAgICAg
YXV0byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsg
MSk7Ci0gICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9ICZuZWdhdGVOb2RlLmNoaWxkKCkpCi0g
ICAgICAgICAgICBuZWdhdGVOb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOwotICAgIH0g
ZWxzZSBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBhdXRv
JiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgp
KTsKLSAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hpbGQgPSBpbnZlcnROb2Rl
LmNoaWxkKCk7Ci0gICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1v
dmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSAmaW52
ZXJ0Tm9kZS5jaGlsZCgpKQotICAgICAgICAgICAgaW52ZXJ0Tm9kZS5zZXRDaGlsZChXVEZNb3Zl
KG5ld05vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2ltcGxpZnlOb2RlKFdURk1vdmUocm9v
dE5vZGUpLCBkZXB0aCk7Ci19Ci0KLVJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNP
cGVyYXRpb25Ob2RlOjpzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBy
b290Tm9kZSwgaW50IGRlcHRoKQotewotICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgLy8gSWYgcm9vdCBpcyBhIHBlcmNlbnRhZ2UgdGhh
dCB3aWxsIGJlIHJlc29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSwgYW5kIHRoZXJlIGlzIGVu
b3VnaCBpbmZvcm1hdGlvbgotICAgICAgICAvLyBhdmFpbGFibGUgdG8gcmVzb2x2ZSBpdCwgZG8g
c28sIGFuZCBleHByZXNzIHRoZSByZXN1bHRpbmcgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgYXBwcm9w
cmlhdGUgY2Fub25pY2FsCi0gICAgICAgIC8vIHVuaXQuIFJldHVybiB0aGUgdmFsdWUuCi0KLSAg
ICAgICAgLy8gSWYgcm9vdCBpcyBhIGRpbWVuc2lvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgaW4g
aXRzIGNhbm9uaWNhbCB1bml0LCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uCi0gICAg
ICAgIC8vIGF2YWlsYWJsZSB0byBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgdW5pdCwgZG8g
c28sIGFuZCByZXR1cm4gdGhlIHZhbHVlLgotICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZU5v
ZGUgPSBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZS5nZXQoKSk7
Ci0gICAgICAgIHByaW1pdGl2ZVZhbHVlTm9kZS5jYW5vbmljYWxpemVVbml0KCk7Ci0gICAgICAg
IHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByb290IGlzIGFu
IG9wZXJhdG9yIG5vZGUgdGhhdOKAmXMgbm90IG9uZSBvZiB0aGUgY2FsYy1vcGVyYXRvciBub2Rl
cywgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIG51bWVyaWMgdmFsdWVzCi0gICAgLy8gd2l0
aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY29tcHV0ZWQgdGhlIG9wZXJhdGlvbiByb290IHJlcHJl
c2VudHMsIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgcm9vdOKAmXMgb3BlcmF0aW9uCi0g
ICAgLy8gdXNpbmcgaXRzIGNoaWxkcmVuLCBleHByZXNzZWQgaW4gdGhlIHJlc3VsdOKAmXMgY2Fu
b25pY2FsIHVuaXQuCi0gICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSkp
IHsKLSAgICAgICAgYXV0byYgY2FsY09wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICAvLyBEb24ndCBzaW1wbGlmeSBh
dCB0aGUgcm9vdCwgb3RoZXJ3aXNlIHdlIGxvc2UgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbiBmb3Ig
c2VyaWFsaXphdGlvbi4KLSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCku
c2l6ZSgpID09IDEgJiYgZGVwdGgpCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjYWxjT3Bl
cmF0aW9uTm9kZS5jaGlsZHJlbigpWzBdKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxjT3Bl
cmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkpIHsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25O
b2RlLmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpBZGQpOwotICAgICAg
ICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgewotICAg
ICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxj
T3BlcmF0b3I6Ok11bHRpcGx5KTsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJp
bmVDaGlsZHJlbigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsY09wZXJh
dGlvbk5vZGUuaXNNaW5Pck1heE5vZGUoKSkKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2Rl
LmNvbWJpbmVDaGlsZHJlbigpOwotCi0gICAgICAgIC8vIElmIG9ubHkgb25lIGNoaWxkIHJlbWFp
bnMsIHJldHVybiB0aGUgY2hpbGQgKGV4Y2VwdCBhdCB0aGUgcm9vdCkuCi0gICAgICAgIGF1dG8g
c2hvdWxkQ29tYmluZVBhcmVudFdpdGhPbmx5Q2hpbGQgPSBbXShjb25zdCBDU1NDYWxjT3BlcmF0
aW9uTm9kZSYgcGFyZW50LCBpbnQgZGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChw
YXJlbnQuY2hpbGRyZW4oKS5zaXplKCkgIT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIC8vIEFsd2F5cyBzaW1wbGlmeSBiZWxvdyB0aGUgcm9vdC4KLSAg
ICAgICAgICAgIGlmIChkZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgICAgLy8gQXQgdGhlIHJvb3QsIHByZXNlcnZlIHRoZSByb290IGZ1bmN0aW9uIGJ5IG9u
bHkgbWVyZ2luZyBub2RlcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLgotICAgICAgICAgICAgYXV0
byYgY2hpbGQgPSBwYXJlbnQuY2hpbGRyZW4oKS5maXJzdCgpOwotICAgICAgICAgICAgaWYgKCFp
czxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgYXV0byBwYXJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRnJvbU9w
ZXJhdG9yKHBhcmVudC5jYWxjT3BlcmF0b3IoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkRnVu
Y3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9k
ZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpKTsKLSAgICAgICAgICAgIHJldHVybiBjaGls
ZEZ1bmN0aW9uID09IHBhcmVudEZ1bmN0aW9uOwotICAgICAgICB9OwotCi0gICAgICAgIGlmIChz
aG91bGRDb21iaW5lUGFyZW50V2l0aE9ubHlDaGlsZChjYWxjT3BlcmF0aW9uTm9kZSwgZGVwdGgp
KQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRyZW4o
KS5maXJzdCgpKTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgYXV0
byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlLmdldCgp
KS5jaGlsZCgpOwotICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWVyaWMgdmFs
dWUsIHJldHVybiBhbiBlcXVpdmFsZW50IG51bWVyaWMgdmFsdWUsIGJ1dCB3aXRoIHRoZSB2YWx1
ZSBuZWdhdGVkICgwIC0gdmFsdWUpLgotICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
PihjaGlsZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGRvd25jYXN0PENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkubmVnYXRlKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2hpbGROb2RlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBy
b2904oCZcyBjaGlsZCBpcyBhIE5lZ2F0ZSBub2RlLCByZXR1cm4gdGhlIGNoaWxk4oCZcyBjaGls
ZC4KLSAgICAgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpLmNoaWxk
KCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgYXV0
byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgp
KS5jaGlsZCgpOwotICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWJlciAobm90
IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24pIHJldHVybiB0aGUgcmVjaXByb2NhbCBvZiB0aGUg
Y2hpbGTigJlzIHZhbHVlLgotICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGls
ZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaW52ZXJ0KCk7Ci0gICAgICAgICAgICByZXR1
cm4gY2hpbGROb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQg
aXMgYW4gSW52ZXJ0IG5vZGUsIHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgotICAgICAgICBp
ZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsKLQotICAgICAg
ICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUo
cm9vdE5vZGUpOwotfQotCi1DU1NVbml0VHlwZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6cHJpbWl0
aXZlVHlwZSgpIGNvbnN0Ci17Ci0gICAgYXV0byB1bml0Q2F0ZWdvcnkgPSBjYXRlZ29yeSgpOwot
ICAgIHN3aXRjaCAodW5pdENhdGVnb3J5KSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXI6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6
IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmNhdGVnb3J5KCkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gQ1NTVW5p
dFR5cGU6OkNTU19OVU1CRVI7Ci0KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnQ6IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLQotICAgICAgICBpZiAobV9jaGlsZHJlbi5z
aXplKCkgPT0gMikgewotICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMF0tPmNhdGVnb3J5KCkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBt
X2NoaWxkcmVuWzFdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgICAgICBpZiAobV9jaGlsZHJl
blsxXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAg
fQotICAgICAgICBDU1NVbml0VHlwZSBmaXJzdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRp
dmVUeXBlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAg
ICAgICAgICBpZiAoZmlyc3RUeXBlICE9IGNoaWxkLT5wcmltaXRpdmVUeXBlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZmlyc3RUeXBlOwotICAgIH0KLQotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6RnJlcXVlbmN5OgotICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAg
ICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuLmZpcnN0KCktPnByaW1pdGl2ZVR5cGUoKTsKLSAg
ICAgICAgcmV0dXJuIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeSh1bml0
Q2F0ZWdvcnkpOwotCi0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3Ro
OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24o
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17
Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsK
LSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKLQot
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgIGF1dG8gbm9kZSA9
IGNoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgIGlm
ICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBub2Rlcy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShub2RlKSk7Ci0gICAgfQotCi0gICAgLy8gUmV2ZXJzZSB0aGUg
b3BlcmF0aW9uIHdlIGRpZCB3aGVuIGNyZWF0aW5nIHRoaXMgbm9kZSwgcmVjb3ZlcmluZyBhIHN1
aXRhYmxlIGRlc3RpbmF0aW9uIGNhdGVnb3J5IGZvciBvdGhlcndpc2UtYW1iaWd1b3VzIG1pbi9t
YXgvY2xhbXAgbm9kZXMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2F0ZWdvcnkgaXMgcmVhbGx5
IG9ubHkgZ29vZCBlbm91Z2ggZm9yIHRoYXQgcHVycG9zZSBhbmQgaXMgbm90IGFjY3VyYXRlIGZv
ciBvdGhlciBub2RlIHR5cGVzOyB3ZSBjb3VsZCB1c2UgYSBib29sZWFuIGluc3RlYWQuCi0gICAg
YXV0byBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0g
ICAgaWYgKGNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkK
LSAgICAgICAgZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aDsKLSAgICBlbHNlIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXIpCi0gICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpOdW1iZXI7Ci0KLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk9wZXJh
dGlvbj4oV1RGTW92ZShub2RlcyksIG1fb3BlcmF0b3IsIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwot
fQotCi1kb3VibGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBl
IHVuaXRUeXBlKSBjb25zdAotewotICAgIGJvb2wgYWxsb3dOdW1iZXJzID0gY2FsY09wZXJhdG9y
KCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsKLQotICAgIHJldHVybiBldmFsdWF0ZShtX2No
aWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7Ci0gICAgICAgIENTU1VuaXRUeXBlIGNoaWxk
VHlwZSA9IHVuaXRUeXBlOwotICAgICAgICBpZiAoYWxsb3dOdW1iZXJzICYmIHVuaXRUeXBlICE9
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSICYmIGNoaWxkLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICBjaGlsZFR5cGUgPSBDU1NVbml0VHlw
ZTo6Q1NTX05VTUJFUjsKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5kb3VibGVWYWx1ZShjaGlsZFR5
cGUpOwotICAgIH0pKTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRl
TGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAoYXV0byYg
Y2hpbGQpIHsKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lv
bkRhdGEpOwotICAgIH0pKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVj
dERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYg
dmFsdWVzKSBjb25zdAotewotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAg
ICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVz
KTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29u
c3QKLXsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQt
PmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwotfQot
Ci12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQoY29uc3QgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQotewotICAgIGF1dG8g
c2hvdWxkT3V0cHV0RW5jbG9zaW5nQ2FsYyA9IFtdKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9k
ZSYgcm9vdE5vZGUpIHsKLSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290
Tm9kZSkpIHsKLSAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bk5vZGUuaXNDYWxjU3VtTm9kZSgpIHx8IG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU+KHJvb3ROb2RlKTsKLSAgICB9OwotICAgIAotICAgIGJvb2wgb3V0cHV0Q2FsYyA9IHNob3Vs
ZE91dHB1dEVuY2xvc2luZ0NhbGMobm9kZSk7Ci0gICAgaWYgKG91dHB1dENhbGMpCi0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCJjYWxjKCIpOwotCi0gICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKG5v
ZGUsIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKLQotICAgIGlmIChvdXRwdXRDYWxj
KQotICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciog
ZnVuY3Rpb25QcmVmaXhGb3JPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNo
IChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6OlN1YnRyYWN0OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKLSAgICBjYXNl
IENhbGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHJldHVybiAibWlu
KCI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogcmV0dXJuICJtYXgoIjsKLSAgICBjYXNl
IENhbGNPcGVyYXRvcjo6Q2xhbXA6IHJldHVybiAiY2xhbXAoIjsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuICIiOwotfQotCi0vLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMt
NC8jc2VyaWFsaXplLWEtY2FsY3VsYXRpb24tdHJlZT4KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5v
ZGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zIHBhcmVucykKLXsKLSAg
ICAvLyBJZiByb290IGlzIGEgbnVtZXJpYyB2YWx1ZSwgb3IgYSBub24tbWF0aCBmdW5jdGlvbiwg
c2VyaWFsaXplIHJvb3QgcGVyIHRoZSBub3JtYWwgcnVsZXMgZm9yIGl0IGFuZCByZXR1cm4gdGhl
IHJlc3VsdC4KLSAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpIHsK
LSAgICAgICAgYXV0byYgdmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZT4obm9kZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlTm9kZS5jdXN0b21DU1NU
ZXh0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzPENTU0NhbGNPcGVy
YXRpb25Ob2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNh
c3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUpOwotCi0gICAgICAgIGlmIChvcGVyYXRpb25O
b2RlLmlzQ2FsY1N1bU5vZGUoKSkgewotICAgICAgICAgICAgLy8gSWYgcm9vdCBpcyBhIFN1bSBu
b2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIuCi0gICAgICAg
ICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQotICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcoJyk7Ci0KLSAgICAgICAgICAgIC8vIFNpbXBsaWZpY2F0aW9u
IGFscmVhZHkgc29ydGVkIGNoaWxkcmVuLgotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBv
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6
ZSgpKTsKLSAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBjaGlsZCwgYW5k
IGFwcGVuZCBpdCB0byBzLgotICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxk
cmVuLmZpcnN0KCksIGJ1aWxkZXIpOwotCi0gICAgICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBv
ZiByb290IGJleW9uZCB0aGUgZmlyc3Q6Ci0gICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIE5l
Z2F0ZSBub2RlLCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIE5lZ2F0ZeKA
mXMgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAgICAgICAgICAvLyBJZiBj
aGlsZCBpcyBhIG5lZ2F0aXZlIG51bWVyaWMgdmFsdWUsIGFwcGVuZCAiIC0gIiB0byBzLCB0aGVu
IHNlcmlhbGl6ZSB0aGUgbmVnYXRpb24gb2YgY2hpbGQgYXMgbm9ybWFsIGFuZCBhcHBlbmQgdGhl
IHJlc3VsdCB0byBzLgotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhcHBlbmQgIiArICIgdG8g
cywgdGhlbiBzZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ldOwotICAgICAgICAgICAg
ICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgLSAiKTsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRDU1NU
ZXh0UmVjdXJzaXZlKGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZC5nZXQoKSkuY2hp
bGQoKSwgYnVpbGRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+
KGNoaWxkLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlTm9k
ZS5pc05lZ2F0aXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgLSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgbmVnYXRp
b24gb2YgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuaXRUeXBlID0gcHJp
bWl0aXZlVmFsdWVOb2RlLnZhbHVlKCkucHJpbWl0aXZlVHlwZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoMCAtIHByaW1pdGl2ZVZhbHVlTm9kZS52YWx1ZSgpLmRv
dWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyh1bml0VHlwZSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiArICIpOwotICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vy
c2l2ZShjaGlsZCwgYnVpbGRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChw
YXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJyknKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgewotICAgICAg
ICAgICAgLy8gSWYgcm9vdCBpcyBhIFByb2R1Y3Qgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5p
dGlhbGx5IGNvbnRhaW5pbmcgIigiLgotICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGlu
Z1BhcmVuczo6SW5jbHVkZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKCcpOwot
Ci0gICAgICAgICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBjaGlsZHJlbi4K
LSAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwot
ICAgICAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAvLyBTZXJp
YWxpemUgcm9vdOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4KLSAgICAgICAg
ICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyKTsKLQot
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhlIGZpcnN0Ogot
ICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUsIGFwcGVuZCAiIC8gIiB0
byBzLCB0aGVuIHNlcmlhbGl6ZSB0aGUgSW52ZXJ04oCZcyBjaGlsZCBhbmQgYXBwZW5kIHRoZSBy
ZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBwZW5kICIgKiAiIHRvIHMs
IHRoZW4gc2VyaWFsaXplIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsKLSAgICAgICAgICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkKSkgewotICAgICAgICAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIC8gIik7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4
dFJlY3Vyc2l2ZShkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxk
KCksIGJ1aWxkZXIpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICogIik7Ci0gICAgICAg
ICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVk
ZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgcm9vdCBpcyBhbnl0aGluZyBidXQgYSBT
dW0sIE5lZ2F0ZSwgUHJvZHVjdCwgb3IgSW52ZXJ0IG5vZGUsIHNlcmlhbGl6ZSBhIG1hdGggZnVu
Y3Rpb24gZm9yIHRoZQotICAgICAgICAvLyBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBu
b2RlIHR5cGUsIHRyZWF0aW5nIHRoZSBub2Rl4oCZcyBjaGlsZHJlbiBhcyB0aGUgZnVuY3Rpb27i
gJlzCi0gICAgICAgIC8vIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbiBhcmd1bWVudHMsIGFu
ZCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25QcmVm
aXhGb3JPcGVyYXRvcihvcGVyYXRpb25Ob2RlLmNhbGNPcGVyYXRvcigpKSk7Ci0KLSAgICAgICAg
YXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgIEFTU0VS
VChjaGlsZHJlbi5zaXplKCkpOwotICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRy
ZW4uZmlyc3QoKSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQpOwotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNp
dmUoY2hpbGRyZW5baV0sIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpKSB7Ci0g
ICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4obm9k
ZSk7Ci0gICAgICAgIC8vIElmIHJvb3QgaXMgYSBOZWdhdGUgbm9kZSwgbGV0IHMgYmUgYSBzdHJp
bmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigtMSAqICIuCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCItMSAqIik7Ci0gICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShuZWdhdGVOb2RlLmNoaWxk
KCksIGJ1aWxkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChpczxD
U1NDYWxjSW52ZXJ0Tm9kZT4obm9kZSkpIHsKLSAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9IGRv
d25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihub2RlKTsKLSAgICAgICAgLy8gSWYgcm9vdCBpcyBh
biBJbnZlcnQgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigx
IC8gIi4KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIjEgLyAiKTsKLSAgICAgICAgYnVpbGRDU1NU
ZXh0UmVjdXJzaXZlKGludmVydE5vZGUuY2hpbGQoKSwgYnVpbGRlcik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAoVGV4dFN0cmVh
bSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgImNhbGMgb3BlcmF0aW9uICIgPDwgbV9vcGVyYXRv
ciA8PCAiIChjYXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGUgIiA8PCBwcmltaXRp
dmVUeXBlKCkgPDwgIikiOwotCi0gICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7
Ci0gICAgdHMgPDwgbV9jaGlsZHJlbi5zaXplKCkgPDwgIiBjaGlsZHJlbiI7Ci0gICAgZm9yIChh
dXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgibm9kZSIs
IGNoaWxkKTsKLX0KLQotYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxzKGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYgZXhwKSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gZXhw
LnR5cGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgQ1NTQ2FsY09wZXJh
dGlvbk5vZGUmIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUm
PihleHApOwotCi0gICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IG90aGVyLm1fY2hpbGRyZW4u
c2l6ZSgpIHx8IG1fb3BlcmF0b3IgIT0gb3RoZXIubV9vcGVyYXRvcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmICghY29tcGFyZUNTU1ZhbHVlKG1fY2hpbGRyZW5baV0sIG90aGVy
Lm1fY2hpbGRyZW5baV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpldmFsdWF0ZU9w
ZXJhdG9yKENhbGNPcGVyYXRvciBvcCwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNoaWxkcmVuKQot
ewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7Ci0gICAg
ICAgIGRvdWJsZSBzdW0gPSAwOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4p
Ci0gICAgICAgICAgICBzdW0gKz0gY2hpbGQ7Ci0gICAgICAgIHJldHVybiBzdW07Ci0gICAgfQot
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAgICAgICAgQVNTRVJUKGNoaWxkcmVu
LnNpemUoKSA9PSAyKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC0gY2hpbGRyZW5bMV07
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Ci0gICAgICAgIGRvdWJsZSBwcm9k
dWN0ID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAg
ICAgcHJvZHVjdCAqPSBjaGlsZDsKLSAgICAgICAgcmV0dXJuIHByb2R1Y3Q7Ci0gICAgfQotICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0gICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXpl
KCkgPT0gMSB8fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIGlmIChjaGlsZHJlbi5z
aXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLyBjaGlsZHJlblsx
XTsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7Ci0gICAgICAgIGlmIChjaGlsZHJlbi5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZG91YmxlIG1pbmltdW0gPSBjaGlsZHJlblswXTsKLSAg
ICAgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgICAgICBtaW5pbXVtID0g
c3RkOjptaW4obWluaW11bSwgY2hpbGQpOwotICAgICAgICByZXR1cm4gbWluaW11bTsKLSAgICB9
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogewotICAgICAgICBpZiAoY2hpbGRyZW4uaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7Ci0gICAgICAgIGRvdWJsZSBtYXhpbXVtID0gY2hpbGRyZW5bMF07Ci0gICAg
ICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAgICAgbWF4aW11bSA9IHN0
ZDo6bWF4KG1heGltdW0sIGNoaWxkKTsKLSAgICAgICAgcmV0dXJuIG1heGltdW07Ci0gICAgfQot
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogewotICAgICAgICBpZiAoY2hpbGRyZW4uc2l6
ZSgpICE9IDMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZG91YmxlIG1pbiA9IGNoaWxkcmVuWzBdOwotICAgICAg
ICBkb3VibGUgdmFsdWUgPSBjaGlsZHJlblsxXTsKLSAgICAgICAgZG91YmxlIG1heCA9IGNoaWxk
cmVuWzJdOwotICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4
KSk7Ci0gICAgfQotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotCi1jbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgewotcHVibGljOgot
ICAgIGV4cGxpY2l0IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcihDYWxjdWxhdGlvbkNhdGVn
b3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi0gICAgICAgIDogbV9kZXN0aW5hdGlvbkNhdGVnb3J5
KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi0gICAgeyB9Ci0KLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBwYXJzZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgQ1NTVmFsdWVJRCBmdW5j
dGlvbik7Ci0gICAgCi1wcml2YXRlOgotICAgIGNoYXIgb3BlcmF0b3JWYWx1ZShjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4pCi0gICAgewotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IERl
bGltaXRlclRva2VuKQotICAgICAgICAgICAgcmV0dXJuIHRva2VuLmRlbGltaXRlcigpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIHBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0gICAgYm9vbCBwYXJz
ZVZhbHVlVGVybShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4mKTsKLSAgICBib29sIHBhcnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiwg
aW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFy
c2VDYWxjUHJvZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VDYWxjVmFsdWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsK
LQotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5OwotfTsKLQot
Ly8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI2NhbGMtc3ludGF4PjoK
LS8vIDxjYWxjKCk+ICA9IGNhbGMoIDxjYWxjLXN1bT4gKQotLy8gPG1pbigpPiAgID0gbWluKCA8
Y2FsYy1zdW0+IyApCi0vLyA8bWF4KCk+ICAgPSBtYXgoIDxjYWxjLXN1bT4jICkKLS8vIDxjbGFt
cCgpPiA9IGNsYW1wKCA8Y2FsYy1zdW0+I3szfSApCi0vLyA8c2luKCk+ICAgPSBzaW4oIDxjYWxj
LXN1bT4gKQotLy8gPGNvcygpPiAgID0gY29zKCA8Y2FsYy1zdW0+ICkKLS8vIDx0YW4oKT4gICA9
IHRhbiggPGNhbGMtc3VtPiApCi0vLyA8YXNpbigpPiAgPSBhc2luKCA8Y2FsYy1zdW0+ICkKLS8v
IDxhY29zKCk+ICA9IGFjb3MoIDxjYWxjLXN1bT4gKQotLy8gPGF0YW4oKT4gID0gYXRhbiggPGNh
bGMtc3VtPiApCi0vLyA8YXRhbjIoKT4gPSBhdGFuMiggPGNhbGMtc3VtPiwgPGNhbGMtc3VtPiAp
Ci0vLyA8cG93KCk+ICAgPSBwb3coIDxjYWxjLXN1bT4sIDxjYWxjLXN1bT4gKQotLy8gPHNxcnQo
KT4gID0gc3FydCggPGNhbGMtc3VtPiApCi0vLyA8aHlwb3QoKT4gPSBoeXBvdCggPGNhbGMtc3Vt
PiMgKQotLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+IFsgWyAnKycgfCAnLScgXSA8Y2Fs
Yy1wcm9kdWN0PiBdKgotLy8gPGNhbGMtcHJvZHVjdD4gPSA8Y2FsYy12YWx1ZT4gWyBbICcqJyB8
ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgotLy8gPGNhbGMtdmFsdWU+ID0gPG51bWJlcj4gfCA8ZGlt
ZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3VtPiApCi1SZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyhDU1NQ
YXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlvbikKLXsKLSAgICB0b2tl
bnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKLQotICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IHJlc3VsdDsKLSAgICBib29sIG9rID0gcGFyc2VDYWxjRnVuY3Rpb24odG9rZW5zLCBmdW5j
dGlvbiwgMCwgcmVzdWx0KTsKLSAgICBpZiAoIW9rIHx8ICF0b2tlbnMuYXRFbmQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0
KSk7Ci0KLSAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkocmVzdWx0
LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8
PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgLSBhZnRlciBzaW1wbGlm
aWNhdGlvbiAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0KSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1lbnVtIFBhcnNlU3RhdGUgewotICAgIE9LLAotICAgIFRvb0RlZXAsCi0gICAg
Tm9Nb3JlVG9rZW5zCi19OwotCi1zdGF0aWMgUGFyc2VTdGF0ZSBjaGVja0RlcHRoQW5kSW5kZXgo
aW50IGRlcHRoLCBDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucykKLXsKLSAgICBpZiAodG9rZW5z
LmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBOb01vcmVUb2tlbnM7Ci0gICAgaWYgKGRlcHRoID4g
bWF4RXhwcmVzc2lvbkRlcHRoKSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJl
YW0gPDwgIkRlcHRoICIgPDwgZGVwdGggPDwgIiBleGNlZWRlZCBtYXhFeHByZXNzaW9uRGVwdGgg
IiA8PCBtYXhFeHByZXNzaW9uRGVwdGgpOwotICAgICAgICByZXR1cm4gVG9vRGVlcDsKLSAgICB9
Ci0gICAgcmV0dXJuIE9LOwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBDU1NWYWx1ZUlE
IGZ1bmN0aW9uSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJl
c3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9L
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyAiYXJndW1lbnRzIiByZWZlcnMgdG8g
dGhpbmdzIGJldHdlZW4gY29tbWFzLgotICAgIHVuc2lnbmVkIG1pbkFyZ3VtZW50Q291bnQgPSAx
OwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtYXhBcmd1bWVudENvdW50OwotCi0gICAgc3dpdGNo
IChmdW5jdGlvbklEKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZU1pbjoKLSAgICBjYXNlIENTU1ZhbHVl
TWF4OgotICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gc3RkOjpudWxsb3B0OwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6Ci0gICAgICAgIG1pbkFyZ3VtZW50Q291bnQg
PSAzOwotICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUNhbGM6Ci0gICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSAxOwotICAgICAg
ICBicmVhazsKLSAgICAvLyBUT0RPOiBjbGFtcCwgc2luLCBjb3MsIHRhbiwgYXNpbiwgYWNvcywg
YXRhbiwgYXRhbjIsIHBvdywgc3FydCwgaHlwb3QuCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2Rl
czsKLQotICAgIGJvb2wgcmVxdWlyZUNvbW1hID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgYXJndW1l
bnRDb3VudCA9IDA7Ci0gICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgewotICAgICAgICB0b2tl
bnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKHJlcXVpcmVDb21tYSkgewotICAg
ICAgICAgICAgaWYgKHRva2Vucy5jb25zdW1lKCkudHlwZSgpICE9IENvbW1hVG9rZW4pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0
ZXNwYWNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiBub2RlOwotICAgICAgICBpZiAoIXBhcnNlQ2FsY1N1bSh0b2tlbnMsIGRlcHRoLCBub2Rl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICArK2FyZ3VtZW50Q291bnQ7
Ci0gICAgICAgIGlmIChtYXhBcmd1bWVudENvdW50ICYmIGFyZ3VtZW50Q291bnQgPiBtYXhBcmd1
bWVudENvdW50LnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
bm9kZXMuYXBwZW5kKG5vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIHJlcXVpcmVDb21t
YSA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChhcmd1bWVudENvdW50IDwgbWluQXJndW1l
bnRDb3VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChmdW5jdGlvbklE
KSB7Ci0gICAgY2FzZSBDU1NWYWx1ZU1pbjoKLSAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJh
dGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1pbiwgV1RGTW92
ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTVmFsdWVNYXg6Ci0gICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpNYXgsIFdURk1vdmUobm9kZXMpLCBt
X2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVl
Q2xhbXA6Ci0gICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5P
ck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpDbGFtcCwgV1RGTW92ZShub2RlcyksIG1fZGVzdGlu
YXRpb25DYXRlZ29yeSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRD
YWxjOgotICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgotICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgLy8gVE9ETzogY2xhbXAsIHNpbiwgY29zLCB0YW4sIGFzaW4sIGFjb3MsIGF0YW4sIGF0YW4y
LCBwb3csIHNxcnQsIGh5cG90Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBh
cnNlcjo6cGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4g
PSB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICBpZiAoISh0b2tlbi50
eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbiB8
fCB0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgYXV0byB0eXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBpZiAoY2FsY1Vu
aXRDYXRlZ29yeSh0eXBlKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJlc3VsdCA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHRva2VuLm51bWVyaWNWYWx1ZSgp
LCB0eXBlKSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tl
bnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsK
LSAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZpbmRGdW5jdGlvbklkID0gWyZdKENTU1ZhbHVl
SUQmIGZ1bmN0aW9uSWQpIHsKLSAgICAgICAgaWYgKHRva2Vucy5wZWVrKCkudHlwZSgpID09IExl
ZnRQYXJlbnRoZXNpc1Rva2VuKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbklkID0gQ1NTVmFsdWVD
YWxjOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbklkID0gdG9rZW5zLnBlZWsoKS5mdW5jdGlvbklkKCk7Ci0gICAgICAgIHJldHVybiBDU1ND
YWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpOwotICAgIH07Ci0KLSAgICBDU1NW
YWx1ZUlEIGZ1bmN0aW9uSWQ7Ci0gICAgaWYgKGZpbmRGdW5jdGlvbklkKGZ1bmN0aW9uSWQpKSB7
Ci0gICAgICAgIENTU1BhcnNlclRva2VuUmFuZ2UgaW5uZXJSYW5nZSA9IHRva2Vucy5jb25zdW1l
QmxvY2soKTsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIGlu
bmVyUmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2FsY0Z1
bmN0aW9uKGlubmVyUmFuZ2UsIGZ1bmN0aW9uSWQsIGRlcHRoICsgMSwgcmVzdWx0KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcGFyc2VWYWx1ZSh0b2tlbnMsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9kdWN0KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYg
cmVzdWx0KQotewotICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0g
T0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IGZpcnN0VmFsdWU7Ci0gICAgaWYgKCFwYXJzZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRo
LCBmaXJzdFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKLQotICAgIHdoaWxlICghdG9rZW5zLmF0RW5k
KCkpIHsKLSAgICAgICAgY2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9r
ZW5zLnBlZWsoKSk7Ci0gICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2Fz
dDxjaGFyPihDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KSAmJiBvcGVyYXRvckNoYXJhY3RlciAhPSBz
dGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRpdmlkZSkpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAg
IAotICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBuZXh0VmFsdWU7Ci0gICAg
ICAgIGlmICghcGFyc2VDYWxjVmFsdWUodG9rZW5zLCBkZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4
dFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChvcGVyYXRv
ckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRpdmlkZSkpCi0g
ICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKG5leHRWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgICAgICBpZiAoZmlyc3RWYWx1ZSkKLSAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAg
IG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGVzLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGZpcnN0VmFs
dWUpOwotICAgICAgICByZXR1cm4gISFyZXN1bHQ7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoV1RGTW92ZShub2RlcykpOwotICAgIHJl
dHVybiAhIXJlc3VsdDsKLX0KLQotYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBh
cnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFu
ZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVlOwotICAgIGlmICghcGFy
c2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsK
LQotICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKLSAgICAgICAgY2hhciBvcGVyYXRvckNo
YXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7Ci0gICAgICAgIGlmIChvcGVy
YXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkFkZCkgJiYg
b3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpTdWJ0
cmFjdCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoKCZ0b2tlbnMucGVlaygp
IC0gMSktPnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGNhbGMoMXB4KyAycHgpIGlzIGludmFsaWQKLQotICAgICAgICB0b2tlbnMuY29uc3Vt
ZSgpOwotICAgICAgICBpZiAodG9rZW5zLnBlZWsoKS50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2Vu
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCArMnB4KSBpcyBpbnZhbGlk
Ci0KLSAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0KLSAgICAg
ICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbmV4dFZhbHVlOwotICAgICAgICBpZiAo
IXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChvcGVyYXRvckNoYXJh
Y3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1YnRyYWN0KSkKLSAgICAg
ICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUobmV4dFZhbHVlLnJl
bGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAgIGlmIChmaXJzdFZhbHVlKQotICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAgICAgbm9k
ZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0KLSAgICBpZiAo
bm9kZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZmlyc3RWYWx1ZSk7
Ci0gICAgICAgIHJldHVybiAhIXJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKLSAgICByZXR1cm4gISFy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBj
cmVhdGVCbGVuZEhhbGYoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2Rl
OjpjcmVhdGUoQ2FsY09wZXJhdG9yOjpNdWx0aXBseSwgY3JlYXRlQ1NTKGxlbmd0aCwgc3R5bGUp
LAotICAgICAgICBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKSk7Ci19Ci0K
LXN0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNTUyhjb25z
dCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBub2RlcywgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPj4gdmFsdWVzOwotICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVz
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKLSAgICAgICAgYXV0byBj
c3NOb2RlID0gY3JlYXRlQ1NTKCpub2RlLCBzdHlsZSk7Ci0gICAgICAgIGlmICghY3NzTm9kZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKGNz
c05vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZXM7Ci19Ci0K
LXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBub2RlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAg
c3dpdGNoIChub2RlLnR5cGUoKSkgewotICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6
TnVtYmVyOiB7Ci0gICAgICAgIGZsb2F0IHZhbHVlID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25O
dW1iZXI+KG5vZGUpLnZhbHVlKCk7IC8vIGRvdWJsZT8KLSAgICAgICAgcmV0dXJuIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVl
LCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNz
aW9uTm9kZVR5cGU6Okxlbmd0aDogewotICAgICAgICBhdXRvJiBsZW5ndGggPSBkb3duY2FzdDxD
YWxjRXhwcmVzc2lvbkxlbmd0aD4obm9kZSkubGVuZ3RoKCk7Ci0gICAgICAgIGlmICghbGVuZ3Ro
LmlzUGVyY2VudCgpICYmIGxlbmd0aC5pc1plcm8oKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXR1cm4gY3JlYXRlQ1NTKGxlbmd0aCwgc3R5bGUpOwotICAgIH0KLQot
ICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb246IHsKLSAgICAgICAgYXV0
byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRpb24+
KG5vZGUpLmNoaWxkKCksIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjaGlsZE5vZGUpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0NhbGNOZWdhdGVOb2RlOjpj
cmVhdGUoY2hpbGROb2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLSAgICBjYXNlIENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbjogewotICAgICAgICBhdXRvIGNoaWxkTm9kZSA9
IGNyZWF0ZUNTUygqZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG5vZGUpLmNoaWxk
KCksIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjaGlsZE5vZGUpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUoY2hpbGRO
b2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9k
ZVR5cGU6Ok9wZXJhdGlvbjogewotICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNh
c3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG5vZGUpOwotICAgICAgICBhdXRvJiBvcGVyYXRp
b25DaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAgICAgICAgQ2FsY09wZXJh
dG9yIG9wID0gb3BlcmF0aW9uTm9kZS5nZXRPcGVyYXRvcigpOwotICAgICAgICAKLSAgICAgICAg
c3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7Ci0gICAgICAg
ICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7
Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQotICAg
ICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNoaWxkcmVuWzBdKTsKLSAgICAgICAgICAgIHJl
dHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUoY2hpbGRyZW4pKTsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHsKLSAgICAg
ICAgICAgIEFTU0VSVChvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0KLSAgICAgICAg
ICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gdmFsdWVzOwotICAgICAgICAg
ICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBmaXJzdENoaWxkID0gY3JlYXRlQ1NT
KCpvcGVyYXRpb25DaGlsZHJlblswXSwgc3R5bGUpOwotICAgICAgICAgICAgYXV0byBzZWNvbmRD
aGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMV0sIHN0eWxlKTsKLQotICAgICAg
ICAgICAgaWYgKCFzZWNvbmRDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGls
ZDsKLQotICAgICAgICAgICAgYXV0byBuZWdhdGVOb2RlID0gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNy
ZWF0ZShzZWNvbmRDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIGlmICghZmly
c3RDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmVnYXRlTm9kZTsKLQotICAgICAgICAg
ICAgdmFsdWVzLmFwcGVuZChmaXJzdENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAg
ICAgdmFsdWVzLmFwcGVuZChXVEZNb3ZlKG5lZ2F0ZU5vZGUpKTsKLQotICAgICAgICAgICAgcmV0
dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZSh2YWx1ZXMpKTsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHsKLSAgICAgICAg
ICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxlKTsK
LSAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNy
ZWF0ZVByb2R1Y3QoV1RGTW92ZShjaGlsZHJlbikpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYXRpb25DaGls
ZHJlbi5zaXplKCkgPT0gMik7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4gdmFsdWVzOwotICAgICAgICAgICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgYXV0byBmaXJzdENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblswXSwgc3R5
bGUpOwotICAgICAgICAgICAgaWYgKCFmaXJzdENoaWxkKQotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgICAgICBhdXRvIHNlY29uZENoaWxkID0gY3JlYXRlQ1NTKCpv
cGVyYXRpb25DaGlsZHJlblsxXSwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKCFzZWNvbmRDaGls
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gaW52
ZXJ0Tm9kZSA9IENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUoc2Vjb25kQ2hpbGQucmVsZWFzZU5v
bk51bGwoKSk7Ci0KLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoZmlyc3RDaGlsZC5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoV1RGTW92ZShpbnZlcnROb2Rl
KSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJv
ZHVjdChjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxlKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6
Ok1heDoKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7Ci0gICAgICAgICAgICBh
dXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7Ci0gICAg
ICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVN
aW5Pck1heE9yQ2xhbXAob3AsIFdURk1vdmUoY2hpbGRyZW4pLCBvcGVyYXRpb25Ob2RlLmRlc3Rp
bmF0aW9uQ2F0ZWdvcnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExl
bmd0aDogewotICAgICAgICAvLyBGSVhNRTogKGh0dHA6Ly93ZWJraXQub3JnL2IvMTIyMDM2KSBD
cmVhdGUgYSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgZXF1aXZhbGVudCBvZiBDYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoLgotICAgICAgICBhdXRvJiBibGVuZCA9IGRvd25jYXN0PENhbGNFeHByZXNz
aW9uQmxlbmRMZW5ndGg+KG5vZGUpOwotICAgICAgICBmbG9hdCBwcm9ncmVzcyA9IGJsZW5kLnBy
b2dyZXNzKCk7Ci0gICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENh
bGNPcGVyYXRvcjo6QWRkLCBjcmVhdGVCbGVuZEhhbGYoYmxlbmQuZnJvbSgpLCBzdHlsZSwgMSAt
IHByb2dyZXNzKSwgY3JlYXRlQmxlbmRIYWxmKGJsZW5kLnRvKCksIHN0eWxlLCBwcm9ncmVzcykp
OwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OlVuZGVmaW5lZDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0
IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgc3dpdGNo
IChsZW5ndGgudHlwZSgpKSB7Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpQZXJjZW50OgotICAgIGNh
c2UgTGVuZ3RoVHlwZTo6Rml4ZWQ6Ci0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsZW5ndGgsIHN0eWxlKSk7
Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpDYWxjdWxhdGVkOgotICAgICAgICByZXR1cm4gY3JlYXRl
Q1NTKGxlbmd0aC5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpLCBzdHlsZSk7Ci0gICAg
Y2FzZSBMZW5ndGhUeXBlOjpBdXRvOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6SW50cmluc2ljOgot
ICAgIGNhc2UgTGVuZ3RoVHlwZTo6TWluSW50cmluc2ljOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6
TWluQ29udGVudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6Ok1heENvbnRlbnQ6Ci0gICAgY2FzZSBM
ZW5ndGhUeXBlOjpGaWxsQXZhaWxhYmxlOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6Rml0Q29udGVu
dDoKLSAgICBjYXNlIExlbmd0aFR5cGU6OlJlbGF0aXZlOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6
VW5kZWZpbmVkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLVN0cmluZyBDU1NDYWxjVmFsdWU6OmN1c3RvbUNTU1RleHQoKSBj
b25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6YnVpbGRDU1NUZXh0KG1fZXhwcmVzc2lvbi5nZXQoKSwgYnVpbGRlcik7Ci0gICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotYm9vbCBDU1NDYWxjVmFsdWU6OmVxdWFscyhj
b25zdCBDU1NDYWxjVmFsdWUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBjb21wYXJlQ1NT
VmFsdWUobV9leHByZXNzaW9uLCBvdGhlci5tX2V4cHJlc3Npb24pOwotfQotCi1pbmxpbmUgZG91
YmxlIENTU0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSB2YWx1ZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAw
ID8gMCA6IHZhbHVlOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpkb3VibGVWYWx1ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJlc3Npb24tPmRv
dWJsZVZhbHVlKHByaW1pdGl2ZVR5cGUoKSkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpj
b21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJl
c3Npb24tPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSkpOwotfQotCi1ib29sIENTU0Nh
bGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCBmdW5jdGlvbklkKQotewotICAgIHN3
aXRjaCAoZnVuY3Rpb25JZCkgewotICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgotICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRDYWxjOgotICAgIGNhc2UgQ1NTVmFsdWVNaW46Ci0gICAgY2FzZSBDU1NWYWx1
ZU1heDoKLSAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIENTU0NhbGNWYWx1ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsK
LSAgICB0cyA8PCBpbmRlbnQgPDwgIigiIDw8ICJDU1NDYWxjVmFsdWUiOwotCi0gICAgVGV4dFN0
cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0gICAgbXVsdGlsaW5lU3RyZWFtLnNldEluZGVudCh0cy5p
bmRlbnQoKSArIDIpOwotCi0gICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgic2hvdWxk
IGNsYW1wIG5vbi1uZWdhdGl2ZSIsIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKTsKLSAgICBt
dWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJleHByZXNzaW9uIiwgbV9leHByZXNzaW9uLmdl
dCgpKTsKLQotICAgIHRzIDw8IG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Ci0gICAgdHMgPDwg
IilcbiI7Ci19Ci0KLVJlZlB0cjxDU1NDYWxjVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKENT
U1ZhbHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHJhbmdlKQot
ewotICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlciBwYXJzZXIoZGVzdGluYXRpb25DYXRl
Z29yeSk7Ci0gICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VyLnBhcnNlQ2FsYyh0b2tlbnMsIGZ1
bmN0aW9uKTsKLSAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1ZShleHByZXNzaW9uLnJl
bGVhc2VOb25OdWxsKCksIHJhbmdlICE9IFZhbHVlUmFuZ2U6OkFsbCkpOwotICAgIExPR19XSVRI
X1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3JlYXRlICIgPDwgKnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLVJlZlB0cjxDU1NDYWxjVmFsdWU+IENT
U0NhbGNWYWx1ZTo6Y3JlYXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgYXV0byBleHByZXNzaW9uID0gY3JlYXRlQ1NTKHZh
bHVlLmV4cHJlc3Npb24oKSwgc3R5bGUpOwotICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNpbXBsaWZpZWRFeHByZXNzaW9uID0gQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSk7Ci0K
LSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoV1RGTW92ZShzaW1w
bGlmaWVkRXhwcmVzc2lvbiksIHZhbHVlLnNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSgpKSk7Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUg
ZnJvbSBDYWxjdWxhdGlvblZhbHVlOiAiIDw8ICpyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgY2F0ZWdvcnkpCi17Ci0gICAgc3dpdGNoIChjYXRlZ29yeSkgewotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOiB0cyA8PCAibnVtYmVyIjsgYnJlYWs7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6IHRzIDw8ICJsZW5ndGgiOyBicmVhazsK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHRzIDw8ICJwZXJjZW50Ijsg
YnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOiB0cyA8
PCAicGVyY2VudC1udW1iZXIiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnRMZW5ndGg6IHRzIDw8ICJwZXJjZW50LWxlbmd0aCI7IGJyZWFrOwotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6IHRzIDw8ICJhbmdsZSI7IGJyZWFrOwotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTogdHMgPDwgInRpbWUiOyBicmVhazsKLSAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTogdHMgPDwgImZyZXF1ZW5jeSI7IGJy
ZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6IHRzIDw8ICJvdGhlciI7
IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICB2
YWx1ZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAkocmV2aXNp
b24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
LSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3Mg
VGV4dFN0cmVhbTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NQYXJzZXJU
b2tlblJhbmdlOwotY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKLWNsYXNzIFJlbmRl
clN0eWxlOwotCi1jbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHsKLXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAg
ICAgICBDc3NDYWxjUHJpbWl0aXZlVmFsdWUgPSAxLAotICAgICAgICBDc3NDYWxjT3BlcmF0aW9u
LAotICAgICAgICBDc3NDYWxjTmVnYXRlLAotICAgICAgICBDc3NDYWxjSW52ZXJ0LAotICAgIH07
Ci0KLSAgICB2aXJ0dWFsIH5DU1NDYWxjRXhwcmVzc2lvbk5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAg
dmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVl
X3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZG91
YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBjb21w
dXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnkgPT0gb3RoZXIubV9jYXRlZ29yeTsgfQotICAg
IHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ1NTVW5pdFR5cGUg
cHJpbWl0aXZlVHlwZSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGly
ZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKLQotICAgIENh
bGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5OyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0
ZWdvcnkpCi0gICAgICAgIDogbV9jYXRlZ29yeShjYXRlZ29yeSkKLSAgICB7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9jYXRlZ29yeTsKLX07Ci0KLWNsYXNz
IENTU0NhbGNWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25z
dCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5LCBWYWx1ZVJhbmdlKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBj
cmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KLSAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNz
aW9uLT5jYXRlZ29yeSgpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3Q7Ci0gICAg
ZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikg
Y29uc3Q7Ci0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbi0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAgICBSZWY8Q2FsY3VsYXRpb25WYWx1
ZT4gY3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UpOwot
Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JikgY29uc3Q7Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OwotCi0g
ICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKLSAgICBib29sIGVxdWFscyhjb25zdCBD
U1NDYWxjVmFsdWUmKSBjb25zdDsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0NhbGNGdW5jdGlv
bihDU1NWYWx1ZUlEKTsKLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgQ1NTQ2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGJv
b2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKTsKLQotICAgIGRvdWJsZSBjbGFtcFRvUGVybWl0
dGVkUmFuZ2UoZG91YmxlKSBjb25zdDsKLQotICAgIGNvbnN0IFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IG1fZXhwcmVzc2lvbjsKLSAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZl
OwotfTsKLQotaW5saW5lIENTU0NhbGNWYWx1ZTo6Q1NTQ2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgZXhwcmVzc2lvbiwgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUp
Ci0gICAgOiBDU1NWYWx1ZShDYWxjdWxhdGlvbkNsYXNzKQotICAgICwgbV9leHByZXNzaW9uKFdU
Rk1vdmUoZXhwcmVzc2lvbikpCi0gICAgLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZShzaG91
bGRDbGFtcFRvTm9uTmVnYXRpdmUpCi17Ci19Ci0KLWlubGluZSBSZWY8Q2FsY3VsYXRpb25WYWx1
ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHJldHVybiBDYWxj
dWxhdGlvblZhbHVlOjpjcmVhdGUobV9leHByZXNzaW9uLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihj
b252ZXJzaW9uRGF0YSksCi0gICAgICAgIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID8gVmFs
dWVSYW5nZTo6Tm9uTmVnYXRpdmUgOiBWYWx1ZVJhbmdlOjpBbGwpOwotfQotCi1pbmxpbmUgdm9p
ZCBDU1NDYWxjVmFsdWU6OnNldFBlcm1pdHRlZFZhbHVlUmFuZ2UoVmFsdWVSYW5nZSByYW5nZSkK
LXsKLSAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA9IHJhbmdlICE9IFZhbHVlUmFuZ2U6
OkFsbDsKLX0KLQotaW5saW5lIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0
Ci17Ci0gICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVu
Y2llcyh2YWx1ZXMpOwotfQotCi1pbmxpbmUgdm9pZCBDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJl
Y3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2
YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENhbGN1bGF0aW9uQ2F0ZWdvcnkpOwotV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENTU0NhbGNWYWx1ZSYp
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NT
X1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKLQotI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVk
aWNhdGUpIFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5
cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVu
dFZhbHVlLmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVk
ZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ29sb3JCbGVuZGluZy5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKIAogI2lu
Y2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5o
IgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIK
ICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NNYXJrdXAuaCIKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNp
bmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdz
LmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NT
Q2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkNTU1By
aW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbmNsdWRlICJDU1NBc3BlY3RSYXRpb1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ3Jvc3Nm
YWRlVmFsdWUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNDYXRlZ29y
eU1hcHBpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNDYXRlZ29yeU1hcHBpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNT
U0NhbGNDYXRlZ29yeU1hcHBpbmcuaCIKKworI2luY2x1ZGUgIkNTU1VuaXRzLmgiCisjaW5jbHVk
ZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbGN1
bGF0aW9uQ2F0ZWdvcnkgY2FsY1VuaXRDYXRlZ29yeShDU1NVbml0VHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI7CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0VNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1BDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1JFTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NIUzoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19WTUFYOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOworICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0dSQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46CisgICAgICAgIHJldHVybiBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTVM6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpUaW1lOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19IWjoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfS0haOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6RnJlcXVlbmN5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjsKKyAgICB9Cit9CisKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY3VsYXRp
b25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgcmV0
dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUFg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19NTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1BUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Okxlbmd0aDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICAgICAg
cmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgorICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
SFo6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKKyAgICAgICAgcmV0dXJuIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1T
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0xIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUkxIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkg6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1ZNQVg6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOworICAgIH0KK30KKworQ1NTVW5pdFR5cGUgY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxj
dWxhdGlvbkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkpCit7CisgICAgc3dp
dGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOiBy
ZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGg6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1BYOworICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFH
RTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOiByZXR1cm4gQ1NTVW5pdFR5
cGU6OkNTU19ERUc7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOiByZXR1cm4g
Q1NTVW5pdFR5cGU6OkNTU19NUzsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1
ZW5jeTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfSFo7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1i
ZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Cit9CisKK2Jvb2wgaGFzRG91YmxlVmFsdWUoQ1NT
VW5pdFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0VYUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfQ006CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19E
RUc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfR1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RJTUVOU0lPTjoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfVlc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19EUFBYOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUEk6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQQ006CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0ZSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19TVFJJTkc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0ZPTlRf
RkFNSUxZOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VUkk6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lERU5UOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19BVFRSOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19DT1VOVEVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19S
RUNUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SR0JDT0xPUjoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUEFJUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVU5JQ09ERV9SQU5H
RToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ09VTlRFUl9OQU1FOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19TSEFQRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVBRDoKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfQ0FMQzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJ
VEhfTlVNQkVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lU
SF9MRU5HVEg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BST1BFUlRZX0lEOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0NhdGVnb3J5TWFw
cGluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGND
YXRlZ29yeU1hcHBpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBD
U1NVbml0VHlwZSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1
aW50OF90OworCitDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGNVbml0Q2F0ZWdvcnkoQ1NTVW5pdFR5
cGUpOworQ2FsY3VsYXRpb25DYXRlZ29yeSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRp
b24oQ1NTVW5pdFR5cGUpOworQ1NTVW5pdFR5cGUgY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxh
dGlvbkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnkpOworYm9vbCBoYXNEb3VibGVWYWx1ZShD
U1NVbml0VHlwZSk7CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNF
eHByZXNzaW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7Cisg
ICAgbm9kZS5kdW1wKHRzKTsKKyAgICByZXR1cm4gdHM7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CitTdHJpbmcgcHJldHR5UHJpbnROb2RlKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9k
ZSkKK3sKKyAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKKyAgICBtdWx0aWxpbmVTdHJl
YW0gPDwgbm9kZTsKKyAgICByZXR1cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKK30KKwor
U3RyaW5nIHByZXR0eVByaW50Tm9kZXMoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiYgbm9kZXMpCit7CisgICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07CisgICAg
bXVsdGlsaW5lU3RyZWFtIDw8IG5vZGVzOworICAgIHJldHVybiBtdWx0aWxpbmVTdHJlYW0ucmVs
ZWFzZSgpOworfQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNFeHByZXNzaW9uTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q2FsY3VsYXRpb25DYXRlZ29yeS5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKKwor
ZW51bSBDU1NQcm9wZXJ0eUlEIDogdWludDE2X3Q7CisKK2VudW0gY2xhc3MgQ1NTVW5pdFR5cGUg
OiB1aW50OF90OworCitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgUmVmQ291
bnRlZDxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgewor
ICAgICAgICBDc3NDYWxjUHJpbWl0aXZlVmFsdWUgPSAxLAorICAgICAgICBDc3NDYWxjT3BlcmF0
aW9uLAorICAgICAgICBDc3NDYWxjTmVnYXRlLAorICAgICAgICBDc3NDYWxjSW52ZXJ0LAorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5DU1NDYWxjRXhwcmVzc2lvbk5vZGUoKSA9IGRlZmF1bHQ7Cisg
ICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUg
ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBj
b21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnkgPT0gb3RoZXIubV9jYXRlZ29yeTsgfQor
ICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1NTVW5pdFR5
cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Jikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKKworICAg
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkg
Y2F0ZWdvcnkpCisgICAgICAgIDogbV9jYXRlZ29yeShjYXRlZ29yeSkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9jYXRlZ29yeTsKK307CisKK1Rl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IENTU0NhbGNFeHByZXNzaW9u
Tm9kZSYpOworCisjaWYgIUxPR19ESVNBQkxFRAorU3RyaW5nIHByZXR0eVByaW50Tm9kZShjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKTsKK1N0cmluZyBwcmV0dHlQcmludE5vZGVzKGNvbnN0
IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mKTsKKyNlbmRpZgorCit9CisKKyNk
ZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKFRvVmFs
dWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUucHJlZGlj
YXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlci5oIgorCisjaW5jbHVkZSAiQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIgorI2lu
Y2x1ZGUgIkNTU0NhbGNJbnZlcnROb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUu
aCIKKyNpbmNsdWRlICJDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NQYXJzZXJUb2tlbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWF4RXhwcmVzc2lvbkRlcHRoID0gMTAwOworCisvLyA8aHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jY2FsYy1zeW50YXg+OgorLy8gPGNhbGMoKT4gID0gY2Fs
YyggPGNhbGMtc3VtPiApCisvLyA8bWluKCk+ICAgPSBtaW4oIDxjYWxjLXN1bT4jICkKKy8vIDxt
YXgoKT4gICA9IG1heCggPGNhbGMtc3VtPiMgKQorLy8gPGNsYW1wKCk+ID0gY2xhbXAoIDxjYWxj
LXN1bT4jezN9ICkKKy8vIDxzaW4oKT4gICA9IHNpbiggPGNhbGMtc3VtPiApCisvLyA8Y29zKCk+
ICAgPSBjb3MoIDxjYWxjLXN1bT4gKQorLy8gPHRhbigpPiAgID0gdGFuKCA8Y2FsYy1zdW0+ICkK
Ky8vIDxhc2luKCk+ICA9IGFzaW4oIDxjYWxjLXN1bT4gKQorLy8gPGFjb3MoKT4gID0gYWNvcygg
PGNhbGMtc3VtPiApCisvLyA8YXRhbigpPiAgPSBhdGFuKCA8Y2FsYy1zdW0+ICkKKy8vIDxhdGFu
MigpPiA9IGF0YW4yKCA8Y2FsYy1zdW0+LCA8Y2FsYy1zdW0+ICkKKy8vIDxwb3coKT4gICA9IHBv
dyggPGNhbGMtc3VtPiwgPGNhbGMtc3VtPiApCisvLyA8c3FydCgpPiAgPSBzcXJ0KCA8Y2FsYy1z
dW0+ICkKKy8vIDxoeXBvdCgpPiA9IGh5cG90KCA8Y2FsYy1zdW0+IyApCisvLyA8Y2FsYy1zdW0+
ID0gPGNhbGMtcHJvZHVjdD4gWyBbICcrJyB8ICctJyBdIDxjYWxjLXByb2R1Y3Q+IF0qCisvLyA8
Y2FsYy1wcm9kdWN0PiA9IDxjYWxjLXZhbHVlPiBbIFsgJyonIHwgJy8nIF0gPGNhbGMtdmFsdWU+
IF0qCisvLyA8Y2FsYy12YWx1ZT4gPSA8bnVtYmVyPiB8IDxkaW1lbnNpb24+IHwgPHBlcmNlbnRh
Z2U+IHwgKCA8Y2FsYy1zdW0+ICkKK1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFuZ2UgdG9r
ZW5zLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKQoreworICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFj
ZSgpOworCisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmVzdWx0OworICAgIGJv
b2wgb2sgPSBwYXJzZUNhbGNGdW5jdGlvbih0b2tlbnMsIGZ1bmN0aW9uLCAwLCByZXN1bHQpOwor
ICAgIGlmICghb2sgfHwgIXRva2Vucy5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIExPR19X
SVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VDYWxjICIgPDwgcHJldHR5UHJpbnROb2RlKCpyZXN1bHQpKTsKKworICAgIHJlc3VsdCA9
IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7
CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjRXhwcmVzc2lv
bk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAtIGFmdGVyIHNpbXBsaWZpY2F0aW9uICIgPDwgcHJldHR5
UHJpbnROb2RlKCpyZXN1bHQpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpvcGVyYXRvclZhbHVlKGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbikKK3sKKyAgICBpZiAodG9rZW4udHlwZSgpID09IERlbGltaXRlclRva2VuKQor
ICAgICAgICByZXR1cm4gdG9rZW4uZGVsaW1pdGVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Vu
dW0gUGFyc2VTdGF0ZSB7CisgICAgT0ssCisgICAgVG9vRGVlcCwKKyAgICBOb01vcmVUb2tlbnMK
K307CisKK3N0YXRpYyBQYXJzZVN0YXRlIGNoZWNrRGVwdGhBbmRJbmRleChpbnQgZGVwdGgsIENT
U1BhcnNlclRva2VuUmFuZ2UgdG9rZW5zKQoreworICAgIGlmICh0b2tlbnMuYXRFbmQoKSkKKyAg
ICAgICAgcmV0dXJuIE5vTW9yZVRva2VuczsKKyAgICBpZiAoZGVwdGggPiBtYXhFeHByZXNzaW9u
RGVwdGgpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRGVwdGgg
IiA8PCBkZXB0aCA8PCAiIGV4Y2VlZGVkIG1heEV4cHJlc3Npb25EZXB0aCAiIDw8IG1heEV4cHJl
c3Npb25EZXB0aCk7CisgICAgICAgIHJldHVybiBUb29EZWVwOworICAgIH0KKyAgICByZXR1cm4g
T0s7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNGdW5j
dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb25JRCwg
aW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAg
IGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vICJhcmd1bWVudHMiIHJlZmVycyB0byB0aGluZ3MgYmV0d2Vl
biBjb21tYXMuCisgICAgdW5zaWduZWQgbWluQXJndW1lbnRDb3VudCA9IDE7CisgICAgT3B0aW9u
YWw8dW5zaWduZWQ+IG1heEFyZ3VtZW50Q291bnQ7CisKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSUQp
IHsKKyAgICBjYXNlIENTU1ZhbHVlTWluOgorICAgIGNhc2UgQ1NTVmFsdWVNYXg6CisgICAgICAg
IG1heEFyZ3VtZW50Q291bnQgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTVmFsdWVDbGFtcDoKKyAgICAgICAgbWluQXJndW1lbnRDb3VudCA9IDM7CisgICAgICAg
IG1heEFyZ3VtZW50Q291bnQgPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVl
Q2FsYzoKKyAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
IC8vIFRPRE86IGNsYW1wLCBzaW4sIGNvcywgdGFuLCBhc2luLCBhY29zLCBhdGFuLCBhdGFuMiwg
cG93LCBzcXJ0LCBoeXBvdC4KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworCisgICAgYm9v
bCByZXF1aXJlQ29tbWEgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50ID0gMDsK
KyAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7CisgICAgICAgIHRva2Vucy5jb25zdW1lV2hp
dGVzcGFjZSgpOworICAgICAgICBpZiAocmVxdWlyZUNvbW1hKSB7CisgICAgICAgICAgICBpZiAo
dG9rZW5zLmNvbnN1bWUoKS50eXBlKCkgIT0gQ29tbWFUb2tlbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5vZGU7Cisg
ICAgICAgIGlmICghcGFyc2VDYWxjU3VtKHRva2VucywgZGVwdGgsIG5vZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICsrYXJndW1lbnRDb3VudDsKKyAgICAgICAgaWYg
KG1heEFyZ3VtZW50Q291bnQgJiYgYXJndW1lbnRDb3VudCA+IG1heEFyZ3VtZW50Q291bnQudmFs
dWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBub2Rlcy5hcHBlbmQo
bm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgcmVxdWlyZUNvbW1hID0gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCBtaW5Bcmd1bWVudENvdW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSUQpIHsKKyAgICBjYXNl
IENTU1ZhbHVlTWluOgorICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3Jl
YXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6TWluLCBXVEZNb3ZlKG5vZGVzKSwgbV9k
ZXN0aW5hdGlvbkNhdGVnb3J5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZU1h
eDoKKyAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4
T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1heCwgV1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25D
YXRlZ29yeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKKyAgICAg
ICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChD
YWxjT3BlcmF0b3I6OkNsYW1wLCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENhbGM6CisgICAgY2Fz
ZSBDU1NWYWx1ZUNhbGM6CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVTdW0oV1RGTW92ZShub2RlcykpOworICAgICAgICBicmVhazsKKyAgICAvLyBUT0RPOiBj
bGFtcCwgc2luLCBjb3MsIHRhbiwgYXNpbiwgYWNvcywgYXRhbiwgYXRhbjIsIHBvdywgc3FydCwg
aHlwb3QKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
ISFyZXN1bHQ7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogQWRkIGNvZGUgaGVyZSB0byBwYXJzZSBD
U1NWYWxpZElEIGZvciBuYW1lZCBjb25zdGFudHMuCisKKyAgICBDU1NQYXJzZXJUb2tlbiB0b2tl
biA9IHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgIGlmICghKHRva2Vu
LnR5cGUoKSA9PSBOdW1iZXJUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gUGVyY2VudGFnZVRva2Vu
IHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBhdXRvIHR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgIGlmIChjYWxj
VW5pdENhdGVnb3J5KHR5cGUpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmVzdWx0ID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodG9rZW4ubnVtZXJpY1ZhbHVl
KCksIHR5cGUpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1ZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHRv
a2VucywgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQor
eworICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZmluZEZ1bmN0aW9uSWQgPSBbJl0oQ1NTVmFs
dWVJRCYgZnVuY3Rpb25JZCkgeworICAgICAgICBpZiAodG9rZW5zLnBlZWsoKS50eXBlKCkgPT0g
TGVmdFBhcmVudGhlc2lzVG9rZW4pIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uSWQgPSBDU1NWYWx1
ZUNhbGM7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uSWQgPSB0b2tlbnMucGVlaygpLmZ1bmN0aW9uSWQoKTsKKyAgICAgICAgcmV0dXJuIENT
U0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oZnVuY3Rpb25JZCk7CisgICAgfTsKKworICAgIENT
U1ZhbHVlSUQgZnVuY3Rpb25JZDsKKyAgICBpZiAoZmluZEZ1bmN0aW9uSWQoZnVuY3Rpb25JZCkp
IHsKKyAgICAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBpbm5lclJhbmdlID0gdG9rZW5zLmNvbnN1
bWVCbG9jaygpOworICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAg
aW5uZXJSYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICByZXR1cm4gcGFyc2VDYWxj
RnVuY3Rpb24oaW5uZXJSYW5nZSwgZnVuY3Rpb25JZCwgZGVwdGggKyAxLCByZXN1bHQpOworICAg
IH0KKworICAgIHJldHVybiBwYXJzZVZhbHVlKHRva2VucywgcmVzdWx0KTsKK30KKworYm9vbCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1Byb2R1Y3QoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiByZXN1bHQpCit7CisgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAh
PSBPSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gZmlyc3RWYWx1ZTsKKyAgICBpZiAoIXBhcnNlQ2FsY1ZhbHVlKHRva2VucywgZGVw
dGgsIGZpcnN0VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworCisgICAgd2hpbGUgKCF0b2tlbnMuYXRF
bmQoKSkgeworICAgICAgICBjaGFyIG9wZXJhdG9yQ2hhcmFjdGVyID0gb3BlcmF0b3JWYWx1ZSh0
b2tlbnMucGVlaygpKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19j
YXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpICYmIG9wZXJhdG9yQ2hhcmFjdGVyICE9
IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6RGl2aWRlKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAg
ICAgCisgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5leHRWYWx1ZTsKKyAg
ICAgICAgaWYgKCFwYXJzZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRoLCBuZXh0VmFsdWUpIHx8ICFu
ZXh0VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG9wZXJh
dG9yQ2hhcmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6RGl2aWRlKSkK
KyAgICAgICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUobmV4dFZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgICAgIGlmIChmaXJzdFZhbHVlKQorICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAg
ICAgbm9kZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAg
ICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZmlyc3RW
YWx1ZSk7CisgICAgICAgIHJldHVybiAhIXJlc3VsdDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3ZlKG5vZGVzKSk7CisgICAg
cmV0dXJuICEhcmVzdWx0OworfQorCitib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VDYWxjU3VtKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAgIGlmIChjaGVja0RlcHRo
QW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFsdWU7CisgICAgaWYgKCFw
YXJzZUNhbGNQcm9kdWN0KHRva2VucywgZGVwdGgsIGZpcnN0VmFsdWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVz
OworCisgICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgeworICAgICAgICBjaGFyIG9wZXJhdG9y
Q2hhcmFjdGVyID0gb3BlcmF0b3JWYWx1ZSh0b2tlbnMucGVlaygpKTsKKyAgICAgICAgaWYgKG9w
ZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6QWRkKSAm
JiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1
YnRyYWN0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICgoJnRva2Vucy5wZWVr
KCkgLSAxKS0+dHlwZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gY2FsYygxcHgrIDJweCkgaXMgaW52YWxpZAorCisgICAgICAgIHRva2Vucy5jb25z
dW1lKCk7CisgICAgICAgIGlmICh0b2tlbnMucGVlaygpLnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9r
ZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4ICsycHgpIGlzIGludmFs
aWQKKworICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKworICAg
ICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBuZXh0VmFsdWU7CisgICAgICAgIGlm
ICghcGFyc2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBuZXh0VmFsdWUpIHx8ICFuZXh0VmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG9wZXJhdG9yQ2hh
cmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6U3VidHJhY3QpKQorICAg
ICAgICAgICAgbmV4dFZhbHVlID0gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0ZShuZXh0VmFsdWUu
cmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAgICAgaWYgKGZpcnN0VmFsdWUpCisgICAgICAgICAg
ICBub2Rlcy5hcHBlbmQoZmlyc3RWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICBu
b2Rlcy5hcHBlbmQobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIGlm
IChub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShmaXJzdFZhbHVl
KTsKKyAgICAgICAgcmV0dXJuICEhcmVzdWx0OworICAgIH0KKworICAgIHJlc3VsdCA9IENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShub2RlcykpOworICAgIHJldHVybiAh
IXJlc3VsdDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhbGNPcGVyYXRvci5oIgorI2lu
Y2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGU7CitjbGFzcyBDU1NQYXJzZXJUb2tlbjsKK2NsYXNz
IENTU1BhcnNlclRva2VuUmFuZ2U7CisKK2NsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNl
ciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyKENh
bGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKKyAgICAgICAgOiBtX2Rlc3Rp
bmF0aW9uQ2F0ZWdvcnkoZGVzdGluYXRpb25DYXRlZ29yeSkKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFu
Z2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24pOworICAgIAorcHJpdmF0ZToKKyAgICBjaGFyIG9wZXJh
dG9yVmFsdWUoY29uc3QgQ1NTUGFyc2VyVG9rZW4mKTsKKworICAgIGJvb2wgcGFyc2VWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKyAg
ICBib29sIHBhcnNlVmFsdWVUZXJtKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZUNhbGNGdW5jdGlv
bihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCwgaW50IGRlcHRoLCBSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxjU3VtKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Cisg
ICAgYm9vbCBwYXJzZUNhbGNQcm9kdWN0KENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgs
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZUNhbGNWYWx1
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYpOworCisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2Rlc3RpbmF0aW9uQ2F0ZWdv
cnk7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0lu
dmVydE5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNJbnZlcnROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNJbnZlcnROb2Rl
LmgiCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlQ2FsY0V4
cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEp
IGNvbnN0Cit7CisgICAgYXV0byBjaGlsZE5vZGUgPSBtX2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVz
c2lvbihjb252ZXJzaW9uRGF0YSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Np
b25JbnZlcnNpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Cit9CisKK2RvdWJsZSBDU1NDYWxjSW52
ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Cit7CisgICAg
YXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOworICAgIGlm
ICghY2hpbGRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKTsKKyAgICByZXR1cm4gMS4wIC8gY2hpbGRWYWx1ZTsKK30KKworZG91Ymxl
IENTU0NhbGNJbnZlcnROb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgYXV0byBjaGlsZFZhbHVl
ID0gbV9jaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKKyAgICBpZiAoIWNo
aWxkVmFsdWUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCk7CisgICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7Cit9CisKK3ZvaWQgQ1NTQ2Fs
Y0ludmVydE5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgIjEv
IiA8PCBtX2NoaWxkLmdldCgpOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNJbnZlcnROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0NhbGNJbnZl
cnROb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxDU1NDYWxjSW52ZXJ0Tm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiYgY2hpbGQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
U1NDYWxjSW52ZXJ0Tm9kZShXVEZNb3ZlKGNoaWxkKSkpOworICAgIH0KKworICAgIGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgp
OyB9CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hpbGQu
Z2V0KCk7IH0KKworICAgIHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4m
JiBjaGlsZCkgeyBtX2NoaWxkID0gV1RGTW92ZShjaGlsZCk7IH0KKworcHJpdmF0ZToKKyAgICBD
U1NDYWxjSW52ZXJ0Tm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQorICAg
ICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKKyAgICAgICAg
LCBtX2NoaWxkKFdURk1vdmUoY2hpbGQpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzWmVybygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9CisgICAgZG91YmxlIGRv
dWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgY29tcHV0ZUxl
bmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDc3NDYWxjSW52ZXJ0OyB9
CisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y2hpbGQtPnByaW1pdGl2ZVR5cGUoKTsgfQorCisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBj
b25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKHByb3BlcnRpZXMpOyB9CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3Qg
ZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNp
ZXMocHJvcGVydGllcyk7IH0KKworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmlu
YWw7CisKKyAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOworfTsKKworfQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY0lu
dmVydE5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6
OkNzc0NhbGNJbnZlcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVn
YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2Fs
Y05lZ2F0ZU5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxj
L0NTU0NhbGNOZWdhdGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNOZWdhdGVO
b2RlLmgiCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGVDYWxj
RXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSkgY29uc3QKK3sKKyAgICBhdXRvIGNoaWxkTm9kZSA9IG1fY2hpbGQtPmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVz
c2lvbk5lZ2F0aW9uPihXVEZNb3ZlKGNoaWxkTm9kZSkpOworfQorCit2b2lkIENTU0NhbGNOZWdh
dGVOb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICItIiA8PCBt
X2NoaWxkLmdldCgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1ND
YWxjTmVnYXRlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNOZWdhdGVOb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxjTmVnYXRlTm9kZSBm
aW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8Q1NTQ2FsY05lZ2F0ZU5vZGU+IGNyZWF0ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY05l
Z2F0ZU5vZGUoV1RGTW92ZShjaGlsZCkpKTsKKyAgICB9CisKKyAgICBjb25zdCBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUmIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAg
IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9
CisKKyAgICB2b2lkIHNldENoaWxkKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQp
IHsgbV9jaGlsZCA9IFdURk1vdmUoY2hpbGQpOyB9CisKK3ByaXZhdGU6CisgICAgQ1NTQ2FsY05l
Z2F0ZU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKKyAgICAgICAgOiBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUoY2hpbGQtPmNhdGVnb3J5KCkpCisgICAgICAgICwgbV9jaGls
ZChXVEZNb3ZlKGNoaWxkKSkKKyAgICB7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc1plcm8oKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2NoaWxkLT5pc1plcm8oKTsgfQorICAgIGRvdWJsZSBkb3VibGVWYWx1
ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QgZmluYWwgeyByZXR1cm4gLW1fY2hpbGQtPmRv
dWJsZVZhbHVlKHVuaXRUeXBlKTsgfQorICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIC1tX2NoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpOyB9CisgICAg
VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6Q3NzQ2FsY05lZ2F0ZTsgfQor
ICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2No
aWxkLT5wcmltaXRpdmVUeXBlKCk7IH0KKworICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29u
c3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2ll
cyhwcm9wZXJ0aWVzKTsgfQorICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZp
bmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVz
KHByb3BlcnRpZXMpOyB9CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFs
OworCisgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGlsZDsKK307CisKK30KKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNOZWdh
dGVOb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpD
c3NDYWxjTmVnYXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJh
dGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNPcGVyYXRpb25Ob2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Y2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0Nh
bGNPcGVyYXRpb25Ob2RlLmgiCisKKyNpbmNsdWRlICJDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgi
CisjaW5jbHVkZSAiQ1NTQ2FsY0ludmVydE5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjTmVnYXRl
Tm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCIKKyNpbmNsdWRl
ICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IFRoaXMgaXMgdGhlIHJlc3VsdCBvZiB0aGUgIlRvIGFkZCB0d28gdHlwZXMgdHlwZTEgYW5kIHR5
cGUyLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6IiBydWxlcy4KKworc3RhdGljIGNvbnN0
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV1bc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV0gPSB7CisvLyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXIgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGggICAgICAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50ICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TnVtYmVyICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoCisgICAgeyBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
ciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9LCAv
LyAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcgorICAgIHsgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCAgICAg
ICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCB9LCAv
LyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgKKyAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudAorICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJl
ciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TnVtYmVyCisgICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwg
ICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnRMZW5ndGgKK307CisKK3N0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRl
dGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIGNv
bnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCit7
CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBsZWZ0U2lkZS5jYXRlZ29y
eSgpOworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgcmlnaHRDYXRlZ29yeSA9IHJpZ2h0U2lkZS5j
YXRlZ29yeSgpOworICAgIEFTU0VSVChsZWZ0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7CisgICAgQVNTRVJUKHJpZ2h0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFk
ZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAgICAgIGlmIChsZWZ0Q2F0
ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiByaWdodENhdGVnb3J5IDwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCisgICAgICAgICAgICByZXR1cm4gYWRkU3VidHJhY3RS
ZXN1bHRbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlZnRDYXRlZ29yeSldW3N0YXRpY19jYXN0PHVu
c2lnbmVkPihyaWdodENhdGVnb3J5KV07CisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0gcmln
aHRDYXRlZ29yeSkKKyAgICAgICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7CisgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6
TXVsdGlwbHk6CisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyICYmIHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
KQorICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgICAg
ICByZXR1cm4gbGVmdENhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciA/IHJp
Z2h0Q2F0ZWdvcnkgOiBsZWZ0Q2F0ZWdvcnk7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlk
ZToKKyAgICAgICAgaWYgKHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyIHx8IHJpZ2h0U2lkZS5pc1plcm8oKSkKKyAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeTsKKyAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TWluOgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
cjsKK30KKworLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IGNvcnJlY3QgY2F0ZWdvcnkgY29t
cHV0YXRpb24gcGVyOgorLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3VkaW5pLm9yZy9jc3MtdHlw
ZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLWludmVydC1hLXR5cGU+CisvLyBUbyBpbnZlcnQgYSB0
eXBlIHR5cGUsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKy8vIExldCByZXN1bHQgYmUg
YSBuZXcgdHlwZSB3aXRoIGFuIGluaXRpYWxseSBlbXB0eSBvcmRlcmVkIG1hcCBhbmQgYW4gaW5p
dGlhbGx5IG51bGwgcGVyY2VudCBoaW50CisvLyBGb3IgZWFjaCB1bml0IOKGkiBleHBvbmVudCBv
ZiB0eXBlLCBzZXQgcmVzdWx0W3VuaXRdIHRvICgtMSAqIGV4cG9uZW50KS4KK3N0YXRpYyBDYWxj
dWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5Rm9ySW52ZXJ0KENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0
ZWdvcnkpCit7CisgICAgcmV0dXJuIGNhdGVnb3J5OworfQorCitzdGF0aWMgQ2FsY3VsYXRpb25D
YXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+JiBub2RlcywgQ2FsY09wZXJhdG9yIG9wKQoreworICAgIGlmIChub2Rlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKworICAg
IGF1dG8gY3VycmVudENhdGVnb3J5ID0gbm9kZXNbMF0tPmNhdGVnb3J5KCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgbm9kZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
YXV0byYgbm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAKKyAgICAgICAgYXV0byB1c2Vk
T3BlcmF0b3IgPSBvcDsKKyAgICAgICAgaWYgKG5vZGUudHlwZSgpID09IENTU0NhbGNFeHByZXNz
aW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY0ludmVydCkKKyAgICAgICAgICAgIHVzZWRPcGVyYXRvciA9
IENhbGNPcGVyYXRvcjo6RGl2aWRlOworCisgICAgICAgIGF1dG8gbmV4dENhdGVnb3J5ID0gbm9k
ZS5jYXRlZ29yeSgpOworCisgICAgICAgIHN3aXRjaCAodXNlZE9wZXJhdG9yKSB7CisgICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0
cmFjdDoKKyAgICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3Nz
LXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1hZGQtdHdvLXR5cGVzPgorICAgICAgICAgICAg
Ly8gQXQgYSArIG9yIC0gc3ViLWV4cHJlc3Npb24sIGF0dGVtcHQgdG8gYWRkIHRoZSB0eXBlcyBv
ZiB0aGUgbGVmdCBhbmQgcmlnaHQgYXJndW1lbnRzLgorICAgICAgICAgICAgLy8gSWYgdGhpcyBy
ZXR1cm5zIGZhaWx1cmUsIHRoZSBlbnRpcmUgY2FsY3VsYXRpb27igJlzIHR5cGUgaXMgZmFpbHVy
ZS4gT3RoZXJ3aXNlLCB0aGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJldHVybmVk
IHR5cGUuCisgICAgICAgICAgICBpZiAoY3VycmVudENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGUgJiYgbmV4dENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUp
CisgICAgICAgICAgICAgICAgY3VycmVudENhdGVnb3J5ID0gYWRkU3VidHJhY3RSZXN1bHRbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGN1cnJlbnRDYXRlZ29yeSldW3N0YXRpY19jYXN0PHVuc2lnbmVk
PihuZXh0Q2F0ZWdvcnkpXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDYXRlZ29yeSAh
PSBuZXh0Q2F0ZWdvcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok11bHRpcGx5OgorICAgICAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3VkaW5p
Lm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLW11bHRpcGx5LXR3by10eXBlcz4K
KyAgICAgICAgICAgIC8vIEF0IGEgKiBzdWItZXhwcmVzc2lvbiwgbXVsdGlwbHkgdGhlIHR5cGVz
IG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVudHMuIFRoZSBzdWItZXhwcmVzc2lvbuKAmXMg
dHlwZSBpcyB0aGUgcmV0dXJuZWQgcmVzdWx0LgorICAgICAgICAgICAgaWYgKGN1cnJlbnRDYXRl
Z29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgbmV4dENhdGVnb3J5ICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7CisKKyAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9IGN1
cnJlbnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgPyBuZXh0Q2F0ZWdv
cnkgOiBjdXJyZW50Q2F0ZWdvcnk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7CisgICAgICAgICAgICBhdXRvIGludmVydENhdGVnb3J5
ID0gY2F0ZWdvcnlGb3JJbnZlcnQobmV4dENhdGVnb3J5KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gQXQgYSAvIHN1Yi1leHByZXNzaW9uLCBsZXQgbGVmdCB0eXBlIGJlIHRoZSByZXN1
bHQgb2YgZmluZGluZyB0aGUgdHlwZXMgb2YgaXRzIGxlZnQgYXJndW1lbnQsCisgICAgICAgICAg
ICAvLyBhbmQgcmlnaHQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRpbmcgdGhlIHR5cGVzIG9m
IGl0cyByaWdodCBhcmd1bWVudCBhbmQgdGhlbiBpbnZlcnRpbmcgaXQuCisgICAgICAgICAgICAv
LyBUaGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWlu
ZyB0aGUgbGVmdCB0eXBlIGFuZCByaWdodCB0eXBlLgorICAgICAgICAgICAgaWYgKGludmVydENh
dGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCBub2RlLmlzWmVybygpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1p
bjoKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDoKKyAgICAgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkNsYW1wOgorICAgICAgICAgICAgLy8gVGhlIHR5cGUgb2YgYSBtaW4oKSwgbWF4KCks
IG9yIGNsYW1wKCkgZXhwcmVzc2lvbiBpcyB0aGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgdHlwZXMg
b2YgaXRzIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbnMKKyAgICAgICAgICAgIHJldHVybiBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjdXJyZW50Q2F0ZWdvcnk7Cit9CisKK3N0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IHJlc29s
dmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcChDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7CisgICAgc3dpdGNoIChj
YXRlZ29yeSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKKyAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpGcmVxdWVuY3k6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKKyAgICAg
ICAgcmV0dXJuIGNhdGVnb3J5OworCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50OgorICAgICAgICBpZiAoZGVzdGluYXRpb25DYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aDsKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXI7CisgICAgICAgIHJldHVybiBjYXRlZ29yeTsKKyAgICB9CisKKyAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cit9CisKK3N0YXRpYyBib29sIGlz
U2FtZVBhaXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBhLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGIsIENh
bGN1bGF0aW9uQ2F0ZWdvcnkgeCwgQ2FsY3VsYXRpb25DYXRlZ29yeSB5KQoreworICAgIHJldHVy
biAoYSA9PSB4ICYmIGIgPT0geSkgfHwgKGEgPT0geSAmJiBiID09IHgpOworfQorCitlbnVtIGNs
YXNzIFNvcnRpbmdDYXRlZ29yeSB7CisgICAgTnVtYmVyLAorICAgIFBlcmNlbnQsCisgICAgRGlt
ZW5zaW9uLAorICAgIE90aGVyCit9OworCitzdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdD
YXRlZ29yeUZvclR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBTb3J0aW5nQ2F0ZWdvcnkgc29ydE9yZGVyW10gPSB7CisgICAgICAgIFNvcnRpbmdDYXRl
Z29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLAorICAg
ICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpQZXJjZW50LCAgICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51
bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsCisgICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aCwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5
OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLAorICAgICAgICBT
b3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZy
ZXF1ZW5jeSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpPdGhlciwgICAgICAgICAvLyBVT3Ro
ZXIKKyAgICB9OworCisgICAgQ09NUElMRV9BU1NFUlQoQVJSQVlfU0laRShzb3J0T3JkZXIpID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgKyAxLCBz
b3J0T3JkZXJfc2l6ZV9zaG91bGRfbWF0Y2hfVW5pdENhdGVnb3J5KTsKKyAgICByZXR1cm4gc29y
dE9yZGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihjYWxjVW5pdENhdGVnb3J5KHVuaXRUeXBlKSld
OworfQorCitzdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdDYXRlZ29yeShjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICByZXR1cm4gc29ydGluZ0NhdGVnb3J5Rm9yVHlwZShu
b2RlLnByaW1pdGl2ZVR5cGUoKSk7CisKKyAgICByZXR1cm4gU29ydGluZ0NhdGVnb3J5OjpPdGhl
cjsKK30KKworc3RhdGljIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgaWYgKGlzPENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICByZXR1cm4gbm9kZS5wcmltaXRpdmVU
eXBlKCk7CisgICAgCisgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKK30KKwor
c3RhdGljIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uIGNvbnZlcnNp
b25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhDU1NVbml0VHlwZSBmaXJzdFR5cGUsIENTU1VuaXRUeXBl
IHNlY29uZFR5cGUpCit7CisgICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV04gfHwgc2Vjb25kVHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV04pCisgICAgICAg
IHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6SW52YWxp
ZDsKKworICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21i
aW5hdGlvbihmaXJzdFR5cGUpOworCisgICAgLy8gQ29tcGF0aWJsZSB0eXBlcy4KKyAgICBpZiAo
Zmlyc3RDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBmaXJzdENhdGVn
b3J5ID09IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihzZWNvbmRUeXBlKSkKKyAg
ICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpD
YW5vbmljYWxpemU7CisKKyAgICAvLyBNYXRjaGluZyB0eXBlcy4KKyAgICBpZiAoZmlyc3RUeXBl
ID09IHNlY29uZFR5cGUgJiYgaGFzRG91YmxlVmFsdWUoZmlyc3RUeXBlKSkKKyAgICAgICAgcmV0
dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZTsK
KworICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6
SW52YWxpZDsKK30KKworCitzdGF0aWMgQ1NTVmFsdWVJRCBmdW5jdGlvbkZyb21PcGVyYXRvcihD
YWxjT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpBZGQ6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgorICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseToKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgorICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVDYWxjOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Cisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZU1pbjsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4Ogor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVNYXg7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1w
OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVDbGFtcDsKKyAgICB9CisgICAgcmV0dXJuIENTU1Zh
bHVlQ2FsYzsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0
aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvciBvcCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNp
ZGUpCit7CisgICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmlnaHRTaWRlKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6OkFkZCB8fCBvcCA9PSBD
YWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKKworICAgIEFTU0VSVChsZWZ0U2lkZS0+Y2F0ZWdvcnko
KSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKyAgICBBU1NFUlQocmlnaHRTaWRlLT5j
YXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworCisgICAgYXV0byBuZXdD
YXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwor
ICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIENT
U0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBub2RlIGJlY2F1c2UgdW5hYmxlIHRvIGRl
dGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2RlKCpsZWZ0U2lkZSkgPDwg
IiBhbmQgIiA8PCAqcmlnaHRTaWRlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShuZXdDYXRlZ29y
eSwgb3AsIGxlZnRTaWRlLnJlbGVhc2VOb25OdWxsKCksIHJpZ2h0U2lkZS5yZWxlYXNlTm9uTnVs
bCgpKSk7Cit9CisKK1JlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFs
dWVzKQoreworICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSh2YWx1ZXMsIENh
bGNPcGVyYXRvcjo6QWRkKTsKKyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAi
RmFpbGVkIHRvIGNyZWF0ZSBzdW0gbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0
ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7CisgICAgICAgIG5ld0Nh
dGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6OkFkZCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNPcGVyYXRvcjo6QWRkLCBXVEZN
b3ZlKHZhbHVlcykpKTsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4+JiYgdmFsdWVzKQoreworICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29y
eSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOworICAgIGlmIChuZXdDYXRlZ29yeSA9
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
Q2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHByb2R1Y3Qgbm9kZSBiZWNhdXNlIHVu
YWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFs
dWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNPcGVyYXRvcjo6
TXVsdGlwbHksIFdURk1vdmUodmFsdWVzKSkpOworfQorCitSZWZQdHI8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09w
ZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7CisgICAgQVNTRVJUKG9w
ID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TWF4IHx8IG9wID09
IENhbGNPcGVyYXRvcjo6Q2xhbXApOworICAgIEFTU0VSVF9JTVBMSUVTKG9wID09IENhbGNPcGVy
YXRvcjo6Q2xhbXAsIHZhbHVlcy5zaXplKCkgPT0gMyk7CisKKyAgICBPcHRpb25hbDxDYWxjdWxh
dGlvbkNhdGVnb3J5PiBjYXRlZ29yeSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBmb3IgKGF1dG8mIHZh
bHVlIDogdmFsdWVzKSB7CisgICAgICAgIGF1dG8gdmFsdWVDYXRlZ29yeSA9IHJlc29sdmVkVHlw
ZUZvck1pbk9yTWF4T3JDbGFtcCh2YWx1ZS0+Y2F0ZWdvcnkoKSwgZGVzdGluYXRpb25DYXRlZ29y
eSk7CisKKyAgICAgICAgQVNTRVJUKHZhbHVlQ2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7CisgICAgICAgIGlmICghY2F0ZWdvcnkpIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7CisgICAgICAgICAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1ND
YWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRl
cm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXRlZ29yeSA9IHZhbHVlQ2F0ZWdvcnk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2F0ZWdv
cnkgIT0gdmFsdWVDYXRlZ29yeSkgeworICAgICAgICAgICAgaWYgKGlzU2FtZVBhaXIoY2F0ZWdv
cnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIGNh
dGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc1NhbWVQYWly
KGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikpIHsKKyAgICAgICAgICAg
ICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
Q2FsY09wZXJhdGlvbk5vZGUoY2F0ZWdvcnkudmFsdWUoKSwgb3AsIFdURk1vdmUodmFsdWVzKSkp
OworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJh
dG9yKENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBBU1NFUlQob3AgPT0gQ2FsY09wZXJhdG9yOjpB
ZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7CisKKyAgICBhdXRvIGhhc0NoaWxk
V2l0aE9wZXJhdG9yID0gWyZdIChDYWxjT3BlcmF0b3Igb3ApIHsKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBp
ZiAoIWhhc0NoaWxkV2l0aE9wZXJhdG9yKG9wKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKKyAgICBmb3IgKGF1
dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hp
bGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7CisgICAgICAgICAgICBhdXRvJiBjaGls
ZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2hpbGRy
ZW4oKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUgOiBjaGlsZHJlbikKKyAg
ICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZFRvTW92ZSkpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNo
aWxkKSk7CisgICAgfQorICAgIAorICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7CisgICAg
bV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworfQorCitib29sIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjpjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdAoreworICAgIGlmIChtX2No
aWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaXM8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obV9jaGlsZHJlblswXSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gZmlyc3RVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1p
dGl2ZVR5cGUoKTsKKyAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5
Rm9yQ29tYmluYXRpb24obV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGF1dG8mIG5vZGUgPSBtX2NoaWxkcmVuW2ldOworCisgICAgICAgIGlmICghaXM8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgYXV0byBub2RlVW5pdFR5cGUgPSBub2RlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAg
IGF1dG8gbm9kZUNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG5v
ZGVVbml0VHlwZSk7CisKKyAgICAgICAgaWYgKG5vZGVDYXRlZ29yeSAhPSBmaXJzdENhdGVnb3J5
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChub2RlQ2F0ZWdvcnkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgJiYgbm9kZVVuaXRUeXBlICE9IGZpcnN0VW5p
dFR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
IWhhc0RvdWJsZVZhbHVlKG5vZGVVbml0VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmNvbWJpbmVDaGlsZHJlbigpCit7CisgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNob3VsZFNvcnRDaGlsZHJlbigpKSB7CisgICAg
ICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzb3J0LWEtY2Fs
Y3VsYXRpb25zLWNoaWxkcmVuPgorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fY2hpbGRyZW4u
YmVnaW4oKSwgbV9jaGlsZHJlbi5lbmQoKSwgW10oY29uc3QgYXV0byYgZmlyc3QsIGNvbnN0IGF1
dG8mIHNlY29uZCkgeworICAgICAgICAgICAgLy8gU29ydCBvcmRlcjogbnVtYmVyLCBwZXJjZW50
YWdlLCBkaW1lbnNpb24sIG90aGVyLgorICAgICAgICAgICAgU29ydGluZ0NhdGVnb3J5IGZpcnN0
Q2F0ZWdvcnkgPSBzb3J0aW5nQ2F0ZWdvcnkoZmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgU29y
dGluZ0NhdGVnb3J5IHNlY29uZENhdGVnb3J5ID0gc29ydGluZ0NhdGVnb3J5KHNlY29uZC5nZXQo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmaXJzdENhdGVnb3J5ID09IFNvcnRp
bmdDYXRlZ29yeTo6RGltZW5zaW9uICYmIHNlY29uZENhdGVnb3J5ID09IFNvcnRpbmdDYXRlZ29y
eTo6RGltZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgbm9kZXMgY29udGFpbnMgYW55
IGRpbWVuc2lvbnMsIHJlbW92ZSB0aGVtIGZyb20gbm9kZXMsIHNvcnQgdGhlbSBieSB0aGVpciB1
bml0cywgYW5kIGFwcGVuZCB0aGVtIHRvIHJldC4KKyAgICAgICAgICAgICAgICBhdXRvIGZpcnN0
VW5pdFN0cmluZyA9IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyhmaXJzdC0+cHJp
bWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlY29uZFVuaXRTdHJpbmcgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcoc2Vjb25kLT5wcmltaXRpdmVUeXBlKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oZmlyc3RV
bml0U3RyaW5nLCBzZWNvbmRVbml0U3RyaW5nKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmaXJzdENhdGVnb3J5KSA8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzZWNvbmRDYXRlZ29yeSk7CisgICAgICAgIH0pOworCisgICAgICAgIExP
R19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgInBvc3Qtc29ydDogIiA8PCAqdGhpcyk7Cisg
ICAgfQorCisgICAgaWYgKGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7Cisg
ICAgICAgIC8vIEZvciBlYWNoIHNldCBvZiByb2904oCZcyBjaGlsZHJlbiB0aGF0IGFyZSBudW1l
cmljIHZhbHVlcyB3aXRoIGlkZW50aWNhbCB1bml0cywKKyAgICAgICAgLy8gcmVtb3ZlIHRob3Nl
IGNoaWxkcmVuIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHNpbmdsZSBudW1lcmljIHZhbHVlIGNv
bnRhaW5pbmcKKyAgICAgICAgLy8gdGhlIHN1bSBvZiB0aGUgcmVtb3ZlZCBub2RlcywgYW5kIHdp
dGggdGhlIHNhbWUgdW5pdC4KKyAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiBuZXdDaGlsZHJlbjsKKyAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShtX2NoaWxkcmVuLnNpemUoKSk7CisgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFw
cGVuZChtX2NoaWxkcmVuWzBdLmNvcHlSZWYoKSk7CisKKyAgICAgICAgQ1NTVW5pdFR5cGUgcHJl
dmlvdXNUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG5ld0NoaWxkcmVuWzBdLmdl
dCgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jaGlsZHJlbi5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgY3VycmVudE5vZGUgPSBtX2NoaWxkcmVuW2ld
OworICAgICAgICAgICAgQ1NTVW5pdFR5cGUgY3VycmVudFR5cGUgPSBwcmltaXRpdmVUeXBlRm9y
Q29tYmluYXRpb24oY3VycmVudE5vZGUuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIGNvbnZl
cnNpb25UeXBlID0gY29udmVyc2lvblRvQWRkVmFsdWVzV2l0aFR5cGVzKHByZXZpb3VzVHlwZSwg
Y3VycmVudFR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnZlcnNpb25UeXBlICE9IENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpJbnZhbGlkKSB7CisgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW4ubGFz
dCgpLmdldCgpKS5hZGQoZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY3VycmVu
dE5vZGUuZ2V0KCkpLCBjb252ZXJzaW9uVHlwZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXZpb3VzVHlwZSA9IHByaW1pdGl2ZVR5
cGVGb3JDb21iaW5hdGlvbihjdXJyZW50Tm9kZSk7CisgICAgICAgICAgICBuZXdDaGlsZHJlbi51
bmNoZWNrZWRBcHBlbmQoY3VycmVudE5vZGUuY29weVJlZigpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jaGlsZHJl
biA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpIHsKKyAgICAgICAg
Ly8gSWYgcm9vdCBoYXMgbXVsdGlwbGUgY2hpbGRyZW4gdGhhdCBhcmUgbnVtYmVycyAobm90IHBl
cmNlbnRhZ2VzIG9yIGRpbWVuc2lvbnMpLAorICAgICAgICAvLyByZW1vdmUgdGhlbSBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggYSBzaW5nbGUgbnVtYmVyIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3Qgb2Yg
dGhlIHJlbW92ZWQgbm9kZXMuCisgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMTsKKworICAg
ICAgICAvLyBTb3J0aW5nIHdpbGwgaGF2ZSBwdXQgdGhlIG51bWJlciBub2RlcyBmaXJzdC4KKyAg
ICAgICAgdW5zaWduZWQgbGVhZGluZ051bWJlck5vZGVDb3VudCA9IDA7CisgICAgICAgIGZvciAo
YXV0byYgbm9kZSA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGF1dG8gbm9kZVR5cGUgPSBw
cmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obm9kZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
bm9kZVR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG11bHRpcGxpZXIgKj0gbm9kZS0+ZG91Ymxl
VmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgKytsZWFkaW5nTnVt
YmVyTm9kZUNvdW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8UmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOworICAgICAgICBuZXdDaGlsZHJlbi5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIElmIHJvb3QgY29udGFpbnMgb25seSB0d28gY2hpbGRyZW4sIG9uZSBvZiB3aGljaCBp
cyBhIG51bWJlciAobm90IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24pIGFuZCB0aGUgb3RoZXIg
b2YKKyAgICAgICAgLy8gd2hpY2ggaXMgYSBTdW0gd2hvc2UgY2hpbGRyZW4gYXJlIGFsbCBudW1l
cmljIHZhbHVlcywgbXVsdGlwbHkgYWxsIG9mIHRoZSBTdW3igJlzIGNoaWxkcmVuIGJ5IHRoZSBu
dW1iZXIsIHRoZW4KKyAgICAgICAgLy8gcmV0dXJuIHRoZSBTdW0uCisgICAgICAgIC8vIFRoZSBT
dW0ncyBjaGlsZHJlbiBzaW1wbGlmaWNhdGlvbiB3aWxsIGhhdmUgaGFwcGVuZWQgYWxyZWFkeS4K
KyAgICAgICAgYm9vbCBkaWRNdWx0aXBseSA9IGZhbHNlOworICAgICAgICBpZiAobGVhZGluZ051
bWJlck5vZGVDb3VudCAmJiBtX2NoaWxkcmVuLnNpemUoKSAtIGxlYWRpbmdOdW1iZXJOb2RlQ291
bnQgPT0gMSkgeworICAgICAgICAgICAgYXV0byBtdWx0aXBsaWNhbmRDYXRlZ29yeSA9IGNhbGNV
bml0Q2F0ZWdvcnkocHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG1fY2hpbGRyZW4ubGFzdCgp
LmdldCgpKSk7CisgICAgICAgICAgICBpZiAobXVsdGlwbGljYW5kQ2F0ZWdvcnkgIT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNo
ZWNrZWRBcHBlbmQobV9jaGlsZHJlbi5sYXN0KCkuY29weVJlZigpKTsKKyAgICAgICAgICAgICAg
ICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdDaGlsZHJlblswXS5nZXQo
KSkubXVsdGlwbHkobXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAgZGlkTXVsdGlwbHkgPSB0
cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9j
aGlsZHJlbi5sYXN0KCkuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPiht
X2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpB
ZGQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtdWx0aXBseWluZyB3aXRoIGFub3Ro
ZXIgb3BlcmF0aW9uIHRoYXQgaXMgYW4gYWRkaXRpb24gYW5kIGFsbCB0aGUgYWRkZWQgY2hpbGRy
ZW4KKyAgICAgICAgICAgICAgICAvLyBhcmUgcGVyY2VudGFnZXMgb3IgZGltZW5zaW9ucywgd2Ug
c2hvdWxkIG11bHRpcGx5IGVhY2ggY2hpbGQgYW5kIG1ha2UgdGhpcyBleHByZXNzaW9uIGFuCisg
ICAgICAgICAgICAgICAgLy8gYWRkaXRpb24uCisgICAgICAgICAgICAgICAgYXV0byBhbGxDaGls
ZHJlbkFyZVByaW1pdGl2ZVZhbHVlcyA9IFtdKGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4mIGNoaWxkcmVuKSAtPiBib29sCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQuZ2V0
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmNoaWxkcmVuKCk7
CisgICAgICAgICAgICAgICAgaWYgKGFsbENoaWxkcmVuQXJlUHJpbWl0aXZlVmFsdWVzKGNoaWxk
cmVuKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZC5jb3B5
UmVmKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW4ubGFzdCgpLmdldCgpKS5tdWx0aXBseShtdWx0aXBsaWVy
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX29wZXJhdG9y
ID0gQ2FsY09wZXJhdG9yOjpBZGQ7CisgICAgICAgICAgICAgICAgICAgIGRpZE11bHRpcGx5ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWRpZE11bHRpcGx5KSB7CisgICAgICAgICAgICBpZiAobGVhZGluZ051bWJlck5v
ZGVDb3VudCkgeworICAgICAgICAgICAgICAgIGF1dG8gbXVsdGlwbGllck5vZGUgPSBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtdWx0
aXBsaWVyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgICAgIG5ld0No
aWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG11bHRpcGxpZXJOb2RlKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlYWRpbmdOdW1iZXJOb2Rl
Q291bnQ7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG5ld0No
aWxkcmVuLnVuY2hlY2tlZEFwcGVuZChtX2NoaWxkcmVuW2ldLmNvcHlSZWYoKSk7CisgICAgICAg
IH0KKworICAgICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2NoaWxk
cmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CisgICAgfQorCisgICAgaWYgKGlzTWluT3JNYXhO
b2RlKCkgJiYgY2FuQ29tYmluZUFsbENoaWxkcmVuKCkpIHsKKyAgICAgICAgYXV0byBjb21iaW5l
ZFVuaXRUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBhdXRv
IGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKGNvbWJpbmVkVW5p
dFR5cGUpOworICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIpCisgICAgICAgICAgICBjb21iaW5lZFVuaXRUeXBlID0gY2Fub25pY2FsVW5pdFR5cGVGb3JD
YWxjdWxhdGlvbkNhdGVnb3J5KGNhdGVnb3J5KTsKKworICAgICAgICBkb3VibGUgcmVzb2x2ZWRW
YWx1ZSA9IGRvdWJsZVZhbHVlKGNvbWJpbmVkVW5pdFR5cGUpOworICAgICAgICBhdXRvIG5ld0No
aWxkID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUocmVzb2x2ZWRWYWx1ZSwgY29tYmluZWRVbml0VHlwZSkpOworCisgICAgICAgIG1f
Y2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShuZXdD
aGlsZCkpOworICAgIH0KK30KKworLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1
ZXMtNC8jc2ltcGxpZnktYS1jYWxjdWxhdGlvbi10cmVlCisKK1JlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYmIHJvb3ROb2RlKQoreworICAgIHJldHVybiBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZN
b3ZlKHJvb3ROb2RlKSwgMCk7Cit9CisKK1JlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeVJlY3Vyc2l2ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYmIHJvb3ROb2RlLCBpbnQgZGVwdGgpCit7CisgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRp
b25Ob2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25j
YXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZS5nZXQoKSk7CisgICAgICAgIAorICAg
ICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBhdXRvIGNoaWxkID0gY2hpbGRyZW5baV0uY29weVJlZigpOworICAgICAgICAgICAgYXV0
byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7
CisgICAgICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSBjaGlsZHJlbltpXS5wdHIoKSkKKyAg
ICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IFdURk1vdmUobmV3Tm9kZSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKKyAgICAg
ICAgYXV0byYgbmVnYXRlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9k
ZS5nZXQoKSk7CisgICAgICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNoaWxkID0gbmVn
YXRlTm9kZS5jaGlsZCgpOworICAgICAgICBhdXRvIG5ld05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2
ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGggKyAxKTsKKyAgICAgICAgaWYgKG5ld05vZGUucHRyKCkg
IT0gJm5lZ2F0ZU5vZGUuY2hpbGQoKSkKKyAgICAgICAgICAgIG5lZ2F0ZU5vZGUuc2V0Q2hpbGQo
V1RGTW92ZShuZXdOb2RlKSk7CisgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4o
cm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIGludmVydE5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
SW52ZXJ0Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBjaGlsZCA9IGludmVydE5vZGUuY2hpbGQoKTsKKyAgICAgICAgYXV0byBuZXdOb2Rl
ID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7CisgICAgICAg
IGlmIChuZXdOb2RlLnB0cigpICE9ICZpbnZlcnROb2RlLmNoaWxkKCkpCisgICAgICAgICAgICBp
bnZlcnROb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOworICAgIH0KKworICAgIHJldHVy
biBzaW1wbGlmeU5vZGUoV1RGTW92ZShyb290Tm9kZSksIGRlcHRoKTsKK30KKworUmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5Tm9kZShSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJvb3ROb2RlLCBpbnQgZGVwdGgpCit7CisgICAgaWYg
KGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICAvLyBJ
ZiByb290IGlzIGEgcGVyY2VudGFnZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCBhbm90
aGVyIHZhbHVlLCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uCisgICAgICAgIC8vIGF2
YWlsYWJsZSB0byByZXNvbHZlIGl0LCBkbyBzbywgYW5kIGV4cHJlc3MgdGhlIHJlc3VsdGluZyBu
dW1lcmljIHZhbHVlIGluIHRoZSBhcHByb3ByaWF0ZSBjYW5vbmljYWwKKyAgICAgICAgLy8gdW5p
dC4gUmV0dXJuIHRoZSB2YWx1ZS4KKworICAgICAgICAvLyBJZiByb290IGlzIGEgZGltZW5zaW9u
IHRoYXQgaXMgbm90IGV4cHJlc3NlZCBpbiBpdHMgY2Fub25pY2FsIHVuaXQsIGFuZCB0aGVyZSBp
cyBlbm91Z2ggaW5mb3JtYXRpb24KKyAgICAgICAgLy8gYXZhaWxhYmxlIHRvIGNvbnZlcnQgaXQg
dG8gdGhlIGNhbm9uaWNhbCB1bml0LCBkbyBzbywgYW5kIHJldHVybiB0aGUgdmFsdWUuCisgICAg
ICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KHJvb3ROb2RlLmdldCgpKTsKKyAgICAgICAgcHJpbWl0aXZlVmFsdWVOb2RlLmNh
bm9uaWNhbGl6ZVVuaXQoKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOworICAg
IH0KKworICAgIC8vIElmIHJvb3QgaXMgYW4gb3BlcmF0b3Igbm9kZSB0aGF04oCZcyBub3Qgb25l
IG9mIHRoZSBjYWxjLW9wZXJhdG9yIG5vZGVzLCBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUg
bnVtZXJpYyB2YWx1ZXMKKyAgICAvLyB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjb21wdXRl
ZCB0aGUgb3BlcmF0aW9uIHJvb3QgcmVwcmVzZW50cywgcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVu
bmluZyByb2904oCZcyBvcGVyYXRpb24KKyAgICAvLyB1c2luZyBpdHMgY2hpbGRyZW4sIGV4cHJl
c3NlZCBpbiB0aGUgcmVzdWx04oCZcyBjYW5vbmljYWwgdW5pdC4KKyAgICBpZiAoaXM8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjYWxjT3BlcmF0aW9u
Tm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZS5nZXQoKSk7Cisg
ICAgICAgIC8vIERvbid0IHNpbXBsaWZ5IGF0IHRoZSByb290LCBvdGhlcndpc2Ugd2UgbG9zZSB0
cmFjayBvZiB0aGUgb3BlcmF0aW9uIGZvciBzZXJpYWxpemF0aW9uLgorICAgICAgICBpZiAoY2Fs
Y09wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKS5zaXplKCkgPT0gMSAmJiBkZXB0aCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKClbMF0pOworICAg
ICAgICAKKyAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5vZGUoKSkgewor
ICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihD
YWxjT3BlcmF0b3I6OkFkZCk7CisgICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5l
Q2hpbGRyZW4oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5p
c0NhbGNQcm9kdWN0Tm9kZSgpKSB7CisgICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5ob2lz
dENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOworICAgICAgICAg
ICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5pc01pbk9yTWF4Tm9kZSgpKQorICAg
ICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7CisKKyAgICAgICAg
Ly8gSWYgb25seSBvbmUgY2hpbGQgcmVtYWlucywgcmV0dXJuIHRoZSBjaGlsZCAoZXhjZXB0IGF0
IHRoZSByb290KS4KKyAgICAgICAgYXV0byBzaG91bGRDb21iaW5lUGFyZW50V2l0aE9ubHlDaGls
ZCA9IFtdKGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBwYXJlbnQsIGludCBkZXB0aCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbigpLnNpemUoKSAhPSAxKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gQWx3YXlzIHNp
bXBsaWZ5IGJlbG93IHRoZSByb290LgorICAgICAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBBdCB0aGUgcm9vdCwgcHJlc2Vy
dmUgdGhlIHJvb3QgZnVuY3Rpb24gYnkgb25seSBtZXJnaW5nIG5vZGVzIHdpdGggdGhlIHNhbWUg
ZnVuY3Rpb24uCisgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbigpLmZp
cnN0KCk7CisgICAgICAgICAgICBpZiAoIWlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRvIHBhcmVu
dEZ1bmN0aW9uID0gZnVuY3Rpb25Gcm9tT3BlcmF0b3IocGFyZW50LmNhbGNPcGVyYXRvcigpKTsK
KyAgICAgICAgICAgIGF1dG8gY2hpbGRGdW5jdGlvbiA9IGZ1bmN0aW9uRnJvbU9wZXJhdG9yKGRv
d25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkp
OworICAgICAgICAgICAgcmV0dXJuIGNoaWxkRnVuY3Rpb24gPT0gcGFyZW50RnVuY3Rpb247Cisg
ICAgICAgIH07CisKKyAgICAgICAgaWYgKHNob3VsZENvbWJpbmVQYXJlbnRXaXRoT25seUNoaWxk
KGNhbGNPcGVyYXRpb25Ob2RlLCBkZXB0aCkpCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShj
YWxjT3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpLmZpcnN0KCkpOworCisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+
KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
TmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7CisgICAgICAgIC8vIElmIHJvb3Ti
gJlzIGNoaWxkIGlzIGEgbnVtZXJpYyB2YWx1ZSwgcmV0dXJuIGFuIGVxdWl2YWxlbnQgbnVtZXJp
YyB2YWx1ZSwgYnV0IHdpdGggdGhlIHZhbHVlIG5lZ2F0ZWQgKDAgLSB2YWx1ZSkuCisgICAgICAg
IGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpICYmIGRvd25jYXN0
PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNOdW1lcmljVmFsdWUoKSkg
eworICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGRO
b2RlKS5uZWdhdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGEgTmVnYXRlIG5vZGUs
IHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0
ZU5vZGU+KGNoaWxkTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY05l
Z2F0ZU5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+
KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
SW52ZXJ0Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7CisgICAgICAgIC8vIElmIHJvb3Ti
gJlzIGNoaWxkIGlzIGEgbnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9yIGRpbWVuc2lvbikgcmV0
dXJuIHRoZSByZWNpcHJvY2FsIG9mIHRoZSBjaGlsZOKAmXMgdmFsdWUuCisgICAgICAgIGlmIChp
czxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpICYmIGRvd25jYXN0PENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNOdW1lcmljVmFsdWUoKSkgeworICAg
ICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5p
bnZlcnQoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhbiBJbnZlcnQgbm9kZSwgcmV0dXJuIHRoZSBj
aGlsZOKAmXMgY2hpbGQuCisgICAgICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGRO
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hp
bGROb2RlKS5jaGlsZCgpOworCisgICAgICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Cit9CisKK0NTU1VuaXRUeXBlIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKK3sKKyAgICBhdXRvIHVu
aXRDYXRlZ29yeSA9IGNhdGVnb3J5KCk7CisgICAgc3dpdGNoICh1bml0Q2F0ZWdvcnkpIHsKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgICAgIEFTU0VS
VChjaGlsZC0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOworI2Vu
ZGlmCisgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjsKKworICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogeworICAgICAgICBpZiAobV9jaGlsZHJlbi5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwor
CisgICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKSB7CisgICAgICAgICAgICBpZiAo
bV9jaGlsZHJlblswXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMV0tPnByaW1pdGl2ZVR5cGUoKTsK
KyAgICAgICAgICAgIGlmIChtX2NoaWxkcmVuWzFdLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlblswXS0+
cHJpbWl0aXZlVHlwZSgpOworICAgICAgICB9CisgICAgICAgIENTU1VuaXRUeXBlIGZpcnN0VHlw
ZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgZm9yIChhdXRvJiBj
aGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFR5cGUgIT0gY2hpbGQt
PnByaW1pdGl2ZVR5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19VTktOT1dOOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmaXJzdFR5cGU7CisgICAgfQor
CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6
CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6CisgICAgICAgIGlmICht
X2NoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW4uZmly
c3QoKS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICByZXR1cm4gY2Fub25pY2FsVW5pdFR5cGVG
b3JDYWxjdWxhdGlvbkNhdGVnb3J5KHVuaXRDYXRlZ29yeSk7CisKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Cisg
ICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25O
b2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobV9jaGlsZHJlbi5zaXplKCkpOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRy
ZW4pIHsKKyAgICAgICAgYXV0byBub2RlID0gY2hpbGQtPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNv
bnZlcnNpb25EYXRhKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5vZGUpKTsKKyAg
ICB9CisKKyAgICAvLyBSZXZlcnNlIHRoZSBvcGVyYXRpb24gd2UgZGlkIHdoZW4gY3JlYXRpbmcg
dGhpcyBub2RlLCByZWNvdmVyaW5nIGEgc3VpdGFibGUgZGVzdGluYXRpb24gY2F0ZWdvcnkgZm9y
IG90aGVyd2lzZS1hbWJpZ3VvdXMgbWluL21heC9jbGFtcCBub2Rlcy4KKyAgICAvLyBOb3RlIHRo
YXQgdGhpcyBjYXRlZ29yeSBpcyByZWFsbHkgb25seSBnb29kIGVub3VnaCBmb3IgdGhhdCBwdXJw
b3NlIGFuZCBpcyBub3QgYWNjdXJhdGUgZm9yIG90aGVyIG5vZGUgdHlwZXM7IHdlIGNvdWxkIHVz
ZSBhIGJvb2xlYW4gaW5zdGVhZC4KKyAgICBhdXRvIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICBpZiAoY2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKQorICAgICAgICBkZXN0aW5hdGlvbkNhdGVnb3J5ID0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOworICAgIGVsc2UgaWYgKGNhdGVnb3J5KCkgPT0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikKKyAgICAgICAgZGVzdGluYXRpb25D
YXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKKworICAgIHJldHVybiBtYWtl
VW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKG5vZGVzKSwgbV9vcGVyYXRv
ciwgZGVzdGluYXRpb25DYXRlZ29yeSk7Cit9CisKK2RvdWJsZSBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Cit7CisgICAgYm9vbCBh
bGxvd051bWJlcnMgPSBjYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5Owor
CisgICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAoYXV0byYgY2hpbGQpIHsK
KyAgICAgICAgQ1NTVW5pdFR5cGUgY2hpbGRUeXBlID0gdW5pdFR5cGU7CisgICAgICAgIGlmIChh
bGxvd051bWJlcnMgJiYgdW5pdFR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIgJiYgY2hp
bGQtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikKKyAgICAgICAg
ICAgIGNoaWxkVHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOworICAgICAgICByZXR1cm4g
Y2hpbGQtPmRvdWJsZVZhbHVlKGNoaWxkVHlwZSk7CisgICAgfSkpOworfQorCitkb3VibGUgQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gZXZhbHVhdGUo
bV9jaGlsZHJlbi5tYXAoWyZdIChhdXRvJiBjaGlsZCkgeworICAgICAgICByZXR1cm4gY2hpbGQt
PmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7CisgICAgfSkpOworfQorCit2b2lkIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2ll
cyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIGNoaWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25O
b2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1
aWxkQ1NTVGV4dChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBzaG91bGRPdXRwdXRFbmNsb3NpbmdDYWxjID0gW10o
Y29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByb290Tm9kZSkgeworICAgICAgICBpZiAoaXM8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICAgICAgYXV0byYgb3Bl
cmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkgfHwgb3BlcmF0
aW9uTm9kZS5pc0NhbGNQcm9kdWN0Tm9kZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAh
aXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUpOworICAgIH07CisgICAgCisg
ICAgYm9vbCBvdXRwdXRDYWxjID0gc2hvdWxkT3V0cHV0RW5jbG9zaW5nQ2FsYyhub2RlKTsKKyAg
ICBpZiAob3V0cHV0Q2FsYykKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoImNhbGMoIik7CisKKyAg
ICBidWlsZENTU1RleHRSZWN1cnNpdmUobm9kZSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9t
aXQpOworCisgICAgaWYgKG91dHB1dENhbGMpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKENhbGNP
cGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6
OkFkZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6Ok11bHRpcGx5OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6Ok1pbjogcmV0dXJuICJtaW4oIjsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4
OiByZXR1cm4gIm1heCgiOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogcmV0dXJuICJj
bGFtcCgiOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gIiI7Cit9CisKKy8vIDxodHRwczovL2Ry
YWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzZXJpYWxpemUtYS1jYWxjdWxhdGlvbi10cmVl
Pgordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0
IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgR3Jv
dXBpbmdQYXJlbnMgcGFyZW5zKQoreworICAgIC8vIElmIHJvb3QgaXMgYSBudW1lcmljIHZhbHVl
LCBvciBhIG5vbi1tYXRoIGZ1bmN0aW9uLCBzZXJpYWxpemUgcm9vdCBwZXIgdGhlIG5vcm1hbCBy
dWxlcyBmb3IgaXQgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorICAgIGlmIChpczxDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlPihub2RlKSkgeworICAgICAgICBhdXRvJiB2YWx1ZU5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQodmFsdWVOb2RlLmN1c3RvbUNTU1RleHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUpKSB7CisgICAgICAgIGF1
dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obm9kZSk7
CisKKyAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9kZSgpKSB7CisgICAgICAg
ICAgICAvLyBJZiByb290IGlzIGEgU3VtIG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxs
eSBjb250YWluaW5nICIoIi4KKyAgICAgICAgICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJl
bnM6OkluY2x1ZGUpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJygnKTsKKworICAg
ICAgICAgICAgLy8gU2ltcGxpZmljYXRpb24gYWxyZWFkeSBzb3J0ZWQgY2hpbGRyZW4uCisgICAg
ICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKKyAgICAg
ICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkpOworICAgICAgICAgICAgLy8gU2VyaWFsaXpl
IHJvb3TigJlzIGZpcnN0IGNoaWxkLCBhbmQgYXBwZW5kIGl0IHRvIHMuCisgICAgICAgICAgICBi
dWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVpbGRlcik7CisKKyAgICAg
ICAgICAgIC8vIEZvciBlYWNoIGNoaWxkIG9mIHJvb3QgYmV5b25kIHRoZSBmaXJzdDoKKyAgICAg
ICAgICAgIC8vIElmIGNoaWxkIGlzIGEgTmVnYXRlIG5vZGUsIGFwcGVuZCAiIC0gIiB0byBzLCB0
aGVuIHNlcmlhbGl6ZSB0aGUgTmVnYXRl4oCZcyBjaGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQg
dG8gcy4KKyAgICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGEgbmVnYXRpdmUgbnVtZXJpYyB2YWx1
ZSwgYXBwZW5kICIgLSAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBuZWdhdGlvbiBvZiBjaGls
ZCBhcyBub3JtYWwgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICAvLyBP
dGhlcndpc2UsIGFwcGVuZCAiICsgIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSBjaGlsZCBhbmQgYXBw
ZW5kIHRoZSByZXN1bHQgdG8gcy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkID0g
Y2hpbGRyZW5baV07CisgICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihj
aGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAtICIpOworICAg
ICAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93bmNhc3Q8Q1NTQ2FsY05l
Z2F0ZU5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWVOb2RlID0gZG93bmNhc3Q8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWVOb2RlLmlzTmVnYXRpdmUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAtICIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gU2VyaWFsaXplIHRoZSBuZWdhdGlvbiBvZiBjaGlsZC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwcmltaXRpdmVWYWx1ZU5vZGUudmFsdWUoKS5wcmltaXRp
dmVUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgwIC0gcHJp
bWl0aXZlVmFsdWVOb2RlLnZhbHVlKCkuZG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OnVuaXRUeXBlU3RyaW5nKHVuaXRUeXBlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICsgIik7CisgICAgICAg
ICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVk
ZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc0Nh
bGNQcm9kdWN0Tm9kZSgpKSB7CisgICAgICAgICAgICAvLyBJZiByb290IGlzIGEgUHJvZHVjdCBu
b2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIuCisgICAgICAg
ICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgIC8vIFNpbXBsaWZpY2F0aW9u
IGFscmVhZHkgc29ydGVkIGNoaWxkcmVuLgorICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBv
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6
ZSgpKTsKKyAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBjaGlsZCwgYW5k
IGFwcGVuZCBpdCB0byBzLgorICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxk
cmVuLmZpcnN0KCksIGJ1aWxkZXIpOworCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBv
ZiByb290IGJleW9uZCB0aGUgZmlyc3Q6CisgICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhbiBJ
bnZlcnQgbm9kZSwgYXBwZW5kICIgLyAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBJbnZlcnTi
gJlzIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCBhcHBlbmQgIiAqICIgdG8gcywgdGhlbiBzZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVu
ZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
Y2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGNo
aWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hp
bGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgLyAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGRvd25jYXN0PENTU0NhbGNJbnZl
cnROb2RlPihjaGlsZC5nZXQoKSkuY2hpbGQoKSwgYnVpbGRlcik7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgKiAiKTsKKyAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUo
Y2hpbGQsIGJ1aWxkZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFyZW5z
ID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcpJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiByb290IGlzIGFueXRoaW5nIGJ1dCBhIFN1bSwgTmVnYXRlLCBQcm9kdWN0LCBvciBJbnZlcnQg
bm9kZSwgc2VyaWFsaXplIGEgbWF0aCBmdW5jdGlvbiBmb3IgdGhlCisgICAgICAgIC8vIGZ1bmN0
aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUgdHlwZSwgdHJlYXRpbmcgdGhlIG5vZGXigJlz
IGNoaWxkcmVuIGFzIHRoZSBmdW5jdGlvbuKAmXMKKyAgICAgICAgLy8gY29tbWEtc2VwYXJhdGVk
IGNhbGN1bGF0aW9uIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorICAgICAgICBi
dWlsZGVyLmFwcGVuZChmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKG9wZXJhdGlvbk5vZGUuY2Fs
Y09wZXJhdG9yKCkpKTsKKworICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUu
Y2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyLCBHcm91cGluZ1Bh
cmVuczo6T21pdCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVu
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAg
ICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbltpXSwgYnVpbGRlciwgR3JvdXBp
bmdQYXJlbnM6Ok9taXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBidWlsZGVyLmFw
cGVuZCgnKScpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczxDU1ND
YWxjTmVnYXRlTm9kZT4obm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmVnYXRlTm9kZSA9IGRvd25j
YXN0PENTU0NhbGNOZWdhdGVOb2RlPihub2RlKTsKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhIE5l
Z2F0ZSBub2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKC0xICog
Ii4KKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIi0xICoiKTsKKyAgICAgICAgYnVpbGRDU1NUZXh0
UmVjdXJzaXZlKG5lZ2F0ZU5vZGUuY2hpbGQoKSwgYnVpbGRlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihub2RlKSkgeworICAg
ICAgICBhdXRvJiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KG5vZGUp
OworICAgICAgICAvLyBJZiByb290IGlzIGFuIEludmVydCBub2RlLCBsZXQgcyBiZSBhIHN0cmlu
ZyBpbml0aWFsbHkgY29udGFpbmluZyAiKDEgLyAiLgorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
MSAvICIpOworICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoaW52ZXJ0Tm9kZS5jaGlsZCgp
LCBidWlsZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiY2Fs
YyBvcGVyYXRpb24gIiA8PCBtX29wZXJhdG9yIDw8ICIgKGNhdGVnb3J5OiAiIDw8IGNhdGVnb3J5
KCkgPDwgIiwgdHlwZSAiIDw8IHByaW1pdGl2ZVR5cGUoKSA8PCAiKSI7CisKKyAgICBUZXh0U3Ry
ZWFtOjpHcm91cFNjb3BlIHNjb3BlKHRzKTsKKyAgICB0cyA8PCBtX2NoaWxkcmVuLnNpemUoKSA8
PCAiIGNoaWxkcmVuIjsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJub2RlIiwgY2hpbGQpOworfQorCitib29sIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHApIGNvbnN0
Cit7CisgICAgaWYgKHR5cGUoKSAhPSBleHAudHlwZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSYgb3RoZXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSY+KGV4cCk7CisKKyAgICBpZiAobV9jaGlsZHJlbi5z
aXplKCkgIT0gb3RoZXIubV9jaGlsZHJlbi5zaXplKCkgfHwgbV9vcGVyYXRvciAhPSBvdGhlci5t
X29wZXJhdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFjb21wYXJlQ1NT
VmFsdWUobV9jaGlsZHJlbltpXSwgb3RoZXIubV9jaGlsZHJlbltpXSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitkb3VibGUgQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wLCBjb25zdCBW
ZWN0b3I8ZG91YmxlPiYgY2hpbGRyZW4pCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpBZGQ6IHsKKyAgICAgICAgZG91YmxlIHN1bSA9IDA7CisgICAgICAgIGZv
ciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgICAgIHN1bSArPSBjaGlsZDsKKyAg
ICAgICAgcmV0dXJuIHN1bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0
OgorICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICByZXR1cm4g
Y2hpbGRyZW5bMF0gLSBjaGlsZHJlblsxXTsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlw
bHk6IHsKKyAgICAgICAgZG91YmxlIHByb2R1Y3QgPSAxOworICAgICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxkOworICAgICAgICBy
ZXR1cm4gcHJvZHVjdDsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKKyAg
ICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9PSAxIHx8IGNoaWxkcmVuLnNpemUoKSA9PSAy
KTsKKyAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIHJldHVy
biBjaGlsZHJlblswXSAvIGNoaWxkcmVuWzFdOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46
IHsKKyAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICBkb3VibGUg
bWluaW11bSA9IGNoaWxkcmVuWzBdOworICAgICAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJl
bikKKyAgICAgICAgICAgIG1pbmltdW0gPSBzdGQ6Om1pbihtaW5pbXVtLCBjaGlsZCk7CisgICAg
ICAgIHJldHVybiBtaW5pbXVtOworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiB7
CisgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgZG91YmxlIG1h
eGltdW0gPSBjaGlsZHJlblswXTsKKyAgICAgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4p
CisgICAgICAgICAgICBtYXhpbXVtID0gc3RkOjptYXgobWF4aW11bSwgY2hpbGQpOworICAgICAg
ICByZXR1cm4gbWF4aW11bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7
CisgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMykKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICBkb3VibGUg
bWluID0gY2hpbGRyZW5bMF07CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNoaWxkcmVuWzFdOwor
ICAgICAgICBkb3VibGUgbWF4ID0gY2hpbGRyZW5bMl07CisgICAgICAgIHJldHVybiBzdGQ6Om1h
eChtaW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKKyAgICB9CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCisKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENTU0NhbGNPcGVyYXRpb25Ob2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlKENhbGNPcGVyYXRvciwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+IGNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
JiYgdmFsdWVzKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVh
dGVQcm9kdWN0KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpOwor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZU1pbk9yTWF4T3JD
bGFtcChDYWxjT3BlcmF0b3IsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2
YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSk7CisKKyAgICBz
dGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnkoUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJik7CisKKyAgICBzdGF0aWMgdm9pZCBidWlsZENTU1RleHQoY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRlciYpOworCisgICAgQ2FsY09wZXJhdG9y
IGNhbGNPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3I7IH0KKyAgICBib29sIGlz
Q2FsY1N1bU5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6
QWRkOyB9CisgICAgYm9vbCBpc0NhbGNQcm9kdWN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
cmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsgfQorICAgIGJvb2wgaXNNaW5Pck1heE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1f
b3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXg7IH0KKyAgICBib29sIHNob3VsZFNvcnRDaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzQ2FsY1N1bU5vZGUoKSB8fCBpc0NhbGNQcm9kdWN0Tm9k
ZSgpOyB9CisKKyAgICB2b2lkIGhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9y
KTsKKyAgICB2b2lkIGNvbWJpbmVDaGlsZHJlbigpOworICAgIAorICAgIGJvb2wgY2FuQ29tYmlu
ZUFsbENoaWxkcmVuKCkgY29uc3Q7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAg
ICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIHsgcmV0dXJu
IG1fY2hpbGRyZW47IH0KKworcHJpdmF0ZToKKyAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxj
dWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmln
aHRTaWRlKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKKyAgICAg
ICAgLCBtX29wZXJhdG9yKG9wKQorICAgIHsKKyAgICAgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDIpOworICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGxlZnRTaWRlKSk7CisgICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocmlnaHRTaWRlKSk7CisgICAgfQorCisgICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4pCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNhdGVnb3J5KQorICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCisgICAgICAgICwgbV9j
aGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZSB0eXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3NzQ2FsY09wZXJhdGlvbjsgfQorCisgICAgYm9vbCBp
c1plcm8oKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZShw
cmltaXRpdmVUeXBlKCkpOworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlw
ZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29u
c3QgZmluYWw7CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhI
YXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgc3RhdGljIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSogZ2V0TnVtYmVyU2lkZShDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSkKKyAgICB7CisgICAgICAgIGlmIChsZWZ0U2lkZS5j
YXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJl
dHVybiAmbGVmdFNpZGU7CisgICAgICAgIGlmIChyaWdodFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gJnJpZ2h0U2lkZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZG91YmxlIGV2YWx1YXRlKGNv
bnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBldmFsdWF0ZU9wZXJhdG9yKG1fb3BlcmF0b3IsIGNoaWxkcmVuKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yLCBjb25zdCBWZWN0b3I8
ZG91YmxlPiYpOworICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlm
eU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKKyAgICBzdGF0
aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlSZWN1cnNpdmUoUmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKKyAgICAKKyAgICBlbnVtIGNsYXNzIEdy
b3VwaW5nUGFyZW5zIHsKKyAgICAgICAgT21pdCwKKyAgICAgICAgSW5jbHVkZQorICAgIH07Cisg
ICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0IENTU0NhbGNFeHByZXNz
aW9uTm9kZSYsIFN0cmluZ0J1aWxkZXImLCBHcm91cGluZ1BhcmVucyA9IEdyb3VwaW5nUGFyZW5z
OjpJbmNsdWRlKTsKKworICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOworICAgIFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKK307CisKK30KKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNPcGVyYXRpb25O
b2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3ND
YWxjT3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIgorCisjaW5jbHVkZSAiQ1NTQ2Fs
Y0NhdGVnb3J5TWFwcGluZy5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5j
bHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNz
aW9uTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0
ZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShXVEZNb3ZlKHZhbHVlKSkpOworfQorCitS
ZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSwgQ1NTVW5pdFR5cGUgdHlwZSkKK3sKKyAgICBpZiAoIXN0
ZDo6aXNmaW5pdGUodmFsdWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZSh2YWx1ZSwgdHlwZSkpKTsKK30KKworU3RyaW5nIENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlLT5jc3NU
ZXh0KCk7Cit9CisKK0NTU1VuaXRUeXBlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OnByaW1p
dGl2ZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7
Cit9CisKK0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQorICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNhbGNVbml0Q2F0ZWdvcnkodmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkpCisgICAgLCBt
X3ZhbHVlKFdURk1vdmUodmFsdWUpKQoreworfQorCisvLyBGSVhNRTogVXNlIGNhbGNVbml0Q2F0
ZWdvcnk/Citib29sIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTnVtZXJpY1ZhbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZS0+aXNMZW5ndGgoKSB8fCBtX3ZhbHVlLT5pc051
bWJlcigpIHx8IG1fdmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8IG1fdmFsdWUtPmlzQW5nbGUoKQor
ICAgICAgICB8fCBtX3ZhbHVlLT5pc1RpbWUoKSB8fCBtX3ZhbHVlLT5pc1Jlc29sdXRpb24oKSB8
fCBtX3ZhbHVlLT5pc0ZsZXgoKSB8fCBtX3ZhbHVlLT5pc0ZyZXF1ZW5jeSgpOworfQorCitib29s
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTmVnYXRpdmUoKSBjb25zdAoreworICAgIHJl
dHVybiBpc051bWVyaWNWYWx1ZSgpICYmIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCkgPCAwLjA7Cit9
CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRlKCkKK3sKKyAgICBBU1NF
UlQoaXNOdW1lcmljVmFsdWUoKSk7CisgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoMC4wIC0gbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppbnZlcnQoKQorewor
ICAgIEFTU0VSVChpc051bWVyaWNWYWx1ZSgpKTsKKyAgICBpZiAoIW1fdmFsdWUtPmRvdWJsZVZh
bHVlKCkpCisgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpKTsKKworICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEuMCAvIG1f
dmFsdWUtPmRvdWJsZVZhbHVlKCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Cit9CisKK3Zv
aWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6YWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUmIG5vZGUsIFVuaXRDb252ZXJzaW9uIHVuaXRDb252ZXJzaW9uKQoreworICAgIGF1
dG8gdmFsdWVUeXBlID0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworCisgICAgc3dpdGNoICh1
bml0Q29udmVyc2lvbikgeworICAgIGNhc2UgVW5pdENvbnZlcnNpb246OkludmFsaWQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuaXRD
b252ZXJzaW9uOjpQcmVzZXJ2ZToKKyAgICAgICAgQVNTRVJUKG5vZGUucHJpbWl0aXZlVHlwZSgp
ID09IHZhbHVlVHlwZSk7CisgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKCkgKyBub2RlLmRvdWJsZVZhbHVlKHZhbHVlVHlwZSks
IHZhbHVlVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5pdENvbnZlcnNpb246OkNh
bm9uaWNhbGl6ZTogeworICAgICAgICBhdXRvIHZhbHVlQ2F0ZWdvcnkgPSB1bml0Q2F0ZWdvcnko
dmFsdWVUeXBlKTsKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgYXdrd2FyZCB0aGF0IGNhbm9uaWNh
bFVuaXRUeXBlRm9yQ2F0ZWdvcnkoKSBoYXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgQ1NTVW5pdENh
dGVnb3J5OjpQZXJjZW50LgorICAgICAgICBhdXRvIGNhbm9uaWNhbFR5cGUgPSB2YWx1ZUNhdGVn
b3J5ID09IENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudCA/IENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VO
VEFHRSA6IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkodmFsdWVDYXRlZ29yeSk7CisgICAg
ICAgIEFTU0VSVChjYW5vbmljYWxUeXBlICE9IENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTik7Cisg
ICAgICAgIGRvdWJsZSBsZWZ0VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZShjYW5vbmljYWxU
eXBlKTsKKyAgICAgICAgZG91YmxlIHJpZ2h0VmFsdWUgPSBub2RlLmRvdWJsZVZhbHVlKGNhbm9u
aWNhbFR5cGUpOworICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShs
ZWZ0VmFsdWUgKyByaWdodFZhbHVlLCBjYW5vbmljYWxUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIH0KK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjptdWx0aXBs
eShkb3VibGUgbXVsdGlwbGllcikKK3sKKyAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKTsKKyAgICBBU1NFUlQoaGFzRG91YmxlVmFsdWUodmFsdWVUeXBlKSk7Cisg
ICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV92YWx1ZS0+ZG91YmxlVmFs
dWUodmFsdWVUeXBlKSAqIG11bHRpcGxpZXIsIHZhbHVlVHlwZSk7Cit9CisKK3ZvaWQgQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29udmVydFRvVW5pdFR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5
cGUpCit7CisgICAgQVNTRVJUKHVuaXRDYXRlZ29yeSh1bml0VHlwZSkgPT0gdW5pdENhdGVnb3J5
KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkpOworICAgIGRvdWJsZSBuZXdWYWx1ZSA9IG1fdmFs
dWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShuZXdWYWx1ZSwgdW5pdFR5cGUpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU6OmNhbm9uaWNhbGl6ZVVuaXQoKQoreworICAgIGF1dG8gY2F0ZWdvcnkgPSBj
YWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24obV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgp
KTsKKyAgICBpZiAoY2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gY2Fub25pY2FsVHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBl
Rm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRlZ29yeSk7CisgICAgaWYgKGNhbm9uaWNhbFR5cGUg
PT0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3Vi
bGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKKyAgICBt
X3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShuZXdWYWx1ZSwgY2Fub25pY2FsVHlw
ZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAgIHN3aXRjaCAoY2F0ZWdv
cnkoKSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgorICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk51bWJlcj4obV92YWx1ZS0+ZmxvYXRWYWx1
ZSgpKTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KExlbmd0aChtX3ZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0Pihjb252ZXJzaW9uRGF0YSksIExlbmd0aFR5cGU6OkZpeGVkKSk7Cisg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OgorICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDogeworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxD
YWxjRXhwcmVzc2lvbkxlbmd0aD4obV92YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKSk7CisgICAgfQor
ICAgIC8vIE9ubHkgdHlwZXMgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGEgTGVuZ3RoIGV4cHJlc3Np
b24gY2FuIGJlIGNvbnZlcnRlZAorICAgIC8vIHRvIGEgQ2FsY0V4cHJlc3Npb25Ob2RlLiBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyIG1ha2VzIG5vIHNlbnNlIGFzIGEgTGVuZ3Ro
LgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6VGltZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKKyAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK2RvdWJsZSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkb3VibGVWYWx1ZShD
U1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QKK3sKKyAgICBpZiAoaGFzRG91YmxlVmFsdWUodW5p
dFR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQodW5pdENhdGVn
b3J5KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkgPT0gdW5pdENhdGVnb3J5KHVuaXRUeXBlKSks
IGJ1dCBvbmx5IHdoZW4gYWxsIGNhbGxlcnMgYXJlIGZpeGVkIChlLmcuIHdlYmtpdC5vcmcvYi8y
MDQ4MjYpLgorICAgICAgICBpZiAodW5pdENhdGVnb3J5KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUo
KSkgIT0gdW5pdENhdGVnb3J5KHVuaXRUeXBlKSkgeworICAgICAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKENhbGMsIHN0cmVhbSA8PCAiQ2FsbGluZyBkb3VibGVWYWx1ZSgpIHdpdGggdW5pdCAiIDw8
IHVuaXRUeXBlIDw8ICIgb24gYSBub2RlIG9mIHVuaXQgdHlwZSAiIDw8IG1fdmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA8PCAiIHdoaWNoIGlzIGluY29tcGF0aWJsZSIpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV92YWx1ZS0+ZG91YmxlVmFsdWUo
dW5pdFR5cGUpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworZG91YmxlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbXB1dGVMZW5ndGhQ
eChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aDoKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZG91Ymxl
Pihjb252ZXJzaW9uRGF0YSk7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgorICAgICAgICByZXR1cm4g
bV92YWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVy
OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVl
bmN5OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIG1fdmFsdWUtPmNvbGxlY3REaXJlY3RD
b21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVz
KEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBtX3ZhbHVlLT5j
b2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKwor
Ym9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc1plcm8oKSBjb25zdAoreworICAgIHJl
dHVybiAhbV92YWx1ZS0+ZG91YmxlVmFsdWUoKTsKK30KKworYm9vbCBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZShtX3ZhbHVlLCBzdGF0aWNfY2FzdDxj
b25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJj4ob3RoZXIpLm1fdmFsdWUpOworfQorCit2
b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0
Cit7CisgICAgdHMgPDwgInZhbHVlICIgPDwgbV92YWx1ZS0+Y3VzdG9tQ1NTVGV4dCgpIDw8ICIg
KGNhdGVnb3J5OiAiIDw8IGNhdGVnb3J5KCkgPDwgIiwgdHlwZTogIiA8PCBwcmltaXRpdmVUeXBl
KCkgPDwgIikiOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDU1NQcmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CisK
K2VudW0gQ1NTUHJvcGVydHlJRCA6IHVpbnQxNl90OworCitjbGFzcyBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlPiBjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmKTsKKyAgICBz
dGF0aWMgUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IGNyZWF0ZShkb3VibGUgdmFs
dWUsIENTU1VuaXRUeXBlKTsKKworICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CisK
KyAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWw7CisKKyAgICBib29s
IGlzTnVtZXJpY1ZhbHVlKCkgY29uc3Q7CisgICAgYm9vbCBpc05lZ2F0aXZlKCkgY29uc3Q7CisK
KyAgICB2b2lkIG5lZ2F0ZSgpOworICAgIHZvaWQgaW52ZXJ0KCk7CisKKyAgICBlbnVtIGNsYXNz
IFVuaXRDb252ZXJzaW9uIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgUHJlc2VydmUsCisg
ICAgICAgIENhbm9uaWNhbGl6ZQorICAgIH07CisgICAgdm9pZCBhZGQoY29uc3QgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZSYsIFVuaXRDb252ZXJzaW9uID0gVW5pdENvbnZlcnNpb246OlByZXNl
cnZlKTsKKyAgICB2b2lkIG11bHRpcGx5KGRvdWJsZSk7CisKKyAgICB2b2lkIGNvbnZlcnRUb1Vu
aXRUeXBlKENTU1VuaXRUeXBlKTsKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZVVuaXQoKTsKKworICAg
IGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUu
Z2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0IGZp
bmFsOworICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNQcmltaXRp
dmVWYWx1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3Jl
YXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0
IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7
CisKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYp
IGNvbnN0IGZpbmFsOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmKTsKKworICAgIFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4gbV92YWx1ZTsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1ND
QUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUsIHR5cGUoKSA9PSBX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNQcmltaXRpdmVWYWx1
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgorCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0ludmVydE5vZGUuaCIKKyNpbmNsdWRlICJD
U1NDYWxjTmVnYXRlTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNPcGVyYXRpb25Ob2RlLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKKyNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBDYWxjRXhwcmVzc2lvbk5v
ZGUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworCitz
dGF0aWMgaW5saW5lIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlQmxlbmRIYWxm
KGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0IHBy
b2dyZXNzKQoreworICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNP
cGVyYXRvcjo6TXVsdGlwbHksIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKSwKKyAgICAgICAgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cHJvZ3Jlc3MsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSkpOworfQorCitzdGF0aWMgVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBjcmVhdGVDU1MoY29uc3QgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKK3sKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVl
czsKKyAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2Rlcy5zaXplKCkpOworICAg
IGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7CisgICAgICAgIGF1dG8gY3NzTm9kZSA9IGNyZWF0
ZUNTUygqbm9kZSwgc3R5bGUpOworICAgICAgICBpZiAoIWNzc05vZGUpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VO
b25OdWxsKCkpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWVzOworfQorCitzdGF0aWMgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0IENhbGNFeHByZXNzaW9uTm9k
ZSYgbm9kZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIHN3aXRjaCAobm9kZS50
eXBlKCkpIHsKKyAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcjogeworICAg
ICAgICBmbG9hdCB2YWx1ZSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihub2RlKS52
YWx1ZSgpOyAvLyBkb3VibGU/CisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpM
ZW5ndGg6IHsKKyAgICAgICAgYXV0byYgbGVuZ3RoID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25M
ZW5ndGg+KG5vZGUpLmxlbmd0aCgpOworICAgICAgICBpZiAoIWxlbmd0aC5pc1BlcmNlbnQoKSAm
JiBsZW5ndGguaXNaZXJvKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKTsKKyAgICB9CisKKyAgICBjYXNlIENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uOiB7CisgICAgICAgIGF1dG8gY2hpbGROb2RlID0g
Y3JlYXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihub2RlKS5jaGlsZCgp
LCBzdHlsZSk7CisgICAgICAgIGlmICghY2hpbGROb2RlKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlKGNoaWxkTm9k
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVU
eXBlOjpJbnZlcnNpb246IHsKKyAgICAgICAgYXV0byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRv
d25jYXN0PENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihub2RlKS5jaGlsZCgpLCBzdHlsZSk7Cisg
ICAgICAgIGlmICghY2hpbGROb2RlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRp
b246IHsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uPihub2RlKTsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uQ2hpbGRyZW4gPSBv
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgIENhbGNPcGVyYXRvciBvcCA9IG9wZXJh
dGlvbk5vZGUuZ2V0T3BlcmF0b3IoKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogeworICAgICAgICAgICAgYXV0byBjaGls
ZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOworICAgICAgICAgICAg
aWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShjaGlsZHJlblswXSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7CisgICAgICAgICAgICBBU1NFUlQo
b3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09IDIpOworCisgICAgICAgICAgICBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKKyAgICAgICAgICAgIHZhbHVlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGF1dG8gZmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hp
bGRyZW5bMF0sIHN0eWxlKTsKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2hpbGQgPSBjcmVhdGVD
U1MoKm9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7CisKKyAgICAgICAgICAgIGlmICghc2Vj
b25kQ2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CisKKyAgICAgICAg
ICAgIGF1dG8gbmVnYXRlTm9kZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUoc2Vjb25kQ2hp
bGQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZU5vZGU7CisKKyAgICAgICAgICAgIHZhbHVlcy5hcHBl
bmQoZmlyc3RDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBl
bmQoV1RGTW92ZShuZWdhdGVOb2RlKSk7CisKKyAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUodmFsdWVzKSk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7CisgICAgICAgICAgICBp
ZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdU
Rk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6
RGl2aWRlOiB7CisgICAgICAgICAgICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09
IDIpOworCisgICAgICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZh
bHVlczsKKyAgICAgICAgICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlv
bkNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gZmlyc3RD
aGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKKyAgICAgICAg
ICAgIGlmICghZmlyc3RDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICAgICAgYXV0byBzZWNvbmRDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRy
ZW5bMV0sIHN0eWxlKTsKKyAgICAgICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIGludmVydE5vZGUgPSBDU1ND
YWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOworCisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUoaW52ZXJ0Tm9kZSkpOworCisgICAgICAg
ICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoY3JlYXRlQ1NT
KG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNaW46CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6CisgICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogeworICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9
IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOworICAgICAgICAgICAgaWYgKGNo
aWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1w
KG9wLCBXVEZNb3ZlKGNoaWxkcmVuKSwgb3BlcmF0aW9uTm9kZS5kZXN0aW5hdGlvbkNhdGVnb3J5
KCkpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGg6IHsKKyAgICAg
ICAgLy8gRklYTUU6IChodHRwOi8vd2Via2l0Lm9yZy9iLzEyMjAzNikgQ3JlYXRlIGEgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlIGVxdWl2YWxlbnQgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC4K
KyAgICAgICAgYXV0byYgYmxlbmQgPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
Pihub2RlKTsKKyAgICAgICAgZmxvYXQgcHJvZ3Jlc3MgPSBibGVuZC5wcm9ncmVzcygpOworICAg
ICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6OkFk
ZCwgY3JlYXRlQmxlbmRIYWxmKGJsZW5kLmZyb20oKSwgc3R5bGUsIDEgLSBwcm9ncmVzcyksIGNy
ZWF0ZUJsZW5kSGFsZihibGVuZC50bygpLCBzdHlsZSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisgICAg
Y2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmIGxlbmd0
aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUo
KSkgeworICAgIGNhc2UgTGVuZ3RoVHlwZTo6UGVyY2VudDoKKyAgICBjYXNlIExlbmd0aFR5cGU6
OkZpeGVkOgorICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRl
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLCBzdHlsZSkpOworICAgIGNhc2UgTGVu
Z3RoVHlwZTo6Q2FsY3VsYXRlZDoKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGguY2Fs
Y3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSwgc3R5bGUpOworICAgIGNhc2UgTGVuZ3RoVHlw
ZTo6QXV0bzoKKyAgICBjYXNlIExlbmd0aFR5cGU6OkludHJpbnNpYzoKKyAgICBjYXNlIExlbmd0
aFR5cGU6Ok1pbkludHJpbnNpYzoKKyAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkNvbnRlbnQ6Cisg
ICAgY2FzZSBMZW5ndGhUeXBlOjpNYXhDb250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6Rmls
bEF2YWlsYWJsZToKKyAgICBjYXNlIExlbmd0aFR5cGU6OkZpdENvbnRlbnQ6CisgICAgY2FzZSBM
ZW5ndGhUeXBlOjpSZWxhdGl2ZToKKyAgICBjYXNlIExlbmd0aFR5cGU6OlVuZGVmaW5lZDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwor
fQorCitDU1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYmIGV4cHJlc3Npb24sIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQorICAgIDogQ1NT
VmFsdWUoQ2FsY3VsYXRpb25DbGFzcykKKyAgICAsIG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJl
c3Npb24pKQorICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlKQoreworfQorCitDU1NDYWxjVmFsdWU6On5DU1NDYWxjVmFsdWUoKSA9IGRlZmF1
bHQ7CisKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgQ1NTQ2FsY1ZhbHVlOjpjYXRlZ29yeSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZXhwcmVzc2lvbi0+Y2F0ZWdvcnkoKTsKK30KKworQ1NTVW5pdFR5
cGUgQ1NTQ2FsY1ZhbHVlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9l
eHByZXNzaW9uLT5wcmltaXRpdmVUeXBlKCk7Cit9CisKK1JlZjxDYWxjdWxhdGlvblZhbHVlPiBD
U1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIENhbGN1bGF0
aW9uVmFsdWU6OmNyZWF0ZShtX2V4cHJlc3Npb24tPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZl
cnNpb25EYXRhKSwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgPyBWYWx1ZVJhbmdlOjpOb25O
ZWdhdGl2ZSA6IFZhbHVlUmFuZ2U6OkFsbCk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ZhbHVlOjpzZXRQ
ZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UgcmFuZ2UpCit7CisgICAgbV9zaG91bGRDbGFt
cFRvTm9uTmVnYXRpdmUgPSByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGw7Cit9CisKK3ZvaWQgQ1NT
Q2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgbV9leHByZXNzaW9uLT5jb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENT
U0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBtX2V4cHJlc3Npb24t
PmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQor
CitTdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dChtX2V4cHJlc3Npb24uZ2V0KCksIGJ1aWxkZXIpOworICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVl
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fZXhwcmVzc2lv
biwgb3RoZXIubV9leHByZXNzaW9uKTsKK30KKworaW5saW5lIGRvdWJsZSBDU1NDYWxjVmFsdWU6
OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZShkb3VibGUgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKK30K
KworZG91YmxlIENTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZShwcmltaXRp
dmVUeXBlKCkpKTsKK30KKworZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAorewor
ICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5jb21wdXRlTGVu
Z3RoUHgoY29udmVyc2lvbkRhdGEpKTsKK30KKworYm9vbCBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1
bmN0aW9uKENTU1ZhbHVlSUQgZnVuY3Rpb25JZCkKK3sKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQp
IHsKKyAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoK
KyAgICBjYXNlIENTU1ZhbHVlTWluOgorICAgIGNhc2UgQ1NTVmFsdWVNYXg6CisgICAgY2FzZSBD
U1NWYWx1ZUNsYW1wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDU1ND
YWxjVmFsdWU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgaW5kZW50
IDw8ICIoIiA8PCAiQ1NTQ2FsY1ZhbHVlIjsKKworICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3Ry
ZWFtOworICAgIG11bHRpbGluZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5kZW50KCkgKyAyKTsKKwor
ICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoInNob3VsZCBjbGFtcCBub24tbmVnYXRp
dmUiLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7CisgICAgbXVsdGlsaW5lU3RyZWFtLmR1
bXBQcm9wZXJ0eSgiZXhwcmVzc2lvbiIsIG1fZXhwcmVzc2lvbi5nZXQoKSk7CisKKyAgICB0cyA8
PCBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOworICAgIHRzIDw8ICIpXG4iOworfQorCitSZWZQ
dHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9u
LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSByYW5nZSkKK3sKKyAgICBDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIgcGFyc2VyKGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgIGF1dG8g
ZXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUNhbGModG9rZW5zLCBmdW5jdGlvbik7CisgICAgaWYg
KCFleHByZXNzaW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHJlc3VsdCA9
IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgpLCBy
YW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGwpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3Ry
ZWFtIDw8ICJDU1NDYWxjVmFsdWU6OmNyZWF0ZSAiIDw8ICpyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisgICAgCitSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0
ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQoreworICAgIGF1dG8gZXhwcmVzc2lvbiA9IGNyZWF0ZUNTUyh2YWx1ZS5leHByZXNzaW9uKCks
IHN0eWxlKTsKKyAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBzaW1wbGlmaWVkRXhwcmVzc2lvbiA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpz
aW1wbGlmeShleHByZXNzaW9uLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKFdURk1vdmUoc2ltcGxpZmllZEV4cHJlc3Npb24p
LCB2YWx1ZS5zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoKSkpOworICAgIExPR19XSVRIX1NUUkVB
TShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3JlYXRlIGZyb20gQ2FsY3VsYXRpb25W
YWx1ZTogIiA8PCAqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxjVmFsdWUmIHZhbHVlKQor
eworICAgIHZhbHVlLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAi
Q2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0NhbGNFeHByZXNz
aW9uTm9kZTsKK2NsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CitjbGFzcyBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhOworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2VudW0gY2xhc3MgQ1NTVW5pdFR5
cGUgOiB1aW50OF90OworZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVnb3J5IDogdWludDhfdDsK
K2VudW0gY2xhc3MgVmFsdWVSYW5nZSA6IHVpbnQ4X3Q7CisKK2NsYXNzIENTU0NhbGNWYWx1ZSBm
aW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJh
bmdlKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKGNvbnN0IENhbGN1
bGF0aW9uVmFsdWUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIH5DU1NDYWxjVmFsdWUoKTsK
KworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsKKyAgICBkb3VibGUg
ZG91YmxlVmFsdWUoKSBjb25zdDsKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdDsKKyAgICBDU1NVbml0VHlwZSBwcmltaXRp
dmVUeXBlKCkgY29uc3Q7CisKKyAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRlQ2FsY3Vs
YXRpb25WYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3Q7CisgICAg
dm9pZCBzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UpOworCisgICAgdm9pZCBjb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JikgY29uc3Q7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OworCisgICAgU3RyaW5nIGN1c3Rv
bUNTU1RleHQoKSBjb25zdDsKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjVmFsdWUmKSBj
b25zdDsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0NhbGNGdW5jdGlvbihDU1NWYWx1ZUlEKTsK
KworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ1NT
Q2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGJvb2wgc2hvdWxkQ2xhbXBU
b05vbk5lZ2F0aXZlKTsKKworICAgIGRvdWJsZSBjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91Ymxl
KSBjb25zdDsKKworICAgIGNvbnN0IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVz
c2lvbjsKKyAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlOworfTsKKworVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ1NTQ2FsY1ZhbHVlJik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUo
Q1NTQ2FsY1ZhbHVlLCBpc0NhbGNWYWx1ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24g
Mjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAKLSNpbmNsdWRl
ICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDcm9zc2ZhZGVWYWx1ZS5oIgog
I2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJDU1NQYWludEltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJJZGlvbXMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5
LmgiCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JMdW1pbmFu
Y2UuaCIKICNpbmNsdWRlICJQYWlyLmgiCkBAIC05NCw3ICs5NSw3IEBAIHN0YXRpYyBPcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJPclAKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQog
Ci0vLyBGSVhNRTogY29uc2lkZXIgcHVsbGluZyBpbiB0aGUgcGFyc2luZyBsb2dpYyBmcm9tIENT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwLgorLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhl
IHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuCiBjbGFzcyBD
YWxjUGFyc2VyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnks
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgQ1NTVmFsdWVQb29sJiBj
c3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHJldmlzaW9uIDI3ODIzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMjgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhbGN1
bGF0aW9uVmFsdWUuaCIKLQotI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUg
PGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUmVmPENhbGN1bGF0aW9uVmFsdWU+IENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0
ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiB2YWx1ZSwgVmFsdWVSYW5nZSBy
YW5nZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWxjdWxhdGlvblZhbHVlKFdURk1v
dmUodmFsdWUpLCByYW5nZSkpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6ZXZh
bHVhdGUoZmxvYXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWU7Ci19Ci0KLXZvaWQgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXI6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMg
PDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKG1fdmFsdWUpOwot
fQotCi1ib29sIENhbGNFeHByZXNzaW9uTnVtYmVyOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHBy
ZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9u
TnVtYmVyPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25OdW1iZXI+
KG90aGVyKTsKLX0KLQotZmxvYXQgQ2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0Ci17Ci0gICAgZmxvYXQgcmVzdWx0ID0gbV9leHByZXNzaW9uLT5ldmFsdWF0
ZShtYXhWYWx1ZSk7Ci0gICAgLy8gRklYTUU6IFRoaXMgdGVzdCB3YXMgb3JpZ2luYWxseSBuZWVk
ZWQgd2hlbiB3ZSBkaWQgbm90IGRldGVjdCBkaXZpc2lvbiBieSB6ZXJvIGF0IHBhcnNlIHRpbWUu
Ci0gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgbm93IHVubmVlZGVkIGNvZGUgYW5k
IGNhbiBiZSByZW1vdmVkLgotICAgIGlmIChzdGQ6OmlzbmFuKHJlc3VsdCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAmJiByZXN1bHQg
PCAwID8gMCA6IHJlc3VsdDsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6ZXZh
bHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIC1tX2NoaWxkLT5ldmFs
dWF0ZShtYXhWYWx1ZSk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6b3BlcmF0
b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVy
biBpczxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8
Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIpOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9u
TmVnYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIi0oIjsK
LSAgICB0cyA8PCAqbV9jaGlsZDsKLSAgICB0cyA8PCAiKSI7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uJiBiKQotewotICAgIHJldHVybiAqYS5jaGlsZCgpID09ICpiLmNoaWxkKCk7Ci19Ci0K
LWZsb2F0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMS4wZiAvIG1fY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsK
LX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykg
Y29uc3QKLXsKLSAgICB0cyA8PCAiMS4wIC8gIiA8PCAiKCI7Ci0gICAgdHMgPDwgKm1fY2hpbGQ7
Ci0gICAgdHMgPDwgIikiOwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVy
YXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlzPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNh
c3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG90aGVyKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbklu
dmVyc2lvbiYgYikKLXsKLSAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgpOwotfQot
Ci1mbG9hdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX29wZXJhdG9yKSB7Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6OkFkZDogewotICAgICAgICBmbG9hdCBzdW0gPSAwOwotICAgICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAgIHN1bSArPSBjaGlsZC0+ZXZhbHVhdGUobWF4
VmFsdWUpOwotICAgICAgICByZXR1cm4gc3VtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6U3VidHJhY3Q6IHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQVNTRVJUKG1fY2hpbGRy
ZW4uc2l6ZSgpID09IDIpOwotICAgICAgICBmbG9hdCBsZWZ0ID0gbV9jaGlsZHJlblswXS0+ZXZh
bHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmbG9hdCByaWdodCA9IG1fY2hpbGRyZW5bMV0tPmV2
YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGxlZnQgLSByaWdodDsKLSAgICB9Ci0g
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Ci0gICAgICAgIGZsb2F0IHByb2R1Y3Qg
PSAxOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAg
IHByb2R1Y3QgKj0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHBy
b2R1Y3Q7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAgICAgICAg
Ly8gRklYTUUKLSAgICAgICAgQVNTRVJUKG1fY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwgbV9jaGls
ZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9PSAxKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKLSAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVl
KTsKLSAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1
ZSk7Ci0gICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpNaW46IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAg
ICAgICAgZmxvYXQgbWluaW11bSA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsK
LSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBtaW5p
bXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKSk7Ci0gICAg
ICAgIHJldHVybiBtaW5pbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiB7
Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0IG1h
eGltdW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZvciAo
YXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgbWF4aW11bSA9IHN0ZDo6bWF4
KG1heGltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkpOwotICAgICAgICByZXR1cm4gbWF4
aW11bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7Ci0gICAgICAgIGlm
IChtX2NoaWxkcmVuLnNpemUoKSAhPSAzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLQotICAgICAgICBmbG9hdCBtaW4gPSBtX2No
aWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZsb2F0IHZhbHVlID0gbV9j
aGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmbG9hdCBtYXggPSBtX2No
aWxkcmVuWzJdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1heCht
aW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKLSAgICB9Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRf
TmFOKCk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246Om9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhw
cmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24mIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJiBi
KQotewotICAgIGlmIChhLmdldE9wZXJhdG9yKCkgIT0gYi5nZXRPcGVyYXRvcigpIHx8IGEuZGVz
dGluYXRpb25DYXRlZ29yeSgpICE9IGIuZGVzdGluYXRpb25DYXRlZ29yeSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIGhlbHBl
ciBmdW5jdGlvbiBmb3IgZG9pbmcgYSBkZWVwIGNvbXBhcmUgb24gYSB2ZWN0b3Igb2YgcG9pbnRl
cnMuCi0gICAgaWYgKGEuY2hpbGRyZW4oKS5zaXplKCkgIT0gYi5jaGlsZHJlbigpLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmNo
aWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCEoKmEuY2hpbGRyZW4oKVtpXSA9
PSAqYi5jaGlsZHJlbigpW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246OmR1bXAo
VGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJh
dG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1heCkgewotICAgICAgICB0
cyA8PCBtX29wZXJhdG9yIDw8ICIoIjsKLSAgICAgICAgc2l6ZV90IGNoaWxkcmVuQ291bnQgPSBt
X2NoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJl
bkNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIHRzIDw8IG1fY2hpbGRyZW5baV0uZ2V0KCk7Ci0g
ICAgICAgICAgICBpZiAoaSA8IGNoaWxkcmVuQ291bnQgLSAxKQotICAgICAgICAgICAgICAgIHRz
IDw8ICIsICI7Ci0gICAgICAgIH0KLSAgICAgICAgdHMgPDwgIikiOwotICAgIH0gZWxzZQotICAg
ICAgICB0cyA8PCBtX2NoaWxkcmVuWzBdLmdldCgpIDw8ICIgIiA8PCBtX29wZXJhdG9yIDw8ICIg
IiA8PCBtX2NoaWxkcmVuWzFdLmdldCgpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVzc2lvbkxlbmd0
aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZsb2F0VmFs
dWVGb3JMZW5ndGgobV9sZW5ndGgsIG1heFZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lv
bkxlbmd0aDo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25z
dAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpICYmICp0aGlz
ID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihvdGhlcik7Ci19Ci0KLXZvaWQgQ2Fs
Y0V4cHJlc3Npb25MZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMg
PDwgbV9sZW5ndGg7Ci19Ci0KLUNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OkNhbGNFeHByZXNz
aW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQgcHJvZ3Jlc3MpCi0g
ICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5n
dGgpCi0gICAgLCBtX2Zyb20oZnJvbSkKLSAgICAsIG1fdG8odG8pCi0gICAgLCBtX3Byb2dyZXNz
KHByb2dyZXNzKQotewotICAgIC8vIEZsYXR0ZW4gbmVzdGluZyBvZiBDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoIGFzIGEgc3BlY3VsYXRpdmUgZml4IGZvciByZGFyOi8vcHJvYmxlbS8zMDUzMzAw
NS4KLSAgICAvLyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGlzIG9ubHkgdXNlZCBhcyBhIHJl
c3VsdCBvZiBhbmltYXRpb24gYW5kIHRoZXkgZG9uJ3QgbmVzdCBpbiBub3JtYWwgY2FzZXMuCi0g
ICAgaWYgKG1fZnJvbS5pc0NhbGN1bGF0ZWQoKSAmJiBtX2Zyb20uY2FsY3VsYXRpb25WYWx1ZSgp
LmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5n
dGgpCi0gICAgICAgIG1fZnJvbSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+
KG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpKS5mcm9tKCk7Ci0gICAgaWYg
KG1fdG8uaXNDYWxjdWxhdGVkKCkgJiYgbV90by5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lv
bigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKLSAgICAg
ICAgbV90byA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG1fdG8uY2FsY3Vs
YXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSkudG8oKTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Np
b25CbGVuZExlbmd0aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICgxLjBmIC0gbV9wcm9ncmVzcykgKiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fZnJvbSwgbWF4
VmFsdWUpICsgbV9wcm9ncmVzcyAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV90bywgbWF4VmFsdWUp
OwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKTsKLX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbkJsZW5k
TGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJibGVuZCgi
IDw8IG1fZnJvbSA8PCAiLCAiIDw8IG1fdG8gPDwgIiwgIiA8PCBtX3Byb2dyZXNzIDw8ICIpIjsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ2FsY09wZXJhdG9y
IG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB0
cyA8PCAiKyI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDogdHMgPDwg
Ii0iOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHRzIDw8ICIqIjsg
YnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogdHMgPDwgIi8iOyBicmVhazsK
LSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB0cyA8PCAibWluIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDogdHMgPDwgIm1heCI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpDbGFtcDogdHMgPDwgImNsYW1wIjsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0
czsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2Fs
Y3VsYXRpb25WYWx1ZSYgdmFsdWUpCi17Ci0gICAgdHMgPDwgImNhbGMoIjsKLSAgICB0cyA8PCB2
YWx1ZS5leHByZXNzaW9uKCk7Ci0gICAgdHMgPDwgIikiOwotICAgIHJldHVybiB0czsKLX0KLQot
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2FsY0V4cHJlc3Np
b25Ob2RlJiBleHByZXNzaW9uTm9kZSkKLXsKLSAgICBleHByZXNzaW9uTm9kZS5kdW1wKHRzKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmgJKHJldmlzaW9uIDI3ODIzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJMZW5ndGguaCIK
LSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsK
LWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6
IEZpbmQgYSB3YXkgdG8gdW5pZnkgdGhpcyB3aXRoIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0
ZWdvcnk/Ci1lbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1aW50OF90IHsKLSAgICBO
dW1iZXIsCi0gICAgTGVuZ3RoLAotICAgIFBlcmNlbnQsCi0gICAgUGVyY2VudE51bWJlciwKLSAg
ICBQZXJjZW50TGVuZ3RoLAotICAgIEFuZ2xlLAotICAgIFRpbWUsCi0gICAgRnJlcXVlbmN5LAot
ICAgIE90aGVyCi19OwotCi0vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdmFsdWVzOyBwYXJzaW5nIHVz
ZXMgdGhlbS4KLWVudW0gY2xhc3MgQ2FsY09wZXJhdG9yIDogdWludDhfdCB7Ci0gICAgQWRkID0g
JysnLAotICAgIFN1YnRyYWN0ID0gJy0nLAotICAgIE11bHRpcGx5ID0gJyonLAotICAgIERpdmlk
ZSA9ICcvJywKLSAgICBNaW4gPSAwLAotICAgIE1heCwKLSAgICBDbGFtcCwKLX07Ci0KLWVudW0g
Y2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA6IHVpbnQ4X3QgewotICAgIFVuZGVmaW5lZCwK
LSAgICBOdW1iZXIsCi0gICAgTGVuZ3RoLAotICAgIE9wZXJhdGlvbiwKLSAgICBOZWdhdGlvbiwK
LSAgICBJbnZlcnNpb24sCi0gICAgQmxlbmRMZW5ndGgsCi19OwotCi1jbGFzcyBDYWxjRXhwcmVz
c2lvbk5vZGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4
cGxpY2l0IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlID0gQ2FsY0V4
cHJlc3Npb25Ob2RlVHlwZTo6VW5kZWZpbmVkKTsKLSAgICB2aXJ0dWFsIH5DYWxjRXhwcmVzc2lv
bk5vZGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIHZpcnR1YWwgZmxvYXQgZXZhbHVhdGUoZmxv
YXQgbWF4VmFsdWUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAo
V1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi1wcml2YXRlOgotICAgIENhbGNFeHByZXNz
aW9uTm9kZVR5cGUgbV90eXBlOwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25OdW1iZXIgZmlu
YWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBD
YWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCk7Ci0KLSAgICBmbG9hdCB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdmFsdWU7Ci19OwotCi1jbGFzcyBDYWxjRXhw
cmVzc2lvbkxlbmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTGVuZ3RoKExlbmd0aCk7Ci0KLSAgICBjb25z
dCBMZW5ndGgmIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLXByaXZhdGU6
Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IG92ZXJyaWRlOwotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBMZW5ndGggbV9sZW5ndGg7Ci19OwotCi1jbGFzcyBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uIGZp
bmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsY0V4cHJl
c3Npb25OZWdhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5vZGUp
Ci0gICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5l
Z2F0aW9uKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2NoaWxkKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhW
YWx1ZSkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNz
aW9uTm9kZSYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBmaW5hbDsKLSAgICAKLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUqIGNoaWxkKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1ib29sIG9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYsIGNvbnN0IENhbGNFeHByZXNzaW9uTmVn
YXRpb24mKTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24gZmluYWwgOiBwdWJsaWMg
Q2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBDYWxjRXhwcmVzc2lvbkludmVyc2lv
bihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5vZGUpCi0gICAgICAgIDog
Q2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbikKLSAg
ICAgICAgLCBtX2NoaWxkKFdURk1vdmUobm9kZSkpCi0gICAgewotICAgICAgICBBU1NFUlQobV9j
aGlsZCk7Ci0gICAgfQotCi0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7
Ci0KLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4g
bV9jaGlsZC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhw
cmVzc2lvbk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYpOwotCi1j
bGFzcyBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lv
bk5vZGUgewotcHVibGljOgotICAgIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uKFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJlbiwgQ2FsY09wZXJhdG9y
LCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcik7Ci0KLSAgICBDYWxjT3BlcmF0b3IgZ2V0T3BlcmF0b3IoKSBjb25zdCB7
IHJldHVybiBtX29wZXJhdG9yOyB9Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlv
bkNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbkNhdGVnb3J5OyB9Ci0KLSAg
ICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLQotcHJpdmF0ZToKLSAgICBmbG9h
dCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZv
aWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKLSAgICBDYWxj
T3BlcmF0b3IgbV9vcGVyYXRvcjsKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1fZGVzdGluYXRp
b25DYXRlZ29yeSB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyIH07Ci19OwotCi1jbGFzcyBD
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9k
ZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aChMZW5ndGggZnJvbSwg
TGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcyk7Ci0KLSAgICBjb25zdCBMZW5ndGgmIGZyb20oKSBj
b25zdCB7IHJldHVybiBtX2Zyb207IH0KLSAgICBjb25zdCBMZW5ndGgmIHRvKCkgY29uc3QgeyBy
ZXR1cm4gbV90bzsgfQotICAgIGZsb2F0IHByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9n
cmVzczsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25O
b2RlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgTGVuZ3RoIG1fZnJvbTsKLSAgICBMZW5ndGggbV90bzsKLSAg
ICBmbG9hdCBtX3Byb2dyZXNzOwotfTsKLQotY2xhc3MgQ2FsY3VsYXRpb25WYWx1ZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPENhbGN1bGF0aW9uVmFsdWU+IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8
Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxv
YXQgbWF4VmFsdWUpIGNvbnN0OwotCi0gICAgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUo
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsgfQotICAgIGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX2V4cHJl
c3Npb247IH0KLQotcHJpdmF0ZToKLSAgICBDYWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0
cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKLSAgICBib29sIG1fc2hvdWxkQ2xh
bXBUb05vbk5lZ2F0aXZlOwotfTsKLQotaW5saW5lIENhbGNFeHByZXNzaW9uTm9kZTo6Q2FsY0V4
cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0
eXBlKQotewotfQotCi1pbmxpbmUgQ2FsY3VsYXRpb25WYWx1ZTo6Q2FsY3VsYXRpb25WYWx1ZShz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uLCBWYWx1ZVJhbmdl
IHJhbmdlKQotICAgIDogbV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCi0gICAgLCBt
X3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZShyYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2
ZSkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjdWxhdGlvblZhbHVl
JiBhLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJiBiKQotewotICAgIHJldHVybiBhLmV4cHJlc3Np
b24oKSA9PSBiLmV4cHJlc3Npb24oKTsKLX0KLQotaW5saW5lIENhbGNFeHByZXNzaW9uTnVtYmVy
OjpDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCB2YWx1ZSkKLSAgICA6IENhbGNFeHByZXNzaW9u
Tm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOdW1iZXIpCi0gICAgLCBtX3ZhbHVlKHZhbHVl
KQotewotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTnVt
YmVyJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYgYikKLXsKLSAgICByZXR1cm4gYS52
YWx1ZSgpID09IGIudmFsdWUoKTsKLX0KLQotaW5saW5lIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpD
YWxjRXhwcmVzc2lvbkxlbmd0aChMZW5ndGggbGVuZ3RoKQotICAgIDogQ2FsY0V4cHJlc3Npb25O
b2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxlbmd0aCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0
aCkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbkxl
bmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGIpCi17Ci0gICAgcmV0dXJuIGEu
bGVuZ3RoKCkgPT0gYi5sZW5ndGgoKTsKLX0KLQotaW5saW5lIENhbGNFeHByZXNzaW9uT3BlcmF0
aW9uOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciBvcCwgQ2FsY3VsYXRpb25D
YXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENh
bGNFeHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbikKLSAgICAsIG1fY2hpbGRyZW4oV1RGTW92
ZShjaGlsZHJlbikpCi0gICAgLCBtX29wZXJhdG9yKG9wKQotICAgICwgbV9kZXN0aW5hdGlvbkNh
dGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi17Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
Jik7Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCYgYikKLXsKLSAgICByZXR1
cm4gYS5wcm9ncmVzcygpID09IGIucHJvZ3Jlc3MoKSAmJiBhLmZyb20oKSA9PSBiLmZyb20oKSAm
JiBhLnRvKCkgPT0gYi50bygpOwotfQotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYpOwotV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYp
OwotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENhbGNPcGVy
YXRvcik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1l
KSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05P
REUoQ2FsY0V4cHJlc3Npb25OdW1iZXIsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGVUeXBlOjpOdW1iZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9O
X05PREUoQ2FsY0V4cHJlc3Npb25MZW5ndGgsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVz
c2lvbk5vZGVUeXBlOjpMZW5ndGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNT
SU9OX05PREUoQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NB
TENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiwgdHlwZSgpID09IFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGgsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0
aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkocmV2aXNpb24gMjc4MjM5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Miw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAoIG11ZWxsZXJAa2RlLm9y
ZyApCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kcmV3IFdlbGxpbmd0b24gKHByb3Rv
bkB3aXJldGFwcGVkLm5ldCkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVk
ZSAiTGVuZ3RoLmgiCiAKICNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25M
ZW5ndGguaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
IkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCIK
KworI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6Q2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcykKKyAgICA6IENhbGNF
eHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKKyAgICAs
IG1fZnJvbShmcm9tKQorICAgICwgbV90byh0bykKKyAgICAsIG1fcHJvZ3Jlc3MocHJvZ3Jlc3Mp
Cit7CisgICAgLy8gRmxhdHRlbiBuZXN0aW5nIG9mIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgg
YXMgYSBzcGVjdWxhdGl2ZSBmaXggZm9yIHJkYXI6Ly9wcm9ibGVtLzMwNTMzMDA1LgorICAgIC8v
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGggaXMgb25seSB1c2VkIGFzIGEgcmVzdWx0IG9mIGFu
aW1hdGlvbiBhbmQgdGhleSBkb24ndCBuZXN0IGluIG5vcm1hbCBjYXNlcy4KKyAgICBpZiAobV9m
cm9tLmlzQ2FsY3VsYXRlZCgpICYmIG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lv
bigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKKyAgICAg
ICAgbV9mcm9tID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4obV9mcm9tLmNh
bGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkpLmZyb20oKTsKKyAgICBpZiAobV90by5pc0Nh
bGN1bGF0ZWQoKSAmJiBtX3RvLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkudHlwZSgp
ID09IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQorICAgICAgICBtX3RvID0g
ZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4obV90by5jYWxjdWxhdGlvblZhbHVl
KCkuZXhwcmVzc2lvbigpKS50bygpOworfQorCitmbG9hdCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gKDEuMGYg
LSBtX3Byb2dyZXNzKSAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV9mcm9tLCBtYXhWYWx1ZSkgKyBt
X3Byb2dyZXNzICogZmxvYXRWYWx1ZUZvckxlbmd0aChtX3RvLCBtYXhWYWx1ZSk7Cit9CisKK2Jv
b2wgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVz
c2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVu
ZExlbmd0aD4ob3RoZXIpOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmR1
bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgImJsZW5kKCIgPDwgbV9mcm9t
IDw8ICIsICIgPDwgbV90byA8PCAiLCAiIDw8IG1fcHJvZ3Jlc3MgPDwgIikiOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGguaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxj
RXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGZpbmFsIDogcHVibGljIENh
bGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcyk7CisKKyAgICBjb25zdCBM
ZW5ndGgmIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KKyAgICBjb25zdCBMZW5ndGgm
IHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQorICAgIGZsb2F0IHByb2dyZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9ncmVzczsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZs
b2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdCBmaW5hbDsKKworICAgIExlbmd0aCBtX2Zyb207CisgICAgTGVuZ3RoIG1fdG87Cisg
ICAgZmxvYXQgbV9wcm9ncmVzczsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aCYgYikKK3sKKyAgICByZXR1cm4gYS5wcm9ncmVzcygpID09IGIucHJvZ3Jlc3MoKSAmJiBh
LmZyb20oKSA9PSBiLmZyb20oKSAmJiBhLnRvKCkgPT0gYi50bygpOworfQorCit9CisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbkJsZW5k
TGVuZ3RoLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRM
ZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
SW52ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxj
L0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJl
c3Npb25JbnZlcnNpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHJl
dHVybiAxLjBmIC8gbV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOworfQorCit2b2lkIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRz
IDw8ICIxLjAgLyAiIDw8ICIoIiA8PCAqbV9jaGlsZCA8PCAiKSI7Cit9CisKK2Jvb2wgQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG90
aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4ob3RoZXIp
OworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mIGEs
IGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBiKQoreworICAgIHJldHVybiAqYS5jaGls
ZCgpID09ICpiLmNoaWxkKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgPG1lbW9y
eT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbkludmVyc2lv
biBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
bm9kZSkKKyAgICAgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6SW52ZXJzaW9uKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2NoaWxkKTsKKyAgICB9CisKKyAgICBjb25zdCBDYWxjRXhwcmVzc2lv
bk5vZGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorCitwcml2YXRl
OgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7Cisg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Cit9OworCitib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbkludmVy
c2lvbiYpOworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9E
RShDYWxjRXhwcmVzc2lvbkludmVyc2lvbiwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNz
aW9uTm9kZVR5cGU6OkludmVyc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25MZW5ndGguaCIKKworI2luY2x1ZGUgIkxl
bmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6ZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsb2F0VmFsdWVGb3JMZW5ndGgo
bV9sZW5ndGgsIG1heFZhbHVlKTsKK30KKworYm9vbCBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6b3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiBpczxDYWxjRXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0
PENhbGNFeHByZXNzaW9uTGVuZ3RoPihvdGhlcik7Cit9CisKK3ZvaWQgQ2FsY0V4cHJlc3Npb25M
ZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgbV9sZW5ndGg7
Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVz
c2lvbkxlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25MZW5ndGguaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsY0V4
cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25MZW5ndGggZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJl
c3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbkxlbmd0aChM
ZW5ndGgpOworCisgICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2Rl
JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsK
KworICAgIExlbmd0aCBtX2xlbmd0aDsKK307CisKK2lubGluZSBDYWxjRXhwcmVzc2lvbkxlbmd0
aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoIGxlbmd0aCkKKyAgICA6IENhbGNFeHByZXNz
aW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGgpCisgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Np
b25MZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBiKQoreworICAgIHJldHVy
biBhLmxlbmd0aCgpID09IGIubGVuZ3RoKCk7Cit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTGVuZ3RoLCB0eXBlKCkgPT0g
V2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24u
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25OZWdhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6ZXZhbHVhdGUoZmxv
YXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIC1tX2NoaWxkLT5ldmFsdWF0ZShtYXhW
YWx1ZSk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6b3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxDYWxj
RXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJl
c3Npb25OZWdhdGlvbj4ob3RoZXIpOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uTmVnYXRpb246
OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgIi0oIiA8PCAqbV9jaGls
ZCA8PCAiKSI7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiBiKQoreworICAgIHJldHVybiAq
YS5jaGlsZCgpID09ICpiLmNoaWxkKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgPG1l
bW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgQ2Fs
Y0V4cHJlc3Npb25OZWdhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYm
IG5vZGUpCisgICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5
cGU6Ok5lZ2F0aW9uKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2NoaWxkKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFs
OworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOworfTsKKworYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENhbGNFeHByZXNzaW9uTmVnYXRpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uJik7CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9O
T0RFKENhbGNFeHByZXNzaW9uTmVnYXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVz
c2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHByZXNzaW9u
Tm9kZSkKK3sKKyAgICBleHByZXNzaW9uTm9kZS5kdW1wKHRzKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25O
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGNFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
IDogdWludDhfdCB7CisgICAgVW5kZWZpbmVkLAorICAgIE51bWJlciwKKyAgICBMZW5ndGgsCisg
ICAgT3BlcmF0aW9uLAorICAgIE5lZ2F0aW9uLAorICAgIEludmVyc2lvbiwKKyAgICBCbGVuZExl
bmd0aCwKK307CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTm9kZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25Ob2RlKENh
bGNFeHByZXNzaW9uTm9kZVR5cGUgPSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpVbmRlZmluZWQp
OworICAgIHZpcnR1YWwgfkNhbGNFeHByZXNzaW9uTm9kZSgpID0gZGVmYXVsdDsKKworICAgIENh
bGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisg
ICAgdmlydHVhbCBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgPSAwOworCitw
cml2YXRlOgorICAgIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgbV90eXBlOworfTsKKworaW5saW5l
IENhbGNFeHByZXNzaW9uTm9kZTo6Q2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9k
ZVR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKTsKKworfQorCisj
ZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShUb1ZhbHVl
VHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKSB7IHJldHVybiBub2RlLnByZWRpY2F0ZTsg
fSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVyLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVt
YmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTnVtYmVyLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ZmxvYXQgQ2FsY0V4cHJlc3Npb25OdW1iZXI6OmV2YWx1YXRlKGZsb2F0KSBjb25zdAoreworICAg
IHJldHVybiBtX3ZhbHVlOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uTnVtYmVyOjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJl
clJlc3BlY3RpbmdJbnRlZ2VycyhtX3ZhbHVlKTsKK30KKworYm9vbCBDYWxjRXhwcmVzc2lvbk51
bWJlcjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAor
eworICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3RoZXIpICYmICp0aGlzID09
IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihvdGhlcik7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTnVtYmVyIGZpbmFsIDog
cHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ2FsY0V4
cHJlc3Npb25OdW1iZXIoZmxvYXQpOworCisgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBj
b25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisg
ICAgZmxvYXQgbV92YWx1ZTsKK307CisKK2lubGluZSBDYWxjRXhwcmVzc2lvbk51bWJlcjo6Q2Fs
Y0V4cHJlc3Npb25OdW1iZXIoZmxvYXQgdmFsdWUpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUo
Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYg
YSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OdW1iZXImIGIpCit7CisgICAgcmV0dXJuIGEudmFsdWUo
KSA9PSBiLnZhbHVlKCk7Cit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQ
UkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTnVtYmVyLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24u
aCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX29wZXJhdG9yKSB7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkFkZDogeworICAgICAgICBmbG9hdCBzdW0gPSAwOworICAgICAgICBmb3IgKGF1
dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgICAgIHN1bSArPSBjaGlsZC0+ZXZhbHVh
dGUobWF4VmFsdWUpOworICAgICAgICByZXR1cm4gc3VtOworICAgIH0KKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6U3VidHJhY3Q6IHsKKyAgICAgICAgLy8gRklYTUUKKyAgICAgICAgQVNTRVJUKG1f
Y2hpbGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICBmbG9hdCBsZWZ0ID0gbV9jaGlsZHJlblsw
XS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmbG9hdCByaWdodCA9IG1fY2hpbGRyZW5b
MV0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGxlZnQgLSByaWdodDsKKyAg
ICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAgIGZsb2F0IHBy
b2R1Y3QgPSAxOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAg
ICAgICAgIHByb2R1Y3QgKj0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHByb2R1Y3Q7CisgICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKKyAg
ICAgICAgLy8gRklYTUUKKyAgICAgICAgQVNTRVJUKG1fY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwg
bV9jaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9
PSAxKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWll
dF9OYU4oKTsKKyAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1h
eFZhbHVlKTsKKyAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZSht
YXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7CisgICAgfQorICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpNaW46IHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKKyAgICAgICAgZmxvYXQgbWluaW11bSA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZh
bHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAg
ICBtaW5pbXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKSk7
CisgICAgICAgIHJldHVybiBtaW5pbXVtOworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6
TWF4OiB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGZs
b2F0IG1heGltdW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAg
IGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICAgICAgbWF4aW11bSA9IHN0
ZDo6bWF4KG1heGltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkpOworICAgICAgICByZXR1
cm4gbWF4aW11bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7CisgICAg
ICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSAhPSAzKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKworICAgICAgICBmbG9hdCBtaW4g
PSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZsb2F0IHZhbHVl
ID0gbV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmbG9hdCBtYXgg
PSBtX2NoaWxkcmVuWzJdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6
Om1heChtaW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKKyAgICB9CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
cXVpZXRfTmFOKCk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246Om9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
aXM8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpOworfQorCitib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0
aW9uJiBiKQoreworICAgIGlmIChhLmdldE9wZXJhdG9yKCkgIT0gYi5nZXRPcGVyYXRvcigpIHx8
IGEuZGVzdGluYXRpb25DYXRlZ29yeSgpICE9IGIuZGVzdGluYXRpb25DYXRlZ29yeSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuY2hpbGRyZW4oKS5zaXplKCkgIT0gYi5jaGls
ZHJlbigpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhLmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCEoKmEu
Y2hpbGRyZW4oKVtpXSA9PSAqYi5jaGlsZHJlbigpW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FsY0V4cHJlc3Npb25P
cGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgaWYgKG1fb3BlcmF0
b3IgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1h
eCkgeworICAgICAgICB0cyA8PCBtX29wZXJhdG9yIDw8ICIoIjsKKyAgICAgICAgc2l6ZV90IGNo
aWxkcmVuQ291bnQgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbkNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHRzIDw8IG1fY2hpbGRy
ZW5baV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoaSA8IGNoaWxkcmVuQ291bnQgLSAxKQorICAg
ICAgICAgICAgICAgIHRzIDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgdHMgPDwgIikiOwor
ICAgIH0gZWxzZQorICAgICAgICB0cyA8PCBtX2NoaWxkcmVuWzBdLmdldCgpIDw8ICIgIiA8PCBt
X29wZXJhdG9yIDw8ICIgIiA8PCBtX2NoaWxkcmVuWzFdLmdldCgpOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5v
ZGUuaCIKKyNpbmNsdWRlICJDYWxjT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNh
dGVnb3J5LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiBmaW5h
bCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4m
JiBjaGlsZHJlbiwgQ2FsY09wZXJhdG9yLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9u
Q2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7CisKKyAgICBDYWxjT3BlcmF0
b3IgZ2V0T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yOyB9CisgICAgQ2FsY3Vs
YXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbkNhdGVnb3J5OyB9CisKKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IG1fY2hpbGRyZW47
CisgICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBt
X2Rlc3RpbmF0aW9uQ2F0ZWdvcnkgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9OworfTsK
KworCitpbmxpbmUgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246OkNhbGNFeHByZXNzaW9uT3BlcmF0
aW9uKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJl
biwgQ2FsY09wZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdv
cnkpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3Bl
cmF0aW9uKQorICAgICwgbV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKKyAgICAsIG1fb3Bl
cmF0b3Iob3ApCisgICAgLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkoZGVzdGluYXRpb25DYXRlZ29y
eSkKK3sKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
JiwgY29uc3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mKTsKKworfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24sIHR5
cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNPcGVyYXRvci5oIgorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2gg
KG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogdHMgPDwgIisiOyBicmVhazsKKyAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHRzIDw8ICItIjsgYnJlYWs7CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB0cyA8PCAiKiI7IGJyZWFrOworICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpEaXZpZGU6IHRzIDw8ICIvIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok1pbjogdHMgPDwgIm1pbiI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6
IHRzIDw8ICJtYXgiOyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHRzIDw8
ICJjbGFtcCI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRG9uJ3Qg
Y2hhbmdlIHRoZXNlIHZhbHVlczsgcGFyc2luZyB1c2VzIHRoZW0uCitlbnVtIGNsYXNzIENhbGNP
cGVyYXRvciA6IHVpbnQ4X3QgeworICAgIEFkZCA9ICcrJywKKyAgICBTdWJ0cmFjdCA9ICctJywK
KyAgICBNdWx0aXBseSA9ICcqJywKKyAgICBEaXZpZGUgPSAnLycsCisgICAgTWluID0gMCwKKyAg
ICBNYXgsCisgICAgQ2xhbXAsCit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBDYWxjT3BlcmF0b3IpOworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQor
eworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlcjogdHMgPDwgIm51bWJlciI7IGJyZWFrOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TGVuZ3RoOiB0cyA8PCAibGVuZ3RoIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50OiB0cyA8PCAicGVyY2VudCI7IGJyZWFrOworICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjogdHMgPDwgInBlcmNlbnQtbnVtYmVyIjsg
YnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOiB0cyA8
PCAicGVyY2VudC1sZW5ndGgiOyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OkFuZ2xlOiB0cyA8PCAiYW5nbGUiOyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlRpbWU6IHRzIDw8ICJ0aW1lIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpGcmVxdWVuY3k6IHRzIDw8ICJmcmVxdWVuY3kiOyBicmVhazsKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOiB0cyA8PCAib3RoZXIiOyBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY3VsYXRpb25DYXRlZ29yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IEZpbmQg
YSB3YXkgdG8gdW5pZnkgdGhpcyB3aXRoIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0ZWdvcnk/
CitlbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1aW50OF90IHsKKyAgICBOdW1iZXIs
CisgICAgTGVuZ3RoLAorICAgIFBlcmNlbnQsCisgICAgUGVyY2VudE51bWJlciwKKyAgICBQZXJj
ZW50TGVuZ3RoLAorICAgIEFuZ2xlLAorICAgIFRpbWUsCisgICAgRnJlcXVlbmN5LAorICAgIE90
aGVyCit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBDYWxjdWxhdGlv
bkNhdGVnb3J5KTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxj
dWxhdGlvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGN1bGF0aW9uVmFsdWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5o
IgorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSA8bGltaXRzPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHZhbHVlLCBWYWx1ZVJhbmdlIHJhbmdlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbGN1bGF0aW9uVmFsdWUoV1RGTW92ZSh2YWx1ZSks
IHJhbmdlKSk7Cit9CisKK0NhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0aW9uVmFsdWUoc3RkOjp1
bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lvbiwgVmFsdWVSYW5nZSByYW5n
ZSkKKyAgICA6IG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQorICAgICwgbV9zaG91
bGRDbGFtcFRvTm9uTmVnYXRpdmUocmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpCit7
Cit9CisKK0NhbGN1bGF0aW9uVmFsdWU6On5DYWxjdWxhdGlvblZhbHVlKCkgPSBkZWZhdWx0Owor
CitmbG9hdCBDYWxjdWxhdGlvblZhbHVlOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QK
K3sKKyAgICBmbG9hdCByZXN1bHQgPSBtX2V4cHJlc3Npb24tPmV2YWx1YXRlKG1heFZhbHVlKTsK
KyAgICAvLyBGSVhNRTogVGhpcyB0ZXN0IHdhcyBvcmlnaW5hbGx5IG5lZWRlZCB3aGVuIHdlIGRp
ZCBub3QgZGV0ZWN0IGRpdmlzaW9uIGJ5IHplcm8gYXQgcGFyc2UgdGltZS4KKyAgICAvLyBJdCdz
IHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBub3cgdW5uZWVkZWQgY29kZSBhbmQgY2FuIGJlIHJlbW92
ZWQuCisgICAgaWYgKHN0ZDo6aXNuYW4ocmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYmIHJlc3VsdCA8IDAgPyAwIDogcmVz
dWx0OworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYSwgY29u
c3QgQ2FsY3VsYXRpb25WYWx1ZSYgYikKK3sKKyAgICByZXR1cm4gYS5leHByZXNzaW9uKCkgPT0g
Yi5leHByZXNzaW9uKCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiB0cyA8PCAi
Y2FsYygiIDw8IHZhbHVlLmV4cHJlc3Npb24oKSA8PCAiKSI7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25W
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25WYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY3VsYXRpb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlOworCitjbGFzcyBD
YWxjdWxhdGlvblZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FsY3VsYXRpb25WYWx1ZT4gewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4g
Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsK
KyAgICB+Q2FsY3VsYXRpb25WYWx1ZSgpOworCisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsgfQorICAgIGNvbnN0IENhbGNF
eHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX2V4cHJlc3Npb247
IH0KKworcHJpdmF0ZToKKyAgICBDYWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKKyAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlOworfTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGN1bGF0aW9uVmFsdWUm
LCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJik7CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyQ29udmVydGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250RmVhdHVyZVZh
bHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFN0eWxlVmFsdWUuaCIKQEAgLTQyLDYgKzQyLDggQEAK
ICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKKyNpbmNsdWRlICJD
YWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCg==
</data>
<flag name="commit-queue"
          id="451453"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430102</attachid>
            <date>2021-05-29 12:22:34 -0700</date>
            <delta_ts>2021-05-29 12:26:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226421-20210529122232.patch</filename>
            <type>text/plain</type>
            <size>327451</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAyMS0wNS0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQg
ZmlsZXMgaW50byBwcm9wZXIgMS1jbGFzcyBwZXIgZmlsZSBzdHJ1Y3R1cmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0J3MgYm90aGVyZWQgbWUgZm9y
IGEgd2hpbGUgdGhhdCB0aGUgY2FsYyByZWxhdGVkIGNsYXNzZXMgKGJvdGggaW4gY3NzLworICAg
ICAgICBhbmQgaW4gcGxhdGZvcm0vKSB3ZXJlIGJ1bmRsZWQgYWxsIGluIHR3byBiaWcgZmlsZXMu
IFRoaXMgY2hhbmdlIHNwbGl0cworICAgICAgICB0aGVtIGFsbCBvdXQgaW50byB0aGVpciBvd24g
aGVhZGVyIGFuZCBpbXBsZW1lbnRhdGlvbiBmaWxlcyB0aGF0IG1hdGNoCisgICAgICAgIHRoZWly
IG5hbWUsIGFuZCBwdXRzIHRoZW0gaW4gbmV3IGNhbGMvIHN1YmRpcmVjdG9yaWVzIChjc3MvY2Fs
Yy8uLi4gYW5kCisgICAgICAgIHBsYXRmb3JtL2NhbGMvLi4uKS4gVGhpcyBzaG91bGQgaG9wZWZ1
bGx5IG1ha2UgdGhlIG1vZGlmaWNhdGlvbnMgSSBuZWVkCisgICAgICAgIHRvIG1ha2UgdG8gY2Fs
YygpIHRvIHN1cHBvcnQgcmVsYXRpdmUgY29sb3Igc3ludGF4IGEgbGl0dGxlIGVhc2llci4KKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmNwcDoKKyAg
ICAgICAgKiBjc3MvY2FsYzogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0NhdGVn
b3J5TWFwcGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FsY1VuaXRDYXRlZ29y
eSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVn
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0RvdWJsZVZhbHVlKToKKyAgICAgICAgKiBjc3Mv
Y2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9jYWxj
L0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV0dHlQcmludE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6cHJldHR5UHJpbnROb2Rlcyk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjplcXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjpjYXRlZ29yeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZSk6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6Om9wZXJhdG9yVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tEZXB0aEFuZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9k
dWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VDYWxjU3VtKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcik6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0ludmVydE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNJbnZl
cnROb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0ludmVydE5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjSW52ZXJ0Tm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY0ludmVydE5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05l
Z2F0ZU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNOZWdhdGVOb2Rl
OjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
TmVnYXRlTm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0
ZU5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZUNhdGVnb3J5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhdGVnb3J5Rm9ySW52ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjppc1NhbWVQYWly
KToKKyAgICAgICAgKFdlYkNvcmU6OnNvcnRpbmdDYXRlZ29yeUZvclR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6c29ydGluZ0NhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OnByaW1pdGl2ZVR5
cGVGb3JDb21iaW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJzaW9uVG9BZGRWYWx1
ZXNXaXRoVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZnVuY3Rpb25Gcm9tT3BlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3Bl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNhbkNvbWJp
bmVBbGxDaGlsZHJlbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y29tYmluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRp
b25Ob2RlOjpzaW1wbGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6c2ltcGxpZnlSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlv
bk5vZGU6OnNpbXBsaWZ5Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6cHJpbWl0aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVy
YXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHRSZWN1cnNpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmVxdWFscyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcik6
CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaDogQWRkZWQuCisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmN1c3RvbUNTU1RleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6cHJpbWl0
aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTnVtZXJpY1ZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmludmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjphZGQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29udmVydFRvVW5pdFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y2Fub25pY2FsaXplVW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVD
YWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjpkb3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzWmVy
byBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpl
cXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsZW5kSGFsZik6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDU1MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpDU1NDYWxjVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjYXRlZ29yeSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OnByaW1pdGl2ZVR5cGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIGNz
cy9jYWxjL0NTU0NhbGNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25W
YWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vY2FsYzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZHVtcCBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbkxlbmd0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHBy
ZXNzaW9uTGVuZ3RoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNF
eHByZXNzaW9uTGVuZ3RoOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uTGVuZ3RoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6
ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlv
bjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGU6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2Rl
OjpDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25OdW1iZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk51bWJlcjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk51
bWJlcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpDYWxjRXhwcmVzc2lvbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZh
bHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpDYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2Nh
bGMvQ2FsY09wZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYWxjdWxhdGlvblZhbHVlOjpzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXhwcmVzc2lvbiBjb25zdCk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisKIDIwMjEtMDUtMjkgIEFsYW4g
QnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gRG8gbm90IGlu
Y2x1ZGUgdmVydGljYWwgc3BhY2luZyB3aGVuIHJlc29sdmluZyBwZXJjZW50IGhlaWdodCBmb3Ig
dGFibGUgY29udGVudApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyAr
MzQxLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgY3J5
cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgKIAotICAgIGNzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmgKICAgICBjc3MvQ1NTQ29uZGl0aW9uUnVsZS5oCiAgICAgY3NzL0NTU0N1c3RvbVByb3Bl
cnR5VmFsdWUuaAogICAgIGNzcy9DU1NGb250RmFjZVJ1bGUuaApAQCAtMzg5LDYgKzM4OCw4IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBjc3MvU3R5bGVTaGVl
dENvbnRlbnRzLmgKICAgICBjc3MvU3R5bGVTaGVldExpc3QuaAogCisgICAgY3NzL2NhbGMvQ1NT
Q2FsY1ZhbHVlLmgKKwogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKICAgICBjc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaAogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCkBAIC0x
MDAzLDcgKzEwMDQsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9BYm9ydGFibGVUYXNrUXVldWUuaAogICAgIHBsYXRmb3JtL0NQVU1vbml0
b3IuaAotICAgIHBsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAogICAgIHBsYXRmb3JtL0NvbG9y
Q2hvb3Nlci5oCiAgICAgcGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xpZW50LmgKICAgICBwbGF0Zm9y
bS9Db250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIuaApAQCAtMTE1Niw2ICsxMTU2LDggQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAogCisgICAgcGxhdGZvcm0vY2Fs
Yy9DYWxjdWxhdGlvblZhbHVlLmgKKwogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUVu
Y3J5cHRpb25TY2hlbWUuaAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUZhY3Rvcnku
aAogICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUluc3RhbmNlLmgKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJj
ZXMudHh0CShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNzE4LDcgKzcxOCw2IEBAIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVl
LmNwcAogY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAogY3NzL0NTU0JvcmRlckltYWdlLmNwcAogY3Nz
L0NTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5jcHAKLWNzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNw
cAogY3NzL0NTU0NhbnZhc1ZhbHVlLmNwcAogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5jcHAKIGNzcy9DU1NDb25kaXRpb25SdWxlLmNwcApAQCAtODI1LDYgKzgyNCwxNCBAQCBjc3Mv
U3R5bGVTaGVldC5jcHAKIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCiBjc3MvU3R5bGVTaGVl
dExpc3QuY3BwCiBjc3MvVHJhbnNmb3JtRnVuY3Rpb25zLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0Nh
dGVnb3J5TWFwcGluZy5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKK2Nz
cy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNJ
bnZlcnROb2RlLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCitjc3MvY2FsYy9D
U1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUuY3BwCitjc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCiBjc3MvcGFyc2VyL0NTU0F0UnVsZUlE
LmNwcAogY3NzL3BhcnNlci9DU1NEZWZlcnJlZFBhcnNlci5jcHAKIGNzcy9wYXJzZXIvQ1NTUGFy
c2VyLmNwcApAQCAtMTgxNCw3ICsxODIxLDYgQEAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJl
ZU92ZXJmbG93U2NybwogcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUu
Y3BwCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNw
cAogcGFnZS9zY3JvbGxpbmcvVGhyZWFkZWRTY3JvbGxpbmdUcmVlLmNwcAotcGxhdGZvcm0vQ2Fs
Y3VsYXRpb25WYWx1ZS5jcHAKIHBsYXRmb3JtL0NvbnRlbnRUeXBlLmNwcAogcGxhdGZvcm0vQ29u
dGV4dE1lbnUuY3BwCiBwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0uY3BwCkBAIC0xOTI4LDYgKzE5
MzQsMTYgQEAgcGxhdGZvcm0vYXVkaW8vU3RlcmVvUGFubmVyLmNwcAogcGxhdGZvcm0vYXVkaW8v
VXBTYW1wbGVyLmNwcAogcGxhdGZvcm0vYXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1
ZGlvL1plcm9Qb2xlLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
LmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAKK3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTmVnYXRpb24uY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKK3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uT3BlcmF0aW9uLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwCitw
bGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGN1
bGF0aW9uVmFsdWUuY3BwCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAog
cGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNTG9nZ2luZy5jcHAKIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETVByaXZhdGUuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkK
QEAgLTEzNTQsNyArMTM1NCw3IEBACiAJCTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0
Zm9ybUNBTGF5ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5OUIzRUMzMTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OTlCM0VENzEyOENE
MzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTlCM0VENTEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhp
Y3NMYXllckNBLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNDk5QjNFREQxMjhEQjUwMjAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OUIzRURDMTI4
REI1MDEwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5MjBB
IC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlv
blZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlBRTJEOEQxMzRFRTUwQzAwNzI5
MjBBIC8qIENTU0NhbGNWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTQ5QUUyRDk3MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFF
MkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5QUYyRDY5MTQ0MzVEMDUwMDE2
QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5
UmVmcmVzaE1vbml0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk0OUM3Qjk5NDEwNDJEMkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODExMDQy
RDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCAqLzsgfTsKQEAgLTQxOTAsNiArNDE5MCwy
MiBAQAogCQlCQ0VGNDVGNjBFNjg3QjVDMDAxQzEyODcgLyogSlNUZXh0TWV0cmljcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRjQ1RjQwRTY4N0I1
QzAwMUMxMjg3IC8qIEpTVGV4dE1ldHJpY3MuaCAqLzsgfTsKIAkJQkNFRjg2OUYwRTg0NEU5RDAw
QTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRjg2OUUwRTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJh
clRoZW1lTWFjLm1tICovOyB9OwogCQlCQ0VGRTFFQjBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xU
UHJvY2Vzc29yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0VGRTFFOTBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vzc29yLmggKi87IH07CisJ
CUJDRjE2NDUxMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDRGMjY2MjlG
QzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NTUy
NjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDUzMjY2MkExMjIwMDAy
RjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmggKi87IH07CisJCUJDRjE2NDU5MjY2
MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NTcyNjYyQTFFOTAwMDJGN0VGIC8qIENT
U0NhbGNOZWdhdGVOb2RlLmggKi87IH07CisJCUJDRjE2NDVEMjY2MkEyMzcwMDAyRjdFRiAvKiBD
U1NDYWxjSW52ZXJ0Tm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkNGMTY0NUIyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmgg
Ki87IH07CisJCUJDRjE2NDYxMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9k
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0
NUYyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmggKi87IH07CisJCUJD
RjE2NDY1MjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDYzMjY2
MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCAqLzsgfTsKKwkJ
QkNGMTY0NkEyNjYyQTkzNDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDY4MjY2MkE5
MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmggKi87IH07CisJCUJDRjE2NDZF
MjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ2RDI2NjJBQTUwMDAwMkY3RUYg
LyogQ2FsY3VsYXRpb25DYXRlZ29yeS5oICovOyB9OworCQlCQ0YxNjQ3MjI2NjJBQUMzMDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ3MDI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25Ob2RlLmggKi87IH07CisJCUJDRjE2NDc2MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVz
c2lvbk51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGMTY0NzQyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmggKi87
IH07CisJCUJDRjE2NDdBMjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0Nzgy
NjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmggKi87IH07CisJCUJDRjE2
NDdFMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ3QzI2NjJBQkU3MDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oICovOyB9OworCQlCQ0YxNjQ4MjI2NjJB
QzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDgwMjY2MkFDNTEwMDAyRjdFRiAv
KiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oICovOyB9OworCQlCQ0YxNjQ4NjI2NjJBQ0EzMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDg0MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbk9wZXJhdGlvbi5oICovOyB9OworCQlCQ0YxNjQ4QTI2NjJBRDUyMDAwMkY3RUYg
LyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0ODgyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGguaCAqLzsgfTsKKwkJQkNGMTY0OEUyNjYyQUREODAwMDJGN0VGIC8q
IENhbGNPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGMTY0OEMyNjYyQUREODAwMDJGN0VGIC8qIENhbGNPcGVyYXRvci5oICovOyB9Owog
CQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGNDhDRTYxMzcwRDEx
NDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ZBOTMwODEwMzMzMTkzMDA3QjI1RDEgLyog
UmVuZGVyT3ZlcmZsb3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRkE5MzA3MTAzMzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkIyRTVFMDk3
OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQjJFNUQwOTc5RTQ2NDAwQkE3MDNEIC8q
IENhY2hlZFJlc291cmNlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKQEAgLTg0NDMsOCArODQ1OSw4IEBACiAJCTQ5OUIzRUQ0MTI4Q0QzMTQw
MEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gR3JhcGhpY3NMYXllckNBLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNDk5QjNFRDUxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVyQ0EuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk5QjNFREMxMjhEQjUwMTAwRTcyNkMyIC8qIFBsYXRmb3Jt
Q0FBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxhdGZvcm1D
QUFuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUFFMkQ4QzEzNEVF
NTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0
aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUFFMkQ4QzEzNEVFNTBD
MDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENTU0NhbGNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGN1bGF0aW9uVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUFFMkQ5NTEzNEVFNUY5MDA3Mjky
MEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxjdWxhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QUYy
RDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25pdG9yLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUyMSw2ICsxNDUzNywzOCBAQAogCQlCQ0VGRTFEQzBE
Q0E1Q0ZEMDA3MzkyMTkgLyogWFNMVFByb2Nlc3Nvci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRo
ID0gWFNMVFByb2Nlc3Nvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUZF
MUU4MERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYU0xUUHJvY2Vzc29yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJQkNFRkUxRTkwRENBNUY2NDAwNzM5MjE5IC8qIEpTWFNMVFByb2Nl
c3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1hTTFRQcm9jZXNzb3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NEYyNjYyOUZDNzAwMDJGN0VG
IC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTAyNjYyOUZD
NzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0YxNjQ1MzI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDU0MjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1NzI2NjJB
MUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2Fs
Y05lZ2F0ZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTgyNjYy
QTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENTU0NhbGNOZWdhdGVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNG
MTY0NUIyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0NhbGNJbnZlcnROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDVDMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRjE2NDVGMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ2MDI2NjJBMjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlv
bk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2MzI2NjJBMzFBMDAwMkY3RUYgLyog
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2
NDI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDY4MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxj
Q2F0ZWdvcnlNYXBwaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNDYXRlZ29yeU1hcHBpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjkyNjYyQTkzNDAwMDJGN0VG
IC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2Fs
Y0NhdGVnb3J5TWFwcGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2
NDZEMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGN1bGF0aW9uQ2F0ZWdvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkNGMTY0NkYyNjYyQUE2RjAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRjE2NDcwMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDRjE2NDcxMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzQyNjYyQUIzNjAwMDJGN0VGIC8qIENh
bGNFeHByZXNzaW9uTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uTnVtYmVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDc1MjY2MkFCMzYwMDAyRjdF
RiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjRXhw
cmVzc2lvbk51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDc4
MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxjRXhwcmVzc2lvbkxlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0YxNjQ3OTI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ3QzI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25O
ZWdhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDdEMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbk5lZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9u
TmVnYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4MDI2NjJB
QzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkNGMTY0ODEyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODQyNjYyQUNBMzAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDg1MjY2MkFDQTMwMDAyRjdF
RiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxj
RXhwcmVzc2lvbk9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDg4MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODkyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDhDMjY2MkFERDgw
MDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY09wZXJhdG9yLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDhEMjY2MkFERDgwMDAyRjdFRiAv
KiBDYWxjT3BlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY09wZXJhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMzRBMzYxMUEyMzFDRDAwQzcxODA0IC8q
IE5hbWVkTm9kZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBO
YW1lZE5vZGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0Y0OENFNjEz
NzBEMTE0MDA0RTg3RDYgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBZGp1c3RWaWV3U2l6ZU9yTm90Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRkE5MzA3MTAzMzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJPdmVyZmxvdy5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc4OTEsMTEgKzI3OTM5LDYyIEBACiAJCQluYW1l
ID0gQ29uc3RydWN0b3JzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsKKwkJQkNG
MTY0NEQyNjYyOUY5QTAwMDJGN0VGIC8qIGNhbGMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCUJDRjE2NDY5MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxj
Q2F0ZWdvcnlNYXBwaW5nLmNwcCAqLywKKwkJCQlCQ0YxNjQ2ODI2NjJBOTM0MDAwMkY3RUYgLyog
Q1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oICovLAorCQkJCUJDRjE2NDUwMjY2MjlGQzcwMDAyRjdF
RiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwICovLAorCQkJCUJDRjE2NDRGMjY2MjlGQzcw
MDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLywKKwkJCQlCQ0YxNjQ2NDI2NjJB
MzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcCAqLywKKwkJCQlC
Q0YxNjQ2MzI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgg
Ki8sCisJCQkJQkNGMTY0NUMyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmNw
cCAqLywKKwkJCQlCQ0YxNjQ1QjI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUu
aCAqLywKKwkJCQlCQ0YxNjQ1ODI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUu
Y3BwICovLAorCQkJCUJDRjE2NDU3MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9k
ZS5oICovLAorCQkJCUJDRjE2NDYwMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9u
Tm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NUYyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVy
YXRpb25Ob2RlLmggKi8sCisJCQkJQkNGMTY0NTQyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGUuY3BwICovLAorCQkJCUJDRjE2NDUzMjY2MkExMjIwMDAyRjdFRiAv
KiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmggKi8sCisJCQkJNDlBRTJEOEMxMzRFRTUwQzAw
NzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5jcHAgKi8sCisJCQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5
MjBBIC8qIENTU0NhbGNWYWx1ZS5oICovLAorCQkJKTsKKwkJCXBhdGggPSBjYWxjOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQkNGMTY0NkMyNjYyQUEwQTAwMDJGN0VGIC8q
IGNhbGMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUJD
RjE2NDg5MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcCAq
LywKKwkJCQlCQ0YxNjQ4ODI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aC5oICovLAorCQkJCUJDRjE2NDgxMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bkludmVyc2lvbi5jcHAgKi8sCisJCQkJQkNGMTY0ODAyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uLmggKi8sCisJCQkJQkNGMTY0NzkyNjYyQUI4NTAwMDJGN0VGIC8q
IENhbGNFeHByZXNzaW9uTGVuZ3RoLmNwcCAqLywKKwkJCQlCQ0YxNjQ3ODI2NjJBQjg1MDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguaCAqLywKKwkJCQlCQ0YxNjQ3RDI2NjJBQkU3MDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAgKi8sCisJCQkJQkNGMTY0N0MyNjYy
QUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAqLywKKwkJCQlCQ0YxNjQ3
MTI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAqLywKKwkJCQlCQ0Yx
NjQ3MDI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggKi8sCisJCQkJQkNG
MTY0NzUyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmNwcCAqLywKKwkJ
CQlCQ0YxNjQ3NDI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCAqLywK
KwkJCQlCQ0YxNjQ4NTI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24u
Y3BwICovLAorCQkJCUJDRjE2NDg0MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbi5oICovLAorCQkJCUJDRjE2NDhEMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0
b3IuY3BwICovLAorCQkJCUJDRjE2NDhDMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3Iu
aCAqLywKKwkJCQlCQ0YxNjQ2RjI2NjJBQTZGMDAwMkY3RUYgLyogQ2FsY3VsYXRpb25DYXRlZ29y
eS5jcHAgKi8sCisJCQkJQkNGMTY0NkQyNjYyQUE1MDAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0
ZWdvcnkuaCAqLywKKwkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25W
YWx1ZS5jcHAgKi8sCisJCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9u
VmFsdWUuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gY2FsYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CiAJCUJDRjFBNUJBMDk3ODMyMDkwMDYxQTEyMyAvKiBwbGF0Zm9ybSAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNDlFOTEyQTQwRUZB
QzhFNjAwOUQwQ0FGIC8qIGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0MDEyQjAyNkEzMDBDMUEz
NTkgLyogYXVkaW8gKi8sCisJCQkJQkNGMTY0NkMyNjYyQUEwQTAwMDJGN0VGIC8qIGNhbGMgKi8s
CiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8qIGNmICovLAogCQkJCUE1Qzk3NENFMTE0
ODVGREEwMDY2RjJBQiAvKiBjb2NvYSAqLywKIAkJCQlDRDk0QTVDQjFGNzFDQjQ2MDBGNTI1QzUg
LyogZW5jcnlwdGVkbWVkaWEgKi8sCkBAIC0yNzkxMiw4ICsyODAxMSw2IEBACiAJCQkJQjJDM0Q5
RUMwRDAwNkMxRDAwRUY2RjI2IC8qIHRleHQgKi8sCiAJCQkJRTFFRThCNkIyNDEyQjJBNzAwRTc5
NEQ2IC8qIHhyICovLAogCQkJCURGREI5MTJDRjhFODhBNkRBMUFEMjY0RiAvKiBBYm9ydGFibGVU
YXNrUXVldWUuaCAqLywKLQkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRp
b25WYWx1ZS5jcHAgKi8sCi0JCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0
aW9uVmFsdWUuaCAqLywKIAkJCQlDMzMwQTIyMTEzRUMxOTZCMDAwMEI0NUIgLyogQ29sb3JDaG9v
c2VyLmggKi8sCiAJCQkJQzM3Q0RFQkMxNDlFRjIwMzAwNDIwOTBEIC8qIENvbG9yQ2hvb3NlckNs
aWVudC5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAvKiBDb2xvckRhdGEuZ3Bl
cmYgKi8sCkBAIC0yOTcwNyw2ICsyOTgwNCw3IEBACiAJCUY1MjNEMTg0MDJERTQyRTgwMTg2MzVD
QSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJ
CUJDRjE2NDREMjY2MjlGOUEwMDAyRjdFRiAvKiBjYWxjICovLAogCQkJCTk0NkQzNzI3MUQ2Q0Iy
MjUwMDc3MDg0RiAvKiBwYXJzZXIgKi8sCiAJCQkJNEJBRkQwREEyMTkyMUVBRDAwQzBBQjY0IC8q
IHR5cGVkb20gKi8sCiAJCQkJRkJENkFGODQxNUVGMjFENDAwOEI3MTEwIC8qIEJhc2ljU2hhcGVG
dW5jdGlvbnMuY3BwICovLApAQCAtMjk3MjAsOCArMjk4MTgsNiBAQAogCQkJCUUxNkE4NEY4MTRD
ODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5oICovLAogCQkJCUJDMjc0QjMwMTQwRUJF
RDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3BwICovLAogCQkJCUJDMjc0
QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCAqLywKLQkJ
CQk0OUFFMkQ4QzEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8s
Ci0JCQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCAq
LywKIAkJCQlCQzYwNEE0MjBEQjU2MzRFMDAyMDQ3MzkgLyogQ1NTQ2FudmFzVmFsdWUuY3BwICov
LAogCQkJCUJDNjA0OUNCMERCNTYwQzIwMDIwNDczOSAvKiBDU1NDYW52YXNWYWx1ZS5oICovLAog
CQkJCUJDRUE0NzdDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRp
b24uY3BwICovLApAQCAtMzE4MTEsNiArMzE5MDcsMTUgQEAKIAkJCQk0MUQxMjlEMzFGM0QwRjE2
MDBEMTVFNDcgLyogQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDFEMTI5RDUxRjNEMEY2OTAwRDE1RTQ3IC8qIENhY2hlU3RvcmFnZVByb3ZpZGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyogQ2FjaGVWYWxpZGF0aW9u
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ4QTI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0ODIyNjYyQUM1
MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQ0YxNjQ3QTI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDRjE2NDdFMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk5lZ2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3MjI2NjJBQUMzMDAwMkY3RUYg
LyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3NjI2NjJB
QjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDg2MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0OEUyNjYyQUREODAwMDJGN0VGIC8qIENhbGNPcGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NkUyNjYyQUE1MDAwMDJGN0VGIC8qIENhbGN1
bGF0aW9uQ2F0ZWdvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QUUyRDk3MTM0RUU1RjkwMDcy
OTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzFFOEQwMTFF
RDBDMkRBMDBCMUQ5ODMgLyogQ2FsbGJhY2tSZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUVG
Q0M2QzhGMjBGRTkxNDQwMEEyMzIxQiAvKiBDYW52YXNBY3Rpdml0eVJlY29yZC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMjA4MSw3ICszMjE4NiwxNCBAQAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhC
NzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE2QTg0RkExNEM4
NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRlckltYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzI3
NEIyRjE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NkEyNjYyQTkzNDAwMDJGN0VGIC8qIENT
U0NhbGNDYXRlZ29yeU1hcHBpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDUxMjY2MjlG
QzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDY1MjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDVEMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxj
SW52ZXJ0Tm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NTkyNjYyQTFFOTAwMDJGN0VG
IC8qIENTU0NhbGNOZWdhdGVOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ2MTI2NjJB
MjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDU1MjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1Zh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzYwNDlDQzBEQjU2MEMyMDAyMDQ3MzkgLyogQ1NT
Q2FudmFzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0NzkwMDk3Q0FBQzgwMDk0QzlF
NCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTkz
MEFBQzlBMjUwRUI4NDkwMDEzREE5RiAvKiBDU1NDb25kaXRpb25SdWxlLmggaW4gSGVhZGVycyAq
LywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHJl
dmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVl
LmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxOTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDE0LCAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0g
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJp
YnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgotCi0jaW5jbHVkZSAi
Q1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIgotI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KLQotc3RhdGljIGNvbnN0IGludCBtYXhFeHByZXNzaW9uRGVwdGggPSAxMDA7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU7Ci1j
bGFzcyBDU1NDYWxjT3BlcmF0aW9uTm9kZTsKLWNsYXNzIENTU0NhbGNOZWdhdGVOb2RlOwotY2xh
c3MgQ1NTQ2FsY0ludmVydE5vZGU7Ci19Ci0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FM
Q0VYUFJFU1NJT05fTk9ERShDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLCB0eXBlKCkgPT0gV2Vi
Q29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjUHJpbWl0aXZlVmFsdWUp
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5
cGU6OkNzc0NhbGNPcGVyYXRpb24pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBS
RVNTSU9OX05PREUoQ1NTQ2FsY05lZ2F0ZU5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxj
RXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNOZWdhdGUpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY0ludmVydE5vZGUsIHR5cGUoKSA9PSBX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNJbnZlcnQpCi0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IGNyZWF0ZUNTUyhjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmLCBjb25zdCBSZW5kZXJTdHlsZSYp
Owotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBM
ZW5ndGgmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwotCi1zdGF0aWMgVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQot
ewotICAgIG5vZGUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi1zdGF0aWMgQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYWxjVW5pdENhdGVnb3J5KENTU1VuaXRUeXBlIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKLSAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkg6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1ZNQVg6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgIHJldHVybiBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50OwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
R1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUzoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlRpbWU7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19LSFo6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpGcmVxdWVuY3k7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyOwotICAgIH0KLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2Fs
Y3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlIHR5cGUpCi17Ci0gICAg
c3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKLSAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19NTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Okxlbmd0aDsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAg
ICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJO
OgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgotICAgICAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKLSAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKLSAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Vkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1ZNQVg6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyOwotICAgIH0KLX0KLQotc3RhdGljIENTU1VuaXRUeXBlIGNhbm9uaWNhbFVu
aXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
KQotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcjogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOwotICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19QWDsKLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHJldHVybiBDU1NVbml0VHlwZTo6
Q1NTX1BFUkNFTlRBR0U7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTogcmV0
dXJuIENTU1VuaXRUeXBlOjpDU1NfREVHOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
VGltZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTVM7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpGcmVxdWVuY3k6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX0haOwotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExl
bmd0aDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwotfQotCi1zdGF0aWMgYm9v
bCBoYXNEb3VibGVWYWx1ZShDU1NVbml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkg
ewotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19UVVJOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0tIWjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRElNRU5TSU9OOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Vkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1ZNQVg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQUFg6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0RQSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFBDTToKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRlI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUkxIUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1VOS05PV046Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NUUklORzoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfRk9OVF9GQU1JTFk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1VS
SToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSURFTlQ6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0FUVFI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NPVU5URVI6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1JFQ1Q6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JHQkNP
TE9SOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQUlSOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19VTklDT0RFX1JBTkdFOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DT1VOVEVS
X05BTUU6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NIQVBFOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19RVUFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUlSS1lfRU1TOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19DQUxDX1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0NBTENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UFJPUEVSVFlfSUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZBTFVFX0lEOgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBDU1NWYWx1ZUlEIGZ1bmN0aW9uRnJvbU9wZXJhdG9y
KENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkFkZDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAgY2FzZSBD
YWxjT3BlcmF0b3I6Ok11bHRpcGx5OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0g
ICAgICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoK
LSAgICAgICAgcmV0dXJuIENTU1ZhbHVlTWluOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6
Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZU1heDsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xh
bXA6Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZUNsYW1wOwotICAgIH0KLSAgICByZXR1cm4gQ1NT
VmFsdWVDYWxjOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGljIFN0cmluZyBwcmV0dHlQ
cmludE5vZGUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQotewotICAgIFRleHRT
dHJlYW0gbXVsdGlsaW5lU3RyZWFtOwotICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlOwotICAg
IHJldHVybiBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOwotfQotCi1zdGF0aWMgU3RyaW5nIHBy
ZXR0eVByaW50Tm9kZXMoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYg
bm9kZXMpCi17Ci0gICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0gICAgbXVsdGlsaW5l
U3RyZWFtIDw8IG5vZGVzOwotICAgIHJldHVybiBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOwot
fQotI2VuZGlmCi0KLWNsYXNzIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUgZmluYWwgOiBwdWJs
aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IGNyZWF0
ZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCi0gICAgewotICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFdURk1vdmUodmFsdWUpKSk7
Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBj
cmVhdGUoZG91YmxlIHZhbHVlLCBDU1NVbml0VHlwZSB0eXBlKQotICAgIHsKLSAgICAgICAgaWYg
KCFzdGQ6OmlzZmluaXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSkpKTsKLSAgICB9Ci0KLSAgICBTdHJpbmcg
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZS0+Y3Nz
VGV4dCgpOwotICAgIH0KLQotICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBm
aW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAg
ICB9Ci0KLSAgICBib29sIGlzTnVtZXJpY1ZhbHVlKCkgY29uc3Q7Ci0gICAgYm9vbCBpc05lZ2F0
aXZlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG5lZ2F0ZSgpOwotICAgIHZvaWQgaW52ZXJ0KCk7Ci0K
LSAgICBlbnVtIGNsYXNzIFVuaXRDb252ZXJzaW9uIHsKLSAgICAgICAgSW52YWxpZCwKLSAgICAg
ICAgUHJlc2VydmUsCi0gICAgICAgIENhbm9uaWNhbGl6ZQotICAgIH07Ci0gICAgdm9pZCBhZGQo
Y29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSYsIFVuaXRDb252ZXJzaW9uID0gVW5pdENv
bnZlcnNpb246OlByZXNlcnZlKTsKLSAgICB2b2lkIG11bHRpcGx5KGRvdWJsZSk7Ci0KLSAgICB2
b2lkIGNvbnZlcnRUb1VuaXRUeXBlKENTU1VuaXRUeXBlKTsKLSAgICB2b2lkIGNhbm9uaWNhbGl6
ZVVuaXQoKTsKLQotICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBib29sIGlzWmVybygpIGNv
bnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gIW1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7
Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBv
dGhlcikgY29uc3QgZmluYWw7Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
Q3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBl
KSBjb25zdCBmaW5hbDsKLQotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY29sbGVjdERpcmVj
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0
IGZpbmFsOwotICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgZHVt
cChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0gICAgZXhwbGljaXQgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCi0g
ICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhbGNVbml0Q2F0ZWdvcnkodmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKSkpCi0gICAgICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKLSAgICB7
Ci0gICAgfQotCi0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3ZhbHVlOwotfTsKLQotLy8g
RklYTUU6IFVzZSBjYWxjVW5pdENhdGVnb3J5PwotYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjppc051bWVyaWNWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWUtPmlzTGVu
Z3RoKCkgfHwgbV92YWx1ZS0+aXNOdW1iZXIoKSB8fCBtX3ZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8
fCBtX3ZhbHVlLT5pc0FuZ2xlKCkKLSAgICAgICAgfHwgbV92YWx1ZS0+aXNUaW1lKCkgfHwgbV92
YWx1ZS0+aXNSZXNvbHV0aW9uKCkgfHwgbV92YWx1ZS0+aXNGbGV4KCkgfHwgbV92YWx1ZS0+aXNG
cmVxdWVuY3koKTsKLX0KLQotYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc05lZ2F0
aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNOdW1lcmljVmFsdWUoKSAmJiBtX3ZhbHVlLT5k
b3VibGVWYWx1ZSgpIDwgMC4wOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
Om5lZ2F0ZSgpCi17Ci0gICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVlKCkpOwotICAgIG1fdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuMCAtIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6aW52ZXJ0KCkKLXsKLSAgICBBU1NFUlQoaXNOdW1lcmljVmFsdWUoKSk7Ci0gICAg
aWYgKCFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpKQotICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSgxLjAgLyBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3ZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmFkZChj
b25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiBub2RlLCBVbml0Q29udmVyc2lvbiB1bml0
Q29udmVyc2lvbikKLXsKLSAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFsdWUtPnByaW1pdGl2ZVR5
cGUoKTsKLQotICAgIHN3aXRjaCAodW5pdENvbnZlcnNpb24pIHsKLSAgICBjYXNlIFVuaXRDb252
ZXJzaW9uOjpJbnZhbGlkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
YnJlYWs7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6UHJlc2VydmU6Ci0gICAgICAgIEFTU0VS
VChub2RlLnByaW1pdGl2ZVR5cGUoKSA9PSB2YWx1ZVR5cGUpOwotICAgICAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpICsgbm9kZS5k
b3VibGVWYWx1ZSh2YWx1ZVR5cGUpLCB2YWx1ZVR5cGUpOwotICAgICAgICBicmVhazsKLSAgICBj
YXNlIFVuaXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU6IHsKLSAgICAgICAgYXV0byB2YWx1ZUNh
dGVnb3J5ID0gdW5pdENhdGVnb3J5KHZhbHVlVHlwZSk7Ci0gICAgICAgIC8vIEZJWE1FOiBJdCdz
IGF3a3dhcmQgdGhhdCBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5KCkgaGFzIHNwZWNpYWwg
aGFuZGxpbmcgZm9yIENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudC4KLSAgICAgICAgYXV0byBjYW5v
bmljYWxUeXBlID0gdmFsdWVDYXRlZ29yeSA9PSBDU1NVbml0Q2F0ZWdvcnk6OlBlcmNlbnQgPyBD
U1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UgOiBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5
KHZhbHVlQ2F0ZWdvcnkpOwotICAgICAgICBBU1NFUlQoY2Fub25pY2FsVHlwZSAhPSBDU1NVbml0
VHlwZTo6Q1NTX1VOS05PV04pOwotICAgICAgICBkb3VibGUgbGVmdFZhbHVlID0gbV92YWx1ZS0+
ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7Ci0gICAgICAgIGRvdWJsZSByaWdodFZhbHVlID0g
bm9kZS5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKLSAgICAgICAgbV92YWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVmdFZhbHVlICsgcmlnaHRWYWx1ZSwgY2Fub25pY2FsVHlw
ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkoZG91YmxlIG11bHRpcGxpZXIpCi17Ci0gICAgYXV0byB2
YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgQVNTRVJUKGhhc0RvdWJs
ZVZhbHVlKHZhbHVlVHlwZSkpOwotICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKHZhbHVlVHlwZSkgKiBtdWx0aXBsaWVyLCB2YWx1ZVR5
cGUpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbnZlcnRUb1VuaXRU
eXBlKENTU1VuaXRUeXBlIHVuaXRUeXBlKQotewotICAgIEFTU0VSVCh1bml0Q2F0ZWdvcnkodW5p
dFR5cGUpID09IHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKTsKLSAgICBk
b3VibGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7Ci0gICAgbV92
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmV3VmFsdWUsIHVuaXRUeXBlKTsKLX0K
LQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmljYWxpemVVbml0KCkKLXsK
LSAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1f
dmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci0gICAgaWYgKGNhdGVnb3J5ID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok90aGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBhdXRvIGNhbm9uaWNhbFR5
cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOwot
ICAgIGlmIChjYW5vbmljYWxUeXBlID09IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgZG91YmxlIG5ld1ZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFsdWUo
Y2Fub25pY2FsVHlwZSk7Ci0gICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
bmV3VmFsdWUsIGNhbm9uaWNhbFR5cGUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lv
bihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QK
LXsKLSAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcjoKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OdW1i
ZXI+KG1fdmFsdWUtPmZsb2F0VmFsdWUoKSk7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGg6Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3Ro
PihMZW5ndGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpLCBM
ZW5ndGhUeXBlOjpGaXhlZCkpOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6IHsKLSAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG1fdmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uPihjb252
ZXJzaW9uRGF0YSkpOwotICAgIH0KLSAgICAvLyBPbmx5IHR5cGVzIHRoYXQgY291bGQgYmUgcGFy
dCBvZiBhIExlbmd0aCBleHByZXNzaW9uIGNhbiBiZSBjb252ZXJ0ZWQKLSAgICAvLyB0byBhIENh
bGNFeHByZXNzaW9uTm9kZS4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciBtYWtl
cyBubyBzZW5zZSBhcyBhIExlbmd0aC4KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKLSAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpGcmVxdWVuY3k6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Ci17Ci0gICAg
aWYgKGhhc0RvdWJsZVZhbHVlKHVuaXRUeXBlKSkgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgQVNTRVJUKHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpID09IHVu
aXRDYXRlZ29yeSh1bml0VHlwZSkpLCBidXQgb25seSB3aGVuIGFsbCBjYWxsZXJzIGFyZSBmaXhl
ZCAoZS5nLiB3ZWJraXQub3JnL2IvMjA0ODI2KS4KLSAgICAgICAgaWYgKHVuaXRDYXRlZ29yeSht
X3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpICE9IHVuaXRDYXRlZ29yeSh1bml0VHlwZSkpIHsKLSAg
ICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNhbGxpbmcgZG91Ymxl
VmFsdWUoKSB3aXRoIHVuaXQgIiA8PCB1bml0VHlwZSA8PCAiIG9uIGEgbm9kZSBvZiB1bml0IHR5
cGUgIiA8PCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPDwgIiB3aGljaCBpcyBpbmNvbXBhdGli
bGUiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJu
IG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Ci0gICAgICAgIHJldHVybiBtX3ZhbHVl
LT5jb21wdXRlTGVuZ3RoPGRvdWJsZT4oY29udmVyc2lvbkRhdGEpOwotICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlcjoKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7Ci0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi12b2lk
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVw
ZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBt
X3ZhbHVlLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwot
fQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RSb290Q29t
cHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNv
bnN0Ci17Ci0gICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5k
ZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZXF1
YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgaWYg
KHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBjb21wYXJlQ1NTVmFsdWUobV92YWx1ZSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZSY+KG90aGVyKS5tX3ZhbHVlKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8
ICJ2YWx1ZSAiIDw8IG1fdmFsdWUtPmN1c3RvbUNTU1RleHQoKSA8PCAiIChjYXRlZ29yeTogIiA8
PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGU6ICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsKLX0K
LQotY2xhc3MgQ1NTQ2FsY05lZ2F0ZU5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNOZWdhdGVOb2RlPiBjcmVh
dGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNOZWdhdGVOb2RlKFdURk1vdmUoY2hpbGQpKSk7Ci0g
ICAgfQotCi0gICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxk
KCkgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRDaGlsZChSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNoaWxkKTsg
fQotCi1wcml2YXRlOgotICAgIENTU0NhbGNOZWdhdGVOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+JiYgY2hpbGQpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNoaWxkLT5j
YXRlZ29yeSgpKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCi0gICAgewotICAg
IH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNF
eHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsK
LQotICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+aXNaZXJv
KCk7IH0KLSAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIC1tX2NoaWxkLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7IH0KLSAgICBk
b3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGlsZC0+Y29tcHV0ZUxlbmd0
aFB4KGNvbnZlcnNpb25EYXRhKTsgfQotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIFR5cGU6OkNzc0NhbGNOZWdhdGU7IH0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAg
ICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NT
UHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERp
cmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLSAgICB2b2lkIGNv
bGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3Bl
cnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RS
b290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQotCi0gICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2Rl
PiBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGls
ZE5vZGUgPSBtX2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4oV1RGTW92ZShjaGls
ZE5vZGUpKTsKLX0KLQotdm9pZCBDU1NDYWxjTmVnYXRlTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKLXsKLSAgICB0cyA8PCAiLSIgPDwgbV9jaGlsZC5nZXQoKTsKLX0KLQotY2xhc3Mg
Q1NTQ2FsY0ludmVydE5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNJbnZlcnROb2RlPiBjcmVhdGUoUmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IENTU0NhbGNJbnZlcnROb2RlKFdURk1vdmUoY2hpbGQpKSk7Ci0gICAgfQotCi0g
ICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hpbGQuZ2V0KCk7IH0KLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkgeyByZXR1
cm4gbV9jaGlsZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRDaGlsZChSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNoaWxkKTsgfQotCi1wcml2
YXRlOgotICAgIENTU0NhbGNJbnZlcnROb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
Y2hpbGQpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNoaWxkLT5jYXRlZ29yeSgp
KQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCi0gICAgewotICAgIH0KLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9u
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKLQotICAgIGJv
b2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+aXNaZXJvKCk7IH0KLSAg
ICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJs
ZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0
IGZpbmFsOwotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNzc0Nh
bGNJbnZlcnQ7IH0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAgICB2b2lkIGNvbGxlY3RE
aXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHBy
b3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290
Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0
aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25h
bERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7
Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjSW52ZXJ0
Tm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGlsZE5vZGUgPSBtX2NoaWxk
LT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Ci0gICAgcmV0dXJuIG1ha2VV
bmlxdWU8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Ci19Ci0K
LWRvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5
cGUpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+ZG91YmxlVmFsdWUo
dW5pdFR5cGUpOwotICAgIGlmICghY2hpbGRWYWx1ZSkKLSAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICByZXR1cm4gMS4wIC8gY2hpbGRW
YWx1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNJbnZlcnROb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0g
ICAgYXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25E
YXRhKTsKLSAgICBpZiAoIWNoaWxkVmFsdWUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0gICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7
Ci19Ci0KLXZvaWQgQ1NTQ2FsY0ludmVydE5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0
Ci17Ci0gICAgdHMgPDwgIjEvIiA8PCBtX2NoaWxkLmdldCgpOwotfQotCi0vLyBUaGlzIGlzIHRo
ZSByZXN1bHQgb2YgdGhlICJUbyBhZGQgdHdvIHR5cGVzIHR5cGUxIGFuZCB0eXBlMiwgcGVyZm9y
bSB0aGUgZm9sbG93aW5nIHN0ZXBzOiIgcnVsZXMuCi0KLXN0YXRpYyBjb25zdCBDYWxjdWxhdGlv
bkNhdGVnb3J5IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZSldW3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNh
dGVnb3J5OjpBbmdsZSldID0gewotLy8gICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICAg
ICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoICAgICAgICAgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciAg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAotICAgIHsgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TnVtYmVyLCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgICAgICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TGVuZ3RoCi0gICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVt
YmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50LCAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnQKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlcgotICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoCi19OwotCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRl
Z29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQotewotICAgIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgbGVmdENhdGVnb3J5ID0gbGVmdFNpZGUuY2F0ZWdvcnkoKTsKLSAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5IHJpZ2h0Q2F0ZWdvcnkgPSByaWdodFNpZGUuY2F0ZWdvcnkoKTsK
LSAgICBBU1NFUlQobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwot
ICAgIEFTU0VSVChyaWdodENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwot
Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgotICAgICAgICBpZiAobGVmdENhdGVnb3J5IDwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6QW5nbGUgJiYgcmlnaHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OkFuZ2xlKQotICAgICAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRp
Y19jYXN0PHVuc2lnbmVkPihsZWZ0Q2F0ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmln
aHRDYXRlZ29yeSldOwotICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0Q2F0ZWdvcnkp
Ci0gICAgICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5OwotICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5Ogot
ICAgICAgICBpZiAobGVmdENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAm
JiByaWdodENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICAgICAgcmV0dXJuIGxl
ZnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgPyByaWdodENhdGVnb3J5
IDogbGVmdENhdGVnb3J5OwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0gICAgICAg
IGlmIChyaWdodENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCByaWdo
dFNpZGUuaXNaZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
T3RoZXI7Ci0gICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok1pbjoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpDbGFtcDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci19Ci0KLS8v
IEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBjb3JyZWN0IGNhdGVnb3J5IGNvbXB1dGF0aW9uIHBl
cjoKLS8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nz
c251bWVyaWN2YWx1ZS1pbnZlcnQtYS10eXBlPgotLy8gVG8gaW52ZXJ0IGEgdHlwZSB0eXBlLCBw
ZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0vLyBMZXQgcmVzdWx0IGJlIGEgbmV3IHR5cGUg
d2l0aCBhbiBpbml0aWFsbHkgZW1wdHkgb3JkZXJlZCBtYXAgYW5kIGFuIGluaXRpYWxseSBudWxs
IHBlcmNlbnQgaGludAotLy8gRm9yIGVhY2ggdW5pdCDihpIgZXhwb25lbnQgb2YgdHlwZSwgc2V0
IHJlc3VsdFt1bml0XSB0byAoLTEgKiBleHBvbmVudCkuCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRl
Z29yeSBjYXRlZ29yeUZvckludmVydChDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotewot
ICAgIHJldHVybiBjYXRlZ29yeTsKLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0
ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYg
bm9kZXMsIENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBpZiAobm9kZXMuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0KLSAgICBhdXRvIGN1cnJl
bnRDYXRlZ29yeSA9IG5vZGVzWzBdLT5jYXRlZ29yeSgpOwotCi0gICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IGF1dG8mIG5vZGUg
PSBub2Rlc1tpXS5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8gdXNlZE9wZXJhdG9yID0g
b3A7Ci0gICAgICAgIGlmIChub2RlLnR5cGUoKSA9PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5
cGU6OkNzc0NhbGNJbnZlcnQpCi0gICAgICAgICAgICB1c2VkT3BlcmF0b3IgPSBDYWxjT3BlcmF0
b3I6OkRpdmlkZTsKLQotICAgICAgICBhdXRvIG5leHRDYXRlZ29yeSA9IG5vZGUuY2F0ZWdvcnko
KTsKLQotICAgICAgICBzd2l0Y2ggKHVzZWRPcGVyYXRvcikgewotICAgICAgICBjYXNlIENhbGNP
cGVyYXRvcjo6QWRkOgotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAg
ICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0x
LyNjc3NudW1lcmljdmFsdWUtYWRkLXR3by10eXBlcz4KLSAgICAgICAgICAgIC8vIEF0IGEgKyBv
ciAtIHN1Yi1leHByZXNzaW9uLCBhdHRlbXB0IHRvIGFkZCB0aGUgdHlwZXMgb2YgdGhlIGxlZnQg
YW5kIHJpZ2h0IGFyZ3VtZW50cy4KLSAgICAgICAgICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWls
dXJlLCB0aGUgZW50aXJlIGNhbGN1bGF0aW9u4oCZcyB0eXBlIGlzIGZhaWx1cmUuIE90aGVyd2lz
ZSwgdGhlIHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1cm5lZCB0eXBlLgotICAg
ICAgICAgICAgaWYgKGN1cnJlbnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xl
ICYmIG5leHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQotICAgICAgICAg
ICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVu
c2lnbmVkPihjdXJyZW50Q2F0ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obmV4dENhdGVn
b3J5KV07Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gbmV4dENhdGVn
b3J5KQotICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eToKLSAgICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5
cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1tdWx0aXBseS10d28tdHlwZXM+Ci0gICAgICAgICAg
ICAvLyBBdCBhICogc3ViLWV4cHJlc3Npb24sIG11bHRpcGx5IHRoZSB0eXBlcyBvZiB0aGUgbGVm
dCBhbmQgcmlnaHQgYXJndW1lbnRzLiBUaGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhl
IHJldHVybmVkIHJlc3VsdC4KLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICYmIG5leHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOwotCi0gICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjdXJyZW50Q2F0ZWdv
cnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyID8gbmV4dENhdGVnb3J5IDogY3VycmVu
dENhdGVnb3J5OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6OkRpdmlkZTogewotICAgICAgICAgICAgYXV0byBpbnZlcnRDYXRlZ29yeSA9IGNhdGVnb3J5
Rm9ySW52ZXJ0KG5leHRDYXRlZ29yeSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEF0
IGEgLyBzdWItZXhwcmVzc2lvbiwgbGV0IGxlZnQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRp
bmcgdGhlIHR5cGVzIG9mIGl0cyBsZWZ0IGFyZ3VtZW50LAotICAgICAgICAgICAgLy8gYW5kIHJp
Z2h0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgcmlnaHQg
YXJndW1lbnQgYW5kIHRoZW4gaW52ZXJ0aW5nIGl0LgotICAgICAgICAgICAgLy8gVGhlIHN1Yi1l
eHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGxlZnQg
dHlwZSBhbmQgcmlnaHQgdHlwZS4KLSAgICAgICAgICAgIGlmIChpbnZlcnRDYXRlZ29yeSAhPSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgbm9kZS5pc1plcm8oKSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFt
cDoKLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIG9mIGEgbWluKCksIG1heCgpLCBvciBjbGFtcCgp
IGV4cHJlc3Npb24gaXMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgdGhlIHR5cGVzIG9mIGl0cyBjb21t
YS1zZXBhcmF0ZWQgY2FsY3VsYXRpb25zCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gY3VycmVudENh
dGVnb3J5OwotfQotCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSByZXNvbHZlZFR5cGVGb3JN
aW5Pck1heE9yQ2xhbXAoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY3VsYXRpb25D
YXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpUaW1lOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5
OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgIHJldHVybiBj
YXRlZ29yeTsKLQotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKLSAgICAg
ICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg7
Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbkNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlcikKLSAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TnVtYmVyOwotICAgICAgICByZXR1cm4gY2F0ZWdvcnk7Ci0gICAgfQotCi0gICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotfQotCi1zdGF0aWMgYm9vbCBpc1NhbWVQYWlyKENh
bGN1bGF0aW9uQ2F0ZWdvcnkgYSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBiLCBDYWxjdWxhdGlvbkNh
dGVnb3J5IHgsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgeSkKLXsKLSAgICByZXR1cm4gKGEgPT0geCAm
JiBiID09IHkpIHx8IChhID09IHkgJiYgYiA9PSB4KTsKLX0KLQotY2xhc3MgQ1NTQ2FsY09wZXJh
dGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNP
cGVyYXRpb25Ob2RlPiBjcmVhdGUoQ2FsY09wZXJhdG9yLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYmIGxlZnRTaWRlLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0
U2lkZSk7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlU3Vt
KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpOwotICAgIHN0YXRp
YyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZVByb2R1Y3QoVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcyk7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciwgVmVj
dG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRl
Z29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KTsKLQotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBzaW1wbGlmeShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmKTsKLQotICAg
IHN0YXRpYyB2b2lkIGJ1aWxkQ1NTVGV4dChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmLCBT
dHJpbmdCdWlsZGVyJik7Ci0KLSAgICBDYWxjT3BlcmF0b3IgY2FsY09wZXJhdG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGVyYXRvcjsgfQotICAgIGJvb2wgaXNDYWxjU3VtTm9kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpBZGQ7IH0KLSAgICBib29sIGlzQ2Fs
Y1Byb2R1Y3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5OyB9Ci0gICAgYm9vbCBpc01pbk9yTWF4Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0
b3I6Ok1heDsgfQotICAgIGJvb2wgc2hvdWxkU29ydENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4g
aXNDYWxjU3VtTm9kZSgpIHx8IGlzQ2FsY1Byb2R1Y3ROb2RlKCk7IH0KLQotICAgIHZvaWQgaG9p
c3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3IpOwotICAgIHZvaWQgY29tYmluZUNo
aWxkcmVuKCk7Ci0gICAgCi0gICAgYm9vbCBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdDsK
LQotICAgIGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQotCi1wcml2
YXRlOgotICAgIENTU0NhbGNPcGVyYXRpb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdv
cnksIENhbGNPcGVyYXRvciBvcCwgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lk
ZSwgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpCi0gICAgICAgIDogQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5KQotICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCi0g
ICAgewotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7Ci0gICAg
ICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUpKTsKLSAgICAg
ICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUpKTsKLSAgICB9
Ci0KLSAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
LCBDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBj
aGlsZHJlbikKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnkpCi0gICAg
ICAgICwgbV9vcGVyYXRvcihvcCkKLSAgICAgICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRy
ZW4pKQotICAgIHsKLSAgICB9Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBDc3NDYWxjT3BlcmF0aW9uOyB9Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsCi0g
ICAgewotICAgICAgICByZXR1cm4gIWRvdWJsZVZhbHVlKHByaW1pdGl2ZVR5cGUoKSk7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3Qg
ZmluYWw7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVD
YWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmlu
YWw7Ci0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWw7Ci0gICAg
ZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUg
Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBm
aW5hbDsKLQotICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMo
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY29sbGVjdERp
cmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4m
KSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7
Ci0KLSAgICBzdGF0aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBnZXROdW1iZXJTaWRlKENTU0Nh
bGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRT
aWRlKQotICAgIHsKLSAgICAgICAgaWYgKGxlZnRTaWRlLmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuICZsZWZ0U2lkZTsKLSAgICAg
ICAgaWYgKHJpZ2h0U2lkZS5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJl
cikKLSAgICAgICAgICAgIHJldHVybiAmcmlnaHRTaWRlOwotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICB9Ci0KLSAgICBkb3VibGUgZXZhbHVhdGUoY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNo
aWxkcmVuKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGV2YWx1YXRlT3BlcmF0b3IobV9v
cGVyYXRvciwgY2hpbGRyZW4pOwotICAgIH0KLQotICAgIHN0YXRpYyBkb3VibGUgZXZhbHVhdGVP
cGVyYXRvcihDYWxjT3BlcmF0b3IsIGNvbnN0IFZlY3Rvcjxkb3VibGU+Jik7Ci0gICAgc3RhdGlj
IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNpbXBsaWZ5Tm9kZShSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiYmLCBpbnQgZGVwdGgpOwotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBzaW1wbGlmeVJlY3Vyc2l2ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmLCBp
bnQgZGVwdGgpOwotICAgIAotICAgIGVudW0gY2xhc3MgR3JvdXBpbmdQYXJlbnMgewotICAgICAg
ICBPbWl0LAotICAgICAgICBJbmNsdWRlCi0gICAgfTsKLSAgICBzdGF0aWMgdm9pZCBidWlsZENT
U1RleHRSZWN1cnNpdmUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRl
ciYsIEdyb3VwaW5nUGFyZW5zID0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpOwotCi0gICAgQ2Fs
Y09wZXJhdG9yIG1fb3BlcmF0b3I7Ci0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiBtX2NoaWxkcmVuOwotfTsKLQotUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvciBvcCwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4m
JiByaWdodFNpZGUpCi17Ci0gICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmlnaHRTaWRlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6OkFkZCB8
fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKLQotICAgIEFTU0VSVChsZWZ0U2lkZS0+
Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLSAgICBBU1NFUlQocmln
aHRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwotCi0gICAg
YXV0byBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lk
ZSwgb3ApOwotICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
cikgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8g
Y3JlYXRlIENTU0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBub2RlIGJlY2F1c2UgdW5h
YmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2RlKCpsZWZ0
U2lkZSkgPDwgIiBhbmQgIiA8PCAqcmlnaHRTaWRlKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShu
ZXdDYXRlZ29yeSwgb3AsIGxlZnRTaWRlLnJlbGVhc2VOb25OdWxsKCksIHJpZ2h0U2lkZS5yZWxl
YXNlTm9uTnVsbCgpKSk7Ci19Ci0KLVJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4+JiYgdmFsdWVzKQotewotICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSh2
YWx1ZXMsIENhbGNPcGVyYXRvcjo6QWRkKTsKLSAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0
cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBzdW0gbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRl
cm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7Ci0gICAg
ICAgIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6
OkFkZCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNPcGVyYXRvcjo6
QWRkLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2Rl
PiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChWZWN0b3I8UmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKQotewotICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1p
bmVDYXRlZ29yeSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOwotICAgIGlmIChuZXdD
YXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHByb2R1Y3Qgbm9kZSBi
ZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50
Tm9kZXModmFsdWVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNP
cGVyYXRvcjo6TXVsdGlwbHksIFdURk1vdmUodmFsdWVzKSkpOwotfQotCi1SZWZQdHI8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xh
bXAoQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYg
dmFsdWVzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi17Ci0gICAg
QVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TWF4
IHx8IG9wID09IENhbGNPcGVyYXRvcjo6Q2xhbXApOwotICAgIEFTU0VSVF9JTVBMSUVTKG9wID09
IENhbGNPcGVyYXRvcjo6Q2xhbXAsIHZhbHVlcy5zaXplKCkgPT0gMyk7Ci0KLSAgICBPcHRpb25h
bDxDYWxjdWxhdGlvbkNhdGVnb3J5PiBjYXRlZ29yeSA9IHN0ZDo6bnVsbG9wdDsKLSAgICBmb3Ig
KGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7Ci0gICAgICAgIGF1dG8gdmFsdWVDYXRlZ29yeSA9IHJl
c29sdmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCh2YWx1ZS0+Y2F0ZWdvcnkoKSwgZGVzdGluYXRp
b25DYXRlZ29yeSk7Ci0KLSAgICAgICAgQVNTRVJUKHZhbHVlQ2F0ZWdvcnkgPCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcik7Ci0gICAgICAgIGlmICghY2F0ZWdvcnkpIHsKLSAgICAgICAgICAg
IGlmICh2YWx1ZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Ci0gICAg
ICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNy
ZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJs
ZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVz
KSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBjYXRlZ29yeSA9IHZhbHVlQ2F0ZWdvcnk7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoY2F0ZWdvcnkgIT0gdmFsdWVDYXRlZ29yeSkgewotICAgICAgICAgICAgaWYgKGlzU2FtZVBh
aXIoY2F0ZWdvcnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKSkgewotICAgICAgICAg
ICAgICAgIGNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDsKLSAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChp
c1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikpIHsKLSAg
ICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1i
ZXI7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoY2F0ZWdvcnkudmFsdWUoKSwgb3AsIFdURk1vdmUo
dmFsdWVzKSkpOwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVu
V2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBBU1NFUlQob3AgPT0gQ2FsY09w
ZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7Ci0KLSAgICBhdXRv
IGhhc0NoaWxkV2l0aE9wZXJhdG9yID0gWyZdIChDYWxjT3BlcmF0b3Igb3ApIHsKLSAgICAgICAg
Zm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGlmIChpczxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRp
b25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07
Ci0KLSAgICBpZiAoIWhhc0NoaWxkV2l0aE9wZXJhdG9yKG9wKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKLSAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICBpZiAoaXM8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9u
Tm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7Ci0gICAgICAgICAgICBh
dXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQo
KSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUgOiBjaGls
ZHJlbikKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZFRv
TW92ZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChX
VEZNb3ZlKGNoaWxkKSk7Ci0gICAgfQotICAgIAotICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0
KCk7Ci0gICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOwotfQotCi1lbnVtIGNs
YXNzIFNvcnRpbmdDYXRlZ29yeSB7Ci0gICAgTnVtYmVyLAotICAgIFBlcmNlbnQsCi0gICAgRGlt
ZW5zaW9uLAotICAgIE90aGVyCi19OwotCi1zdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdD
YXRlZ29yeUZvclR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpCi17Ci0gICAgc3RhdGljIGNvbnN0
ZXhwciBTb3J0aW5nQ2F0ZWdvcnkgc29ydE9yZGVyW10gPSB7Ci0gICAgICAgIFNvcnRpbmdDYXRl
Z29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLAotICAg
ICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpQZXJjZW50LCAgICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51
bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsCi0gICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aCwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5
OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLAotICAgICAgICBT
b3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZy
ZXF1ZW5jeSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpPdGhlciwgICAgICAgICAvLyBVT3Ro
ZXIKLSAgICB9OwotCi0gICAgQ09NUElMRV9BU1NFUlQoQVJSQVlfU0laRShzb3J0T3JkZXIpID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgKyAxLCBz
b3J0T3JkZXJfc2l6ZV9zaG91bGRfbWF0Y2hfVW5pdENhdGVnb3J5KTsKLSAgICByZXR1cm4gc29y
dE9yZGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihjYWxjVW5pdENhdGVnb3J5KHVuaXRUeXBlKSld
OwotfQotCi1zdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdDYXRlZ29yeShjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KG5vZGUpKQotICAgICAgICByZXR1cm4gc29ydGluZ0NhdGVnb3J5Rm9yVHlwZShu
b2RlLnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICByZXR1cm4gU29ydGluZ0NhdGVnb3J5OjpPdGhl
cjsKLX0KLQotc3RhdGljIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKGlzPENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQotICAgICAgICByZXR1cm4gbm9kZS5wcmltaXRpdmVU
eXBlKCk7Ci0gICAgCi0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLX0KLQot
c3RhdGljIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uIGNvbnZlcnNp
b25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhDU1NVbml0VHlwZSBmaXJzdFR5cGUsIENTU1VuaXRUeXBl
IHNlY29uZFR5cGUpCi17Ci0gICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV04gfHwgc2Vjb25kVHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV04pCi0gICAgICAg
IHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6SW52YWxp
ZDsKLQotICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21i
aW5hdGlvbihmaXJzdFR5cGUpOwotCi0gICAgLy8gQ29tcGF0aWJsZSB0eXBlcy4KLSAgICBpZiAo
Zmlyc3RDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBmaXJzdENhdGVn
b3J5ID09IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihzZWNvbmRUeXBlKSkKLSAg
ICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpD
YW5vbmljYWxpemU7Ci0KLSAgICAvLyBNYXRjaGluZyB0eXBlcy4KLSAgICBpZiAoZmlyc3RUeXBl
ID09IHNlY29uZFR5cGUgJiYgaGFzRG91YmxlVmFsdWUoZmlyc3RUeXBlKSkKLSAgICAgICAgcmV0
dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZTsK
LQotICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6
SW52YWxpZDsKLX0KLQotYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29tYmluZUFsbENo
aWxkcmVuKCkgY29uc3QKLXsKLSAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+
KG1fY2hpbGRyZW5bMF0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZpcnN0
VW5pdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgYXV0byBmaXJz
dENhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1fY2hpbGRyZW5b
MF0tPnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9j
aGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBub2RlID0gbV9jaGlsZHJlbltp
XTsKLQotICAgICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8gbm9kZVVuaXRUeXBlID0g
bm9kZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBhdXRvIG5vZGVDYXRlZ29yeSA9IGNhbGN1
bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihub2RlVW5pdFR5cGUpOwotCi0gICAgICAgIGlm
IChub2RlQ2F0ZWdvcnkgIT0gZmlyc3RDYXRlZ29yeSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICBpZiAobm9kZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyICYmIG5vZGVVbml0VHlwZSAhPSBmaXJzdFVuaXRUeXBlKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFoYXNEb3VibGVWYWx1ZShub2RlVW5pdFR5
cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0cnVl
OwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5lQ2hpbGRyZW4oKQotewot
ICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA8IDIpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChzaG91bGRTb3J0Q2hpbGRyZW4oKSkgewotICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy12YWx1ZXMtNC8jc29ydC1hLWNhbGN1bGF0aW9ucy1jaGlsZHJlbj4KLSAgICAg
ICAgc3RkOjpzdGFibGVfc29ydChtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4uZW5kKCks
IFtdKGNvbnN0IGF1dG8mIGZpcnN0LCBjb25zdCBhdXRvJiBzZWNvbmQpIHsKLSAgICAgICAgICAg
IC8vIFNvcnQgb3JkZXI6IG51bWJlciwgcGVyY2VudGFnZSwgZGltZW5zaW9uLCBvdGhlci4KLSAg
ICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBmaXJzdENhdGVnb3J5ID0gc29ydGluZ0NhdGVnb3J5
KGZpcnN0LmdldCgpKTsKLSAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBzZWNvbmRDYXRlZ29y
eSA9IHNvcnRpbmdDYXRlZ29yeShzZWNvbmQuZ2V0KCkpOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBpZiAoZmlyc3RDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiAmJiBz
ZWNvbmRDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbikgewotICAgICAgICAg
ICAgICAgIC8vIElmIG5vZGVzIGNvbnRhaW5zIGFueSBkaW1lbnNpb25zLCByZW1vdmUgdGhlbSBm
cm9tIG5vZGVzLCBzb3J0IHRoZW0gYnkgdGhlaXIgdW5pdHMsIGFuZCBhcHBlbmQgdGhlbSB0byBy
ZXQuCi0gICAgICAgICAgICAgICAgYXV0byBmaXJzdFVuaXRTdHJpbmcgPSBDU1NQcmltaXRpdmVW
YWx1ZTo6dW5pdFR5cGVTdHJpbmcoZmlyc3QtPnByaW1pdGl2ZVR5cGUoKSk7Ci0gICAgICAgICAg
ICAgICAgYXV0byBzZWNvbmRVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBl
U3RyaW5nKHNlY29uZC0+cHJpbWl0aXZlVHlwZSgpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
Y29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGZpcnN0VW5pdFN0cmluZywgc2Vjb25kVW5pdFN0cmlu
Zyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oZmlyc3RDYXRlZ29yeSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2Vjb25kQ2F0ZWdv
cnkpOwotICAgICAgICB9KTsKLQotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFt
IDw8ICJwb3N0LXNvcnQ6ICIgPDwgKnRoaXMpOwotICAgIH0KLQotICAgIGlmIChjYWxjT3BlcmF0
b3IoKSA9PSBDYWxjT3BlcmF0b3I6OkFkZCkgewotICAgICAgICAvLyBGb3IgZWFjaCBzZXQgb2Yg
cm9vdOKAmXMgY2hpbGRyZW4gdGhhdCBhcmUgbnVtZXJpYyB2YWx1ZXMgd2l0aCBpZGVudGljYWwg
dW5pdHMsCi0gICAgICAgIC8vIHJlbW92ZSB0aG9zZSBjaGlsZHJlbiBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBjb250YWluaW5nCi0gICAgICAgIC8vIHRoZSBz
dW0gb2YgdGhlIHJlbW92ZWQgbm9kZXMsIGFuZCB3aXRoIHRoZSBzYW1lIHVuaXQuCi0gICAgICAg
IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgICAg
IG5ld0NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOwot
ICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlblswXS5jb3B5UmVm
KCkpOwotCi0gICAgICAgIENTU1VuaXRUeXBlIHByZXZpb3VzVHlwZSA9IHByaW1pdGl2ZVR5cGVG
b3JDb21iaW5hdGlvbihuZXdDaGlsZHJlblswXS5nZXQoKSk7Ci0KLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1
dG8mIGN1cnJlbnROb2RlID0gbV9jaGlsZHJlbltpXTsKLSAgICAgICAgICAgIENTU1VuaXRUeXBl
IGN1cnJlbnRUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlLmdl
dCgpKTsKLQotICAgICAgICAgICAgYXV0byBjb252ZXJzaW9uVHlwZSA9IGNvbnZlcnNpb25Ub0Fk
ZFZhbHVlc1dpdGhUeXBlcyhwcmV2aW91c1R5cGUsIGN1cnJlbnRUeXBlKTsKLSAgICAgICAgICAg
IGlmIChjb252ZXJzaW9uVHlwZSAhPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29u
dmVyc2lvbjo6SW52YWxpZCkgewotICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuYWRkKGRvd25jYXN0PENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGN1cnJlbnROb2RlLmdldCgpKSwgY29udmVyc2lvblR5
cGUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBwcmV2aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24oY3VycmVudE5v
ZGUpOwotICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKGN1cnJlbnROb2Rl
LmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIG5ld0NoaWxkcmVuLnNo
cmlua1RvRml0KCk7Ci0gICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjYWxjT3BlcmF0b3IoKSA9PSBDYWxj
T3BlcmF0b3I6Ok11bHRpcGx5KSB7Ci0gICAgICAgIC8vIElmIHJvb3QgaGFzIG11bHRpcGxlIGNo
aWxkcmVuIHRoYXQgYXJlIG51bWJlcnMgKG5vdCBwZXJjZW50YWdlcyBvciBkaW1lbnNpb25zKSwK
LSAgICAgICAgLy8gcmVtb3ZlIHRoZW0gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xlIG51
bWJlciBjb250YWluaW5nIHRoZSBwcm9kdWN0IG9mIHRoZSByZW1vdmVkIG5vZGVzLgotICAgICAg
ICBkb3VibGUgbXVsdGlwbGllciA9IDE7Ci0KLSAgICAgICAgLy8gU29ydGluZyB3aWxsIGhhdmUg
cHV0IHRoZSBudW1iZXIgbm9kZXMgZmlyc3QuCi0gICAgICAgIHVuc2lnbmVkIGxlYWRpbmdOdW1i
ZXJOb2RlQ291bnQgPSAwOwotICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2NoaWxkcmVuKSB7
Ci0gICAgICAgICAgICBhdXRvIG5vZGVUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9u
KG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKG5vZGVUeXBlICE9IENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBtdWx0aXBsaWVyICo9IG5vZGUtPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKTsKLSAgICAgICAgICAgICsrbGVhZGluZ051bWJlck5vZGVDb3VudDsKLSAgICAgICAgfQot
ICAgICAgICAKLSAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdD
aGlsZHJlbjsKLSAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2No
aWxkcmVuLnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiByb290IGNvbnRhaW5zIG9u
bHkgdHdvIGNoaWxkcmVuLCBvbmUgb2Ygd2hpY2ggaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRh
Z2Ugb3IgZGltZW5zaW9uKSBhbmQgdGhlIG90aGVyIG9mCi0gICAgICAgIC8vIHdoaWNoIGlzIGEg
U3VtIHdob3NlIGNoaWxkcmVuIGFyZSBhbGwgbnVtZXJpYyB2YWx1ZXMsIG11bHRpcGx5IGFsbCBv
ZiB0aGUgU3Vt4oCZcyBjaGlsZHJlbiBieSB0aGUgbnVtYmVyLCB0aGVuCi0gICAgICAgIC8vIHJl
dHVybiB0aGUgU3VtLgotICAgICAgICAvLyBUaGUgU3VtJ3MgY2hpbGRyZW4gc2ltcGxpZmljYXRp
b24gd2lsbCBoYXZlIGhhcHBlbmVkIGFscmVhZHkuCi0gICAgICAgIGJvb2wgZGlkTXVsdGlwbHkg
PSBmYWxzZTsKLSAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQgJiYgbV9jaGlsZHJl
bi5zaXplKCkgLSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID09IDEpIHsKLSAgICAgICAgICAgIGF1
dG8gbXVsdGlwbGljYW5kQ2F0ZWdvcnkgPSBjYWxjVW5pdENhdGVnb3J5KHByaW1pdGl2ZVR5cGVG
b3JDb21iaW5hdGlvbihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkpOwotICAgICAgICAgICAgaWYg
KG11bHRpcGxpY2FuZENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Ci0g
ICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW4ubGFz
dCgpLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW5bMF0uZ2V0KCkpLm11bHRpcGx5KG11bHRpcGxpZXIpOwot
ICAgICAgICAgICAgICAgIGRpZE11bHRpcGx5ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0gZWxzZSBp
ZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKSAmJiBk
b3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmNh
bGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7Ci0gICAgICAgICAgICAgICAgLy8g
SWYgd2UncmUgbXVsdGlwbHlpbmcgd2l0aCBhbm90aGVyIG9wZXJhdGlvbiB0aGF0IGlzIGFuIGFk
ZGl0aW9uIGFuZCBhbGwgdGhlIGFkZGVkIGNoaWxkcmVuCi0gICAgICAgICAgICAgICAgLy8gYXJl
IHBlcmNlbnRhZ2VzIG9yIGRpbWVuc2lvbnMsIHdlIHNob3VsZCBtdWx0aXBseSBlYWNoIGNoaWxk
IGFuZCBtYWtlIHRoaXMgZXhwcmVzc2lvbiBhbgotICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9u
LgotICAgICAgICAgICAgICAgIGF1dG8gYWxsQ2hpbGRyZW5BcmVQcmltaXRpdmVWYWx1ZXMgPSBb
XShjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbikgLT4g
Ym9vbAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBj
aGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkLmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfTsKLQotICAgICAgICAgICAg
ICAgIGF1dG8mIGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hp
bGRyZW4ubGFzdCgpLmdldCgpKS5jaGlsZHJlbigpOwotICAgICAgICAgICAgICAgIGlmIChhbGxD
aGlsZHJlbkFyZVByaW1pdGl2ZVZhbHVlcyhjaGlsZHJlbikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQuY29weVJlZigpKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxh
c3QoKS5nZXQoKSkubXVsdGlwbHkobXVsdGlwbGllcik7Ci0gICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgbV9vcGVyYXRvciA9IENhbGNPcGVyYXRvcjo6QWRkOwotICAg
ICAgICAgICAgICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFkaWRNdWx0aXBseSkgewot
ICAgICAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQpIHsKLSAgICAgICAgICAgICAg
ICBhdXRvIG11bHRpcGxpZXJOb2RlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRl
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobXVsdGlwbGllciwgQ1NTVW5pdFR5cGU6OkNTU19O
VU1CRVIpKTsKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RG
TW92ZShtdWx0aXBsaWVyTm9kZSkpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50OyBpIDwgbV9jaGlsZHJlbi5zaXpl
KCk7ICsraSkKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9j
aGlsZHJlbltpXS5jb3B5UmVmKCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3Q2hpbGRyZW4u
c2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4p
OwotICAgIH0KLQotICAgIGlmIChpc01pbk9yTWF4Tm9kZSgpICYmIGNhbkNvbWJpbmVBbGxDaGls
ZHJlbigpKSB7Ci0gICAgICAgIGF1dG8gY29tYmluZWRVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0t
PnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0
ZWdvcnlGb3JDb21iaW5hdGlvbihjb21iaW5lZFVuaXRUeXBlKTsKLSAgICAgICAgaWYgKGNhdGVn
b3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQotICAgICAgICAgICAgY29tYmluZWRV
bml0VHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRlZ29y
eSk7Ci0KLSAgICAgICAgZG91YmxlIHJlc29sdmVkVmFsdWUgPSBkb3VibGVWYWx1ZShjb21iaW5l
ZFVuaXRUeXBlKTsKLSAgICAgICAgYXV0byBuZXdDaGlsZCA9IENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc29sdmVkVmFsdWUsIGNv
bWJpbmVkVW5pdFR5cGUpKTsKLQotICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7Ci0gICAgICAg
IG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUobmV3Q2hpbGQpKTsKLSAgICB9Ci19Ci0KLS8vIGh0
dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBsaWZ5LWEtY2FsY3VsYXRp
b24tdHJlZQotCi1SZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6c2ltcGxpZnkoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSkKLXsKLSAg
ICByZXR1cm4gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShyb290Tm9kZSksIDApOwotfQotCi1S
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnlS
ZWN1cnNpdmUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSwgaW50IGRlcHRo
KQotewotICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAg
ICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4o
cm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVy
YXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBj
aGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byBjaGlsZCA9IGNoaWxkcmVu
W2ldLmNvcHlSZWYoKTsKLSAgICAgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJz
aXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICAgICAgaWYgKG5ld05vZGUu
cHRyKCkgIT0gY2hpbGRyZW5baV0ucHRyKCkpCi0gICAgICAgICAgICAgICAgY2hpbGRyZW5baV0g
PSBXVEZNb3ZlKG5ld05vZGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpczxDU1NDYWxj
TmVnYXRlTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICBSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiBjaGlsZCA9IG5lZ2F0ZU5vZGUuY2hpbGQoKTsKLSAgICAgICAg
YXV0byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsg
MSk7Ci0gICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9ICZuZWdhdGVOb2RlLmNoaWxkKCkpCi0g
ICAgICAgICAgICBuZWdhdGVOb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOwotICAgIH0g
ZWxzZSBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBhdXRv
JiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgp
KTsKLSAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hpbGQgPSBpbnZlcnROb2Rl
LmNoaWxkKCk7Ci0gICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1v
dmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSAmaW52
ZXJ0Tm9kZS5jaGlsZCgpKQotICAgICAgICAgICAgaW52ZXJ0Tm9kZS5zZXRDaGlsZChXVEZNb3Zl
KG5ld05vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2ltcGxpZnlOb2RlKFdURk1vdmUocm9v
dE5vZGUpLCBkZXB0aCk7Ci19Ci0KLVJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNP
cGVyYXRpb25Ob2RlOjpzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBy
b290Tm9kZSwgaW50IGRlcHRoKQotewotICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgLy8gSWYgcm9vdCBpcyBhIHBlcmNlbnRhZ2UgdGhh
dCB3aWxsIGJlIHJlc29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSwgYW5kIHRoZXJlIGlzIGVu
b3VnaCBpbmZvcm1hdGlvbgotICAgICAgICAvLyBhdmFpbGFibGUgdG8gcmVzb2x2ZSBpdCwgZG8g
c28sIGFuZCBleHByZXNzIHRoZSByZXN1bHRpbmcgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgYXBwcm9w
cmlhdGUgY2Fub25pY2FsCi0gICAgICAgIC8vIHVuaXQuIFJldHVybiB0aGUgdmFsdWUuCi0KLSAg
ICAgICAgLy8gSWYgcm9vdCBpcyBhIGRpbWVuc2lvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgaW4g
aXRzIGNhbm9uaWNhbCB1bml0LCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uCi0gICAg
ICAgIC8vIGF2YWlsYWJsZSB0byBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgdW5pdCwgZG8g
c28sIGFuZCByZXR1cm4gdGhlIHZhbHVlLgotICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZU5v
ZGUgPSBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZS5nZXQoKSk7
Ci0gICAgICAgIHByaW1pdGl2ZVZhbHVlTm9kZS5jYW5vbmljYWxpemVVbml0KCk7Ci0gICAgICAg
IHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKLSAgICB9Ci0KLSAgICAvLyBJZiByb290IGlzIGFu
IG9wZXJhdG9yIG5vZGUgdGhhdOKAmXMgbm90IG9uZSBvZiB0aGUgY2FsYy1vcGVyYXRvciBub2Rl
cywgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIG51bWVyaWMgdmFsdWVzCi0gICAgLy8gd2l0
aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY29tcHV0ZWQgdGhlIG9wZXJhdGlvbiByb290IHJlcHJl
c2VudHMsIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgcm9vdOKAmXMgb3BlcmF0aW9uCi0g
ICAgLy8gdXNpbmcgaXRzIGNoaWxkcmVuLCBleHByZXNzZWQgaW4gdGhlIHJlc3VsdOKAmXMgY2Fu
b25pY2FsIHVuaXQuCi0gICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSkp
IHsKLSAgICAgICAgYXV0byYgY2FsY09wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICAvLyBEb24ndCBzaW1wbGlmeSBh
dCB0aGUgcm9vdCwgb3RoZXJ3aXNlIHdlIGxvc2UgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbiBmb3Ig
c2VyaWFsaXphdGlvbi4KLSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCku
c2l6ZSgpID09IDEgJiYgZGVwdGgpCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjYWxjT3Bl
cmF0aW9uTm9kZS5jaGlsZHJlbigpWzBdKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChjYWxjT3Bl
cmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkpIHsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25O
b2RlLmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpBZGQpOwotICAgICAg
ICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgewotICAg
ICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxj
T3BlcmF0b3I6Ok11bHRpcGx5KTsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJp
bmVDaGlsZHJlbigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsY09wZXJh
dGlvbk5vZGUuaXNNaW5Pck1heE5vZGUoKSkKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2Rl
LmNvbWJpbmVDaGlsZHJlbigpOwotCi0gICAgICAgIC8vIElmIG9ubHkgb25lIGNoaWxkIHJlbWFp
bnMsIHJldHVybiB0aGUgY2hpbGQgKGV4Y2VwdCBhdCB0aGUgcm9vdCkuCi0gICAgICAgIGF1dG8g
c2hvdWxkQ29tYmluZVBhcmVudFdpdGhPbmx5Q2hpbGQgPSBbXShjb25zdCBDU1NDYWxjT3BlcmF0
aW9uTm9kZSYgcGFyZW50LCBpbnQgZGVwdGgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChw
YXJlbnQuY2hpbGRyZW4oKS5zaXplKCkgIT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIC8vIEFsd2F5cyBzaW1wbGlmeSBiZWxvdyB0aGUgcm9vdC4KLSAg
ICAgICAgICAgIGlmIChkZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgICAgLy8gQXQgdGhlIHJvb3QsIHByZXNlcnZlIHRoZSByb290IGZ1bmN0aW9uIGJ5IG9u
bHkgbWVyZ2luZyBub2RlcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLgotICAgICAgICAgICAgYXV0
byYgY2hpbGQgPSBwYXJlbnQuY2hpbGRyZW4oKS5maXJzdCgpOwotICAgICAgICAgICAgaWYgKCFp
czxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpKQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgYXV0byBwYXJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRnJvbU9w
ZXJhdG9yKHBhcmVudC5jYWxjT3BlcmF0b3IoKSk7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkRnVu
Y3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9k
ZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpKTsKLSAgICAgICAgICAgIHJldHVybiBjaGls
ZEZ1bmN0aW9uID09IHBhcmVudEZ1bmN0aW9uOwotICAgICAgICB9OwotCi0gICAgICAgIGlmIChz
aG91bGRDb21iaW5lUGFyZW50V2l0aE9ubHlDaGlsZChjYWxjT3BlcmF0aW9uTm9kZSwgZGVwdGgp
KQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRyZW4o
KS5maXJzdCgpKTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgYXV0
byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlLmdldCgp
KS5jaGlsZCgpOwotICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWVyaWMgdmFs
dWUsIHJldHVybiBhbiBlcXVpdmFsZW50IG51bWVyaWMgdmFsdWUsIGJ1dCB3aXRoIHRoZSB2YWx1
ZSBuZWdhdGVkICgwIC0gdmFsdWUpLgotICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
PihjaGlsZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGRvd25jYXN0PENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkubmVnYXRlKCk7Ci0gICAgICAgICAg
ICByZXR1cm4gY2hpbGROb2RlOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBy
b2904oCZcyBjaGlsZCBpcyBhIE5lZ2F0ZSBub2RlLCByZXR1cm4gdGhlIGNoaWxk4oCZcyBjaGls
ZC4KLSAgICAgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpKQotICAgICAg
ICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpLmNoaWxk
KCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQot
Ci0gICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgYXV0
byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgp
KS5jaGlsZCgpOwotICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWJlciAobm90
IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24pIHJldHVybiB0aGUgcmVjaXByb2NhbCBvZiB0aGUg
Y2hpbGTigJlzIHZhbHVlLgotICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGls
ZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaW52ZXJ0KCk7Ci0gICAgICAgICAgICByZXR1
cm4gY2hpbGROb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQg
aXMgYW4gSW52ZXJ0IG5vZGUsIHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgotICAgICAgICBp
ZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkpCi0gICAgICAgICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsKLQotICAgICAg
ICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIFdURk1vdmUo
cm9vdE5vZGUpOwotfQotCi1DU1NVbml0VHlwZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6cHJpbWl0
aXZlVHlwZSgpIGNvbnN0Ci17Ci0gICAgYXV0byB1bml0Q2F0ZWdvcnkgPSBjYXRlZ29yeSgpOwot
ICAgIHN3aXRjaCAodW5pdENhdGVnb3J5KSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXI6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6
IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmNhdGVnb3J5KCkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLSNlbmRpZgotICAgICAgICByZXR1cm4gQ1NTVW5p
dFR5cGU6OkNTU19OVU1CRVI7Ci0KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnQ6IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0
dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLQotICAgICAgICBpZiAobV9jaGlsZHJlbi5z
aXplKCkgPT0gMikgewotICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMF0tPmNhdGVnb3J5KCkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBt
X2NoaWxkcmVuWzFdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgICAgICBpZiAobV9jaGlsZHJl
blsxXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAg
fQotICAgICAgICBDU1NVbml0VHlwZSBmaXJzdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRp
dmVUeXBlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAg
ICAgICAgICBpZiAoZmlyc3RUeXBlICE9IGNoaWxkLT5wcmltaXRpdmVUeXBlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gZmlyc3RUeXBlOwotICAgIH0KLQotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6RnJlcXVlbmN5OgotICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAg
ICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuLmZpcnN0KCktPnByaW1pdGl2ZVR5cGUoKTsKLSAg
ICAgICAgcmV0dXJuIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeSh1bml0
Q2F0ZWdvcnkpOwotCi0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3Ro
OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1
cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24o
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17
Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsK
LSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKLQot
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgIGF1dG8gbm9kZSA9
IGNoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgIGlm
ICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICBub2Rlcy51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShub2RlKSk7Ci0gICAgfQotCi0gICAgLy8gUmV2ZXJzZSB0aGUg
b3BlcmF0aW9uIHdlIGRpZCB3aGVuIGNyZWF0aW5nIHRoaXMgbm9kZSwgcmVjb3ZlcmluZyBhIHN1
aXRhYmxlIGRlc3RpbmF0aW9uIGNhdGVnb3J5IGZvciBvdGhlcndpc2UtYW1iaWd1b3VzIG1pbi9t
YXgvY2xhbXAgbm9kZXMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2F0ZWdvcnkgaXMgcmVhbGx5
IG9ubHkgZ29vZCBlbm91Z2ggZm9yIHRoYXQgcHVycG9zZSBhbmQgaXMgbm90IGFjY3VyYXRlIGZv
ciBvdGhlciBub2RlIHR5cGVzOyB3ZSBjb3VsZCB1c2UgYSBib29sZWFuIGluc3RlYWQuCi0gICAg
YXV0byBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0g
ICAgaWYgKGNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkK
LSAgICAgICAgZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aDsKLSAgICBlbHNlIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXIpCi0gICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpOdW1iZXI7Ci0KLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk9wZXJh
dGlvbj4oV1RGTW92ZShub2RlcyksIG1fb3BlcmF0b3IsIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwot
fQotCi1kb3VibGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBl
IHVuaXRUeXBlKSBjb25zdAotewotICAgIGJvb2wgYWxsb3dOdW1iZXJzID0gY2FsY09wZXJhdG9y
KCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsKLQotICAgIHJldHVybiBldmFsdWF0ZShtX2No
aWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7Ci0gICAgICAgIENTU1VuaXRUeXBlIGNoaWxk
VHlwZSA9IHVuaXRUeXBlOwotICAgICAgICBpZiAoYWxsb3dOdW1iZXJzICYmIHVuaXRUeXBlICE9
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSICYmIGNoaWxkLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICBjaGlsZFR5cGUgPSBDU1NVbml0VHlw
ZTo6Q1NTX05VTUJFUjsKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5kb3VibGVWYWx1ZShjaGlsZFR5
cGUpOwotICAgIH0pKTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRl
TGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAoYXV0byYg
Y2hpbGQpIHsKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lv
bkRhdGEpOwotICAgIH0pKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVj
dERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYg
dmFsdWVzKSBjb25zdAotewotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAg
ICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVz
KTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29u
c3QKLXsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQt
PmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwotfQot
Ci12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQoY29uc3QgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQotewotICAgIGF1dG8g
c2hvdWxkT3V0cHV0RW5jbG9zaW5nQ2FsYyA9IFtdKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9k
ZSYgcm9vdE5vZGUpIHsKLSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290
Tm9kZSkpIHsKLSAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpOwotICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlv
bk5vZGUuaXNDYWxjU3VtTm9kZSgpIHx8IG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUo
KTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU+KHJvb3ROb2RlKTsKLSAgICB9OwotICAgIAotICAgIGJvb2wgb3V0cHV0Q2FsYyA9IHNob3Vs
ZE91dHB1dEVuY2xvc2luZ0NhbGMobm9kZSk7Ci0gICAgaWYgKG91dHB1dENhbGMpCi0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCJjYWxjKCIpOwotCi0gICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKG5v
ZGUsIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKLQotICAgIGlmIChvdXRwdXRDYWxj
KQotICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwotfQotCi1zdGF0aWMgY29uc3QgY2hhciog
ZnVuY3Rpb25QcmVmaXhGb3JPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNo
IChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6OlN1YnRyYWN0OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKLSAgICBjYXNl
IENhbGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHJldHVybiAibWlu
KCI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogcmV0dXJuICJtYXgoIjsKLSAgICBjYXNl
IENhbGNPcGVyYXRvcjo6Q2xhbXA6IHJldHVybiAiY2xhbXAoIjsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuICIiOwotfQotCi0vLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMt
NC8jc2VyaWFsaXplLWEtY2FsY3VsYXRpb24tdHJlZT4KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5v
ZGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zIHBhcmVucykKLXsKLSAg
ICAvLyBJZiByb290IGlzIGEgbnVtZXJpYyB2YWx1ZSwgb3IgYSBub24tbWF0aCBmdW5jdGlvbiwg
c2VyaWFsaXplIHJvb3QgcGVyIHRoZSBub3JtYWwgcnVsZXMgZm9yIGl0IGFuZCByZXR1cm4gdGhl
IHJlc3VsdC4KLSAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpIHsK
LSAgICAgICAgYXV0byYgdmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZT4obm9kZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlTm9kZS5jdXN0b21DU1NU
ZXh0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlzPENTU0NhbGNPcGVy
YXRpb25Ob2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNh
c3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUpOwotCi0gICAgICAgIGlmIChvcGVyYXRpb25O
b2RlLmlzQ2FsY1N1bU5vZGUoKSkgewotICAgICAgICAgICAgLy8gSWYgcm9vdCBpcyBhIFN1bSBu
b2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIuCi0gICAgICAg
ICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQotICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcoJyk7Ci0KLSAgICAgICAgICAgIC8vIFNpbXBsaWZpY2F0aW9u
IGFscmVhZHkgc29ydGVkIGNoaWxkcmVuLgotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBv
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6
ZSgpKTsKLSAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBjaGlsZCwgYW5k
IGFwcGVuZCBpdCB0byBzLgotICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxk
cmVuLmZpcnN0KCksIGJ1aWxkZXIpOwotCi0gICAgICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBv
ZiByb290IGJleW9uZCB0aGUgZmlyc3Q6Ci0gICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIE5l
Z2F0ZSBub2RlLCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIE5lZ2F0ZeKA
mXMgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAgICAgICAgICAvLyBJZiBj
aGlsZCBpcyBhIG5lZ2F0aXZlIG51bWVyaWMgdmFsdWUsIGFwcGVuZCAiIC0gIiB0byBzLCB0aGVu
IHNlcmlhbGl6ZSB0aGUgbmVnYXRpb24gb2YgY2hpbGQgYXMgbm9ybWFsIGFuZCBhcHBlbmQgdGhl
IHJlc3VsdCB0byBzLgotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhcHBlbmQgIiArICIgdG8g
cywgdGhlbiBzZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ldOwotICAgICAgICAgICAg
ICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCIgLSAiKTsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRDU1NU
ZXh0UmVjdXJzaXZlKGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZC5nZXQoKSkuY2hp
bGQoKSwgYnVpbGRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+
KGNoaWxkLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlTm9k
ZS5pc05lZ2F0aXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgLSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgbmVnYXRp
b24gb2YgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuaXRUeXBlID0gcHJp
bWl0aXZlVmFsdWVOb2RlLnZhbHVlKCkucHJpbWl0aXZlVHlwZSgpOwotICAgICAgICAgICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoMCAtIHByaW1pdGl2ZVZhbHVlTm9kZS52YWx1ZSgpLmRv
dWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyh1bml0VHlwZSkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoIiArICIpOwotICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vy
c2l2ZShjaGlsZCwgYnVpbGRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChw
YXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJyknKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgewotICAgICAg
ICAgICAgLy8gSWYgcm9vdCBpcyBhIFByb2R1Y3Qgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5p
dGlhbGx5IGNvbnRhaW5pbmcgIigiLgotICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGlu
Z1BhcmVuczo6SW5jbHVkZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKCcpOwot
Ci0gICAgICAgICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBjaGlsZHJlbi4K
LSAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwot
ICAgICAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAvLyBTZXJp
YWxpemUgcm9vdOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4KLSAgICAgICAg
ICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyKTsKLQot
ICAgICAgICAgICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhlIGZpcnN0Ogot
ICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUsIGFwcGVuZCAiIC8gIiB0
byBzLCB0aGVuIHNlcmlhbGl6ZSB0aGUgSW52ZXJ04oCZcyBjaGlsZCBhbmQgYXBwZW5kIHRoZSBy
ZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBwZW5kICIgKiAiIHRvIHMs
IHRoZW4gc2VyaWFsaXplIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgotICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsKLSAgICAgICAgICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkKSkgewotICAgICAgICAgICAgICAgICAg
ICBidWlsZGVyLmFwcGVuZCgiIC8gIik7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4
dFJlY3Vyc2l2ZShkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxk
KCksIGJ1aWxkZXIpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICogIik7Ci0gICAgICAg
ICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVk
ZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgcm9vdCBpcyBhbnl0aGluZyBidXQgYSBT
dW0sIE5lZ2F0ZSwgUHJvZHVjdCwgb3IgSW52ZXJ0IG5vZGUsIHNlcmlhbGl6ZSBhIG1hdGggZnVu
Y3Rpb24gZm9yIHRoZQotICAgICAgICAvLyBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBu
b2RlIHR5cGUsIHRyZWF0aW5nIHRoZSBub2Rl4oCZcyBjaGlsZHJlbiBhcyB0aGUgZnVuY3Rpb27i
gJlzCi0gICAgICAgIC8vIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbiBhcmd1bWVudHMsIGFu
ZCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25QcmVm
aXhGb3JPcGVyYXRvcihvcGVyYXRpb25Ob2RlLmNhbGNPcGVyYXRvcigpKSk7Ci0KLSAgICAgICAg
YXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgIEFTU0VS
VChjaGlsZHJlbi5zaXplKCkpOwotICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRy
ZW4uZmlyc3QoKSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQpOwotCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNp
dmUoY2hpbGRyZW5baV0sIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKLSAgICAgICAg
fQotICAgICAgICAKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLSAgICAKLSAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpKSB7Ci0g
ICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4obm9k
ZSk7Ci0gICAgICAgIC8vIElmIHJvb3QgaXMgYSBOZWdhdGUgbm9kZSwgbGV0IHMgYmUgYSBzdHJp
bmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigtMSAqICIuCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCItMSAqIik7Ci0gICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShuZWdhdGVOb2RlLmNoaWxk
KCksIGJ1aWxkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChpczxD
U1NDYWxjSW52ZXJ0Tm9kZT4obm9kZSkpIHsKLSAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9IGRv
d25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihub2RlKTsKLSAgICAgICAgLy8gSWYgcm9vdCBpcyBh
biBJbnZlcnQgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigx
IC8gIi4KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIjEgLyAiKTsKLSAgICAgICAgYnVpbGRDU1NU
ZXh0UmVjdXJzaXZlKGludmVydE5vZGUuY2hpbGQoKSwgYnVpbGRlcik7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAoVGV4dFN0cmVh
bSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgImNhbGMgb3BlcmF0aW9uICIgPDwgbV9vcGVyYXRv
ciA8PCAiIChjYXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGUgIiA8PCBwcmltaXRp
dmVUeXBlKCkgPDwgIikiOwotCi0gICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7
Ci0gICAgdHMgPDwgbV9jaGlsZHJlbi5zaXplKCkgPDwgIiBjaGlsZHJlbiI7Ci0gICAgZm9yIChh
dXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgibm9kZSIs
IGNoaWxkKTsKLX0KLQotYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxzKGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYgZXhwKSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gZXhw
LnR5cGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29uc3QgQ1NTQ2FsY09wZXJh
dGlvbk5vZGUmIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUm
PihleHApOwotCi0gICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IG90aGVyLm1fY2hpbGRyZW4u
c2l6ZSgpIHx8IG1fb3BlcmF0b3IgIT0gb3RoZXIubV9vcGVyYXRvcikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmICghY29tcGFyZUNTU1ZhbHVlKG1fY2hpbGRyZW5baV0sIG90aGVy
Lm1fY2hpbGRyZW5baV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpldmFsdWF0ZU9w
ZXJhdG9yKENhbGNPcGVyYXRvciBvcCwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNoaWxkcmVuKQot
ewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7Ci0gICAg
ICAgIGRvdWJsZSBzdW0gPSAwOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4p
Ci0gICAgICAgICAgICBzdW0gKz0gY2hpbGQ7Ci0gICAgICAgIHJldHVybiBzdW07Ci0gICAgfQot
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAgICAgICAgQVNTRVJUKGNoaWxkcmVu
LnNpemUoKSA9PSAyKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC0gY2hpbGRyZW5bMV07
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Ci0gICAgICAgIGRvdWJsZSBwcm9k
dWN0ID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAg
ICAgcHJvZHVjdCAqPSBjaGlsZDsKLSAgICAgICAgcmV0dXJuIHByb2R1Y3Q7Ci0gICAgfQotICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0gICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXpl
KCkgPT0gMSB8fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIGlmIChjaGlsZHJlbi5z
aXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OnF1aWV0X05hTigpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLyBjaGlsZHJlblsx
XTsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7Ci0gICAgICAgIGlmIChjaGlsZHJlbi5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZG91YmxlIG1pbmltdW0gPSBjaGlsZHJlblswXTsKLSAg
ICAgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAgICAgICBtaW5pbXVtID0g
c3RkOjptaW4obWluaW11bSwgY2hpbGQpOwotICAgICAgICByZXR1cm4gbWluaW11bTsKLSAgICB9
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogewotICAgICAgICBpZiAoY2hpbGRyZW4uaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6
cXVpZXRfTmFOKCk7Ci0gICAgICAgIGRvdWJsZSBtYXhpbXVtID0gY2hpbGRyZW5bMF07Ci0gICAg
ICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAgICAgbWF4aW11bSA9IHN0
ZDo6bWF4KG1heGltdW0sIGNoaWxkKTsKLSAgICAgICAgcmV0dXJuIG1heGltdW07Ci0gICAgfQot
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogewotICAgICAgICBpZiAoY2hpbGRyZW4uc2l6
ZSgpICE9IDMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+
OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZG91YmxlIG1pbiA9IGNoaWxkcmVuWzBdOwotICAgICAg
ICBkb3VibGUgdmFsdWUgPSBjaGlsZHJlblsxXTsKLSAgICAgICAgZG91YmxlIG1heCA9IGNoaWxk
cmVuWzJdOwotICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4
KSk7Ci0gICAgfQotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
MDsKLX0KLQotCi1jbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgewotcHVibGljOgot
ICAgIGV4cGxpY2l0IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcihDYWxjdWxhdGlvbkNhdGVn
b3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi0gICAgICAgIDogbV9kZXN0aW5hdGlvbkNhdGVnb3J5
KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi0gICAgeyB9Ci0KLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBwYXJzZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgQ1NTVmFsdWVJRCBmdW5j
dGlvbik7Ci0gICAgCi1wcml2YXRlOgotICAgIGNoYXIgb3BlcmF0b3JWYWx1ZShjb25zdCBDU1NQ
YXJzZXJUb2tlbiYgdG9rZW4pCi0gICAgewotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IERl
bGltaXRlclRva2VuKQotICAgICAgICAgICAgcmV0dXJuIHRva2VuLmRlbGltaXRlcigpOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIHBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0gICAgYm9vbCBwYXJz
ZVZhbHVlVGVybShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4mKTsKLSAgICBib29sIHBhcnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiwg
aW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFy
c2VDYWxjUHJvZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VDYWxjVmFsdWUoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsK
LQotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5OwotfTsKLQot
Ly8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI2NhbGMtc3ludGF4PjoK
LS8vIDxjYWxjKCk+ICA9IGNhbGMoIDxjYWxjLXN1bT4gKQotLy8gPG1pbigpPiAgID0gbWluKCA8
Y2FsYy1zdW0+IyApCi0vLyA8bWF4KCk+ICAgPSBtYXgoIDxjYWxjLXN1bT4jICkKLS8vIDxjbGFt
cCgpPiA9IGNsYW1wKCA8Y2FsYy1zdW0+I3szfSApCi0vLyA8c2luKCk+ICAgPSBzaW4oIDxjYWxj
LXN1bT4gKQotLy8gPGNvcygpPiAgID0gY29zKCA8Y2FsYy1zdW0+ICkKLS8vIDx0YW4oKT4gICA9
IHRhbiggPGNhbGMtc3VtPiApCi0vLyA8YXNpbigpPiAgPSBhc2luKCA8Y2FsYy1zdW0+ICkKLS8v
IDxhY29zKCk+ICA9IGFjb3MoIDxjYWxjLXN1bT4gKQotLy8gPGF0YW4oKT4gID0gYXRhbiggPGNh
bGMtc3VtPiApCi0vLyA8YXRhbjIoKT4gPSBhdGFuMiggPGNhbGMtc3VtPiwgPGNhbGMtc3VtPiAp
Ci0vLyA8cG93KCk+ICAgPSBwb3coIDxjYWxjLXN1bT4sIDxjYWxjLXN1bT4gKQotLy8gPHNxcnQo
KT4gID0gc3FydCggPGNhbGMtc3VtPiApCi0vLyA8aHlwb3QoKT4gPSBoeXBvdCggPGNhbGMtc3Vt
PiMgKQotLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+IFsgWyAnKycgfCAnLScgXSA8Y2Fs
Yy1wcm9kdWN0PiBdKgotLy8gPGNhbGMtcHJvZHVjdD4gPSA8Y2FsYy12YWx1ZT4gWyBbICcqJyB8
ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgotLy8gPGNhbGMtdmFsdWU+ID0gPG51bWJlcj4gfCA8ZGlt
ZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3VtPiApCi1SZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyhDU1NQ
YXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlvbikKLXsKLSAgICB0b2tl
bnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKLQotICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IHJlc3VsdDsKLSAgICBib29sIG9rID0gcGFyc2VDYWxjRnVuY3Rpb24odG9rZW5zLCBmdW5j
dGlvbiwgMCwgcmVzdWx0KTsKLSAgICBpZiAoIW9rIHx8ICF0b2tlbnMuYXRFbmQoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0
KSk7Ci0KLSAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkocmVzdWx0
LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8
PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgLSBhZnRlciBzaW1wbGlm
aWNhdGlvbiAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0KSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1lbnVtIFBhcnNlU3RhdGUgewotICAgIE9LLAotICAgIFRvb0RlZXAsCi0gICAg
Tm9Nb3JlVG9rZW5zCi19OwotCi1zdGF0aWMgUGFyc2VTdGF0ZSBjaGVja0RlcHRoQW5kSW5kZXgo
aW50IGRlcHRoLCBDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucykKLXsKLSAgICBpZiAodG9rZW5z
LmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBOb01vcmVUb2tlbnM7Ci0gICAgaWYgKGRlcHRoID4g
bWF4RXhwcmVzc2lvbkRlcHRoKSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJl
YW0gPDwgIkRlcHRoICIgPDwgZGVwdGggPDwgIiBleGNlZWRlZCBtYXhFeHByZXNzaW9uRGVwdGgg
IiA8PCBtYXhFeHByZXNzaW9uRGVwdGgpOwotICAgICAgICByZXR1cm4gVG9vRGVlcDsKLSAgICB9
Ci0gICAgcmV0dXJuIE9LOwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBDU1NWYWx1ZUlE
IGZ1bmN0aW9uSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJl
c3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9L
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyAiYXJndW1lbnRzIiByZWZlcnMgdG8g
dGhpbmdzIGJldHdlZW4gY29tbWFzLgotICAgIHVuc2lnbmVkIG1pbkFyZ3VtZW50Q291bnQgPSAx
OwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtYXhBcmd1bWVudENvdW50OwotCi0gICAgc3dpdGNo
IChmdW5jdGlvbklEKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZU1pbjoKLSAgICBjYXNlIENTU1ZhbHVl
TWF4OgotICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gc3RkOjpudWxsb3B0OwotICAgICAgICBi
cmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6Ci0gICAgICAgIG1pbkFyZ3VtZW50Q291bnQg
PSAzOwotICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gMzsKLSAgICAgICAgYnJlYWs7Ci0gICAg
Y2FzZSBDU1NWYWx1ZUNhbGM6Ci0gICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSAxOwotICAgICAg
ICBicmVhazsKLSAgICAvLyBUT0RPOiBjbGFtcCwgc2luLCBjb3MsIHRhbiwgYXNpbiwgYWNvcywg
YXRhbiwgYXRhbjIsIHBvdywgc3FydCwgaHlwb3QuCi0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2Rl
czsKLQotICAgIGJvb2wgcmVxdWlyZUNvbW1hID0gZmFsc2U7Ci0gICAgdW5zaWduZWQgYXJndW1l
bnRDb3VudCA9IDA7Ci0gICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgewotICAgICAgICB0b2tl
bnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKHJlcXVpcmVDb21tYSkgewotICAg
ICAgICAgICAgaWYgKHRva2Vucy5jb25zdW1lKCkudHlwZSgpICE9IENvbW1hVG9rZW4pCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0
ZXNwYWNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiBub2RlOwotICAgICAgICBpZiAoIXBhcnNlQ2FsY1N1bSh0b2tlbnMsIGRlcHRoLCBub2Rl
KSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICArK2FyZ3VtZW50Q291bnQ7
Ci0gICAgICAgIGlmIChtYXhBcmd1bWVudENvdW50ICYmIGFyZ3VtZW50Q291bnQgPiBtYXhBcmd1
bWVudENvdW50LnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
bm9kZXMuYXBwZW5kKG5vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgIHJlcXVpcmVDb21t
YSA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChhcmd1bWVudENvdW50IDwgbWluQXJndW1l
bnRDb3VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dpdGNoIChmdW5jdGlvbklE
KSB7Ci0gICAgY2FzZSBDU1NWYWx1ZU1pbjoKLSAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJh
dGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1pbiwgV1RGTW92
ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh
c2UgQ1NTVmFsdWVNYXg6Ci0gICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpNYXgsIFdURk1vdmUobm9kZXMpLCBt
X2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVl
Q2xhbXA6Ci0gICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5P
ck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpDbGFtcCwgV1RGTW92ZShub2RlcyksIG1fZGVzdGlu
YXRpb25DYXRlZ29yeSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRD
YWxjOgotICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgotICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgLy8gVE9ETzogY2xhbXAsIHNpbiwgY29zLCB0YW4sIGFzaW4sIGFjb3MsIGF0YW4sIGF0YW4y
LCBwb3csIHNxcnQsIGh5cG90Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBh
cnNlcjo6cGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4g
PSB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICBpZiAoISh0b2tlbi50
eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbiB8
fCB0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCi0gICAgYXV0byB0eXBlID0gdG9rZW4udW5pdFR5cGUoKTsKLSAgICBpZiAoY2FsY1Vu
aXRDYXRlZ29yeSh0eXBlKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJlc3VsdCA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHRva2VuLm51bWVyaWNWYWx1ZSgp
LCB0eXBlKSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tl
bnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsK
LSAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZpbmRGdW5jdGlvbklkID0gWyZdKENTU1ZhbHVl
SUQmIGZ1bmN0aW9uSWQpIHsKLSAgICAgICAgaWYgKHRva2Vucy5wZWVrKCkudHlwZSgpID09IExl
ZnRQYXJlbnRoZXNpc1Rva2VuKSB7Ci0gICAgICAgICAgICBmdW5jdGlvbklkID0gQ1NTVmFsdWVD
YWxjOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBmdW5j
dGlvbklkID0gdG9rZW5zLnBlZWsoKS5mdW5jdGlvbklkKCk7Ci0gICAgICAgIHJldHVybiBDU1ND
YWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpOwotICAgIH07Ci0KLSAgICBDU1NW
YWx1ZUlEIGZ1bmN0aW9uSWQ7Ci0gICAgaWYgKGZpbmRGdW5jdGlvbklkKGZ1bmN0aW9uSWQpKSB7
Ci0gICAgICAgIENTU1BhcnNlclRva2VuUmFuZ2UgaW5uZXJSYW5nZSA9IHRva2Vucy5jb25zdW1l
QmxvY2soKTsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIGlu
bmVyUmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0dXJuIHBhcnNlQ2FsY0Z1
bmN0aW9uKGlubmVyUmFuZ2UsIGZ1bmN0aW9uSWQsIGRlcHRoICsgMSwgcmVzdWx0KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gcGFyc2VWYWx1ZSh0b2tlbnMsIHJlc3VsdCk7Ci19Ci0KLWJvb2wgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9kdWN0KENTU1BhcnNlclRva2Vu
UmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYg
cmVzdWx0KQotewotICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0g
T0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IGZpcnN0VmFsdWU7Ci0gICAgaWYgKCFwYXJzZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRo
LCBmaXJzdFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKLQotICAgIHdoaWxlICghdG9rZW5zLmF0RW5k
KCkpIHsKLSAgICAgICAgY2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9r
ZW5zLnBlZWsoKSk7Ci0gICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2Fz
dDxjaGFyPihDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KSAmJiBvcGVyYXRvckNoYXJhY3RlciAhPSBz
dGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRpdmlkZSkpCi0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgICAg
IAotICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBuZXh0VmFsdWU7Ci0gICAg
ICAgIGlmICghcGFyc2VDYWxjVmFsdWUodG9rZW5zLCBkZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4
dFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChvcGVyYXRv
ckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRpdmlkZSkpCi0g
ICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKG5leHRWYWx1
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgICAgICBpZiAoZmlyc3RWYWx1ZSkKLSAgICAgICAg
ICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAg
IG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAg
aWYgKG5vZGVzLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGZpcnN0VmFs
dWUpOwotICAgICAgICByZXR1cm4gISFyZXN1bHQ7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoV1RGTW92ZShub2RlcykpOwotICAgIHJl
dHVybiAhIXJlc3VsdDsKLX0KLQotYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBh
cnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFu
ZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVlOwotICAgIGlmICghcGFy
c2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsK
LQotICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKLSAgICAgICAgY2hhciBvcGVyYXRvckNo
YXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7Ci0gICAgICAgIGlmIChvcGVy
YXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkFkZCkgJiYg
b3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpTdWJ0
cmFjdCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAoKCZ0b2tlbnMucGVlaygp
IC0gMSktPnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7IC8vIGNhbGMoMXB4KyAycHgpIGlzIGludmFsaWQKLQotICAgICAgICB0b2tlbnMuY29uc3Vt
ZSgpOwotICAgICAgICBpZiAodG9rZW5zLnBlZWsoKS50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2Vu
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCArMnB4KSBpcyBpbnZhbGlk
Ci0KLSAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0KLSAgICAg
ICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbmV4dFZhbHVlOwotICAgICAgICBpZiAo
IXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChvcGVyYXRvckNoYXJh
Y3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1YnRyYWN0KSkKLSAgICAg
ICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUobmV4dFZhbHVlLnJl
bGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAgIGlmIChmaXJzdFZhbHVlKQotICAgICAgICAgICAg
bm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAgICAgbm9k
ZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0KLSAgICBpZiAo
bm9kZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZmlyc3RWYWx1ZSk7
Ci0gICAgICAgIHJldHVybiAhIXJlc3VsdDsKLSAgICB9Ci0KLSAgICByZXN1bHQgPSBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKLSAgICByZXR1cm4gISFy
ZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBj
cmVhdGVCbGVuZEhhbGYoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSwgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2Rl
OjpjcmVhdGUoQ2FsY09wZXJhdG9yOjpNdWx0aXBseSwgY3JlYXRlQ1NTKGxlbmd0aCwgc3R5bGUp
LAotICAgICAgICBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKSk7Ci19Ci0K
LXN0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNTUyhjb25z
dCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBub2RlcywgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPj4gdmFsdWVzOwotICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5vZGVz
LnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKLSAgICAgICAgYXV0byBj
c3NOb2RlID0gY3JlYXRlQ1NTKCpub2RlLCBzdHlsZSk7Ci0gICAgICAgIGlmICghY3NzTm9kZSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5kKGNz
c05vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotICAgIHJldHVybiB2YWx1ZXM7Ci19Ci0K
LXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBub2RlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAg
c3dpdGNoIChub2RlLnR5cGUoKSkgewotICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6
TnVtYmVyOiB7Ci0gICAgICAgIGZsb2F0IHZhbHVlID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25O
dW1iZXI+KG5vZGUpLnZhbHVlKCk7IC8vIGRvdWJsZT8KLSAgICAgICAgcmV0dXJuIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVl
LCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNz
aW9uTm9kZVR5cGU6Okxlbmd0aDogewotICAgICAgICBhdXRvJiBsZW5ndGggPSBkb3duY2FzdDxD
YWxjRXhwcmVzc2lvbkxlbmd0aD4obm9kZSkubGVuZ3RoKCk7Ci0gICAgICAgIGlmICghbGVuZ3Ro
LmlzUGVyY2VudCgpICYmIGxlbmd0aC5pc1plcm8oKSkKLSAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOwotICAgICAgICByZXR1cm4gY3JlYXRlQ1NTKGxlbmd0aCwgc3R5bGUpOwotICAgIH0KLQot
ICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb246IHsKLSAgICAgICAgYXV0
byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRpb24+
KG5vZGUpLmNoaWxkKCksIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjaGlsZE5vZGUpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0NhbGNOZWdhdGVOb2RlOjpj
cmVhdGUoY2hpbGROb2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLSAgICBjYXNlIENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbjogewotICAgICAgICBhdXRvIGNoaWxkTm9kZSA9
IGNyZWF0ZUNTUygqZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG5vZGUpLmNoaWxk
KCksIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjaGlsZE5vZGUpCi0gICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUoY2hpbGRO
b2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9k
ZVR5cGU6Ok9wZXJhdGlvbjogewotICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNh
c3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG5vZGUpOwotICAgICAgICBhdXRvJiBvcGVyYXRp
b25DaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAgICAgICAgQ2FsY09wZXJh
dG9yIG9wID0gb3BlcmF0aW9uTm9kZS5nZXRPcGVyYXRvcigpOwotICAgICAgICAKLSAgICAgICAg
c3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7Ci0gICAgICAg
ICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7
Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQotICAg
ICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNoaWxkcmVuWzBdKTsKLSAgICAgICAgICAgIHJl
dHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUoY2hpbGRyZW4pKTsK
LSAgICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHsKLSAgICAg
ICAgICAgIEFTU0VSVChvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0KLSAgICAgICAg
ICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gdmFsdWVzOwotICAgICAgICAg
ICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgp
KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBmaXJzdENoaWxkID0gY3JlYXRlQ1NT
KCpvcGVyYXRpb25DaGlsZHJlblswXSwgc3R5bGUpOwotICAgICAgICAgICAgYXV0byBzZWNvbmRD
aGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMV0sIHN0eWxlKTsKLQotICAgICAg
ICAgICAgaWYgKCFzZWNvbmRDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RDaGls
ZDsKLQotICAgICAgICAgICAgYXV0byBuZWdhdGVOb2RlID0gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNy
ZWF0ZShzZWNvbmRDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIGlmICghZmly
c3RDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmVnYXRlTm9kZTsKLQotICAgICAgICAg
ICAgdmFsdWVzLmFwcGVuZChmaXJzdENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAg
ICAgdmFsdWVzLmFwcGVuZChXVEZNb3ZlKG5lZ2F0ZU5vZGUpKTsKLQotICAgICAgICAgICAgcmV0
dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZSh2YWx1ZXMpKTsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHsKLSAgICAgICAg
ICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxlKTsK
LSAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNy
ZWF0ZVByb2R1Y3QoV1RGTW92ZShjaGlsZHJlbikpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYXRpb25DaGls
ZHJlbi5zaXplKCkgPT0gMik7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4gdmFsdWVzOwotICAgICAgICAgICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgYXV0byBmaXJzdENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblswXSwgc3R5
bGUpOwotICAgICAgICAgICAgaWYgKCFmaXJzdENoaWxkKQotICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotCi0gICAgICAgICAgICBhdXRvIHNlY29uZENoaWxkID0gY3JlYXRlQ1NTKCpv
cGVyYXRpb25DaGlsZHJlblsxXSwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKCFzZWNvbmRDaGls
ZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGF1dG8gaW52
ZXJ0Tm9kZSA9IENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUoc2Vjb25kQ2hpbGQucmVsZWFzZU5v
bk51bGwoKSk7Ci0KLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoZmlyc3RDaGlsZC5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoV1RGTW92ZShpbnZlcnROb2Rl
KSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJv
ZHVjdChjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxlKSk7Ci0gICAgICAgIH0KLSAg
ICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6
Ok1heDoKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7Ci0gICAgICAgICAgICBh
dXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7Ci0gICAg
ICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVN
aW5Pck1heE9yQ2xhbXAob3AsIFdURk1vdmUoY2hpbGRyZW4pLCBvcGVyYXRpb25Ob2RlLmRlc3Rp
bmF0aW9uQ2F0ZWdvcnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExl
bmd0aDogewotICAgICAgICAvLyBGSVhNRTogKGh0dHA6Ly93ZWJraXQub3JnL2IvMTIyMDM2KSBD
cmVhdGUgYSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgZXF1aXZhbGVudCBvZiBDYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoLgotICAgICAgICBhdXRvJiBibGVuZCA9IGRvd25jYXN0PENhbGNFeHByZXNz
aW9uQmxlbmRMZW5ndGg+KG5vZGUpOwotICAgICAgICBmbG9hdCBwcm9ncmVzcyA9IGJsZW5kLnBy
b2dyZXNzKCk7Ci0gICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENh
bGNPcGVyYXRvcjo6QWRkLCBjcmVhdGVCbGVuZEhhbGYoYmxlbmQuZnJvbSgpLCBzdHlsZSwgMSAt
IHByb2dyZXNzKSwgY3JlYXRlQmxlbmRIYWxmKGJsZW5kLnRvKCksIHN0eWxlLCBwcm9ncmVzcykp
OwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OlVuZGVmaW5lZDoKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwot
fQotCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0
IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgc3dpdGNo
IChsZW5ndGgudHlwZSgpKSB7Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpQZXJjZW50OgotICAgIGNh
c2UgTGVuZ3RoVHlwZTo6Rml4ZWQ6Ci0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsZW5ndGgsIHN0eWxlKSk7
Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpDYWxjdWxhdGVkOgotICAgICAgICByZXR1cm4gY3JlYXRl
Q1NTKGxlbmd0aC5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpLCBzdHlsZSk7Ci0gICAg
Y2FzZSBMZW5ndGhUeXBlOjpBdXRvOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6SW50cmluc2ljOgot
ICAgIGNhc2UgTGVuZ3RoVHlwZTo6TWluSW50cmluc2ljOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6
TWluQ29udGVudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6Ok1heENvbnRlbnQ6Ci0gICAgY2FzZSBM
ZW5ndGhUeXBlOjpGaWxsQXZhaWxhYmxlOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6Rml0Q29udGVu
dDoKLSAgICBjYXNlIExlbmd0aFR5cGU6OlJlbGF0aXZlOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6
VW5kZWZpbmVkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAgcmV0
dXJuIG51bGxwdHI7Ci19Ci0KLVN0cmluZyBDU1NDYWxjVmFsdWU6OmN1c3RvbUNTU1RleHQoKSBj
b25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6YnVpbGRDU1NUZXh0KG1fZXhwcmVzc2lvbi5nZXQoKSwgYnVpbGRlcik7Ci0gICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotYm9vbCBDU1NDYWxjVmFsdWU6OmVxdWFscyhj
b25zdCBDU1NDYWxjVmFsdWUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBjb21wYXJlQ1NT
VmFsdWUobV9leHByZXNzaW9uLCBvdGhlci5tX2V4cHJlc3Npb24pOwotfQotCi1pbmxpbmUgZG91
YmxlIENTU0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSB2YWx1ZSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAw
ID8gMCA6IHZhbHVlOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpkb3VibGVWYWx1ZSgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJlc3Npb24tPmRv
dWJsZVZhbHVlKHByaW1pdGl2ZVR5cGUoKSkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpj
b21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJl
c3Npb24tPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSkpOwotfQotCi1ib29sIENTU0Nh
bGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCBmdW5jdGlvbklkKQotewotICAgIHN3
aXRjaCAoZnVuY3Rpb25JZCkgewotICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgotICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRDYWxjOgotICAgIGNhc2UgQ1NTVmFsdWVNaW46Ci0gICAgY2FzZSBDU1NWYWx1
ZU1heDoKLSAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIENTU0NhbGNWYWx1ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsK
LSAgICB0cyA8PCBpbmRlbnQgPDwgIigiIDw8ICJDU1NDYWxjVmFsdWUiOwotCi0gICAgVGV4dFN0
cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0gICAgbXVsdGlsaW5lU3RyZWFtLnNldEluZGVudCh0cy5p
bmRlbnQoKSArIDIpOwotCi0gICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgic2hvdWxk
IGNsYW1wIG5vbi1uZWdhdGl2ZSIsIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKTsKLSAgICBt
dWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJleHByZXNzaW9uIiwgbV9leHByZXNzaW9uLmdl
dCgpKTsKLQotICAgIHRzIDw8IG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Ci0gICAgdHMgPDwg
IilcbiI7Ci19Ci0KLVJlZlB0cjxDU1NDYWxjVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKENT
U1ZhbHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHJhbmdlKQot
ewotICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlciBwYXJzZXIoZGVzdGluYXRpb25DYXRl
Z29yeSk7Ci0gICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VyLnBhcnNlQ2FsYyh0b2tlbnMsIGZ1
bmN0aW9uKTsKLSAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1ZShleHByZXNzaW9uLnJl
bGVhc2VOb25OdWxsKCksIHJhbmdlICE9IFZhbHVlUmFuZ2U6OkFsbCkpOwotICAgIExPR19XSVRI
X1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3JlYXRlICIgPDwgKnJlc3Vs
dCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLVJlZlB0cjxDU1NDYWxjVmFsdWU+IENT
U0NhbGNWYWx1ZTo6Y3JlYXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgYXV0byBleHByZXNzaW9uID0gY3JlYXRlQ1NTKHZh
bHVlLmV4cHJlc3Npb24oKSwgc3R5bGUpOwotICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNpbXBsaWZpZWRFeHByZXNzaW9uID0gQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSk7Ci0K
LSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoV1RGTW92ZShzaW1w
bGlmaWVkRXhwcmVzc2lvbiksIHZhbHVlLnNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSgpKSk7Ci0g
ICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUg
ZnJvbSBDYWxjdWxhdGlvblZhbHVlOiAiIDw8ICpyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7
Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgY2F0ZWdvcnkpCi17Ci0gICAgc3dpdGNoIChjYXRlZ29yeSkgewotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOiB0cyA8PCAibnVtYmVyIjsgYnJlYWs7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6IHRzIDw8ICJsZW5ndGgiOyBicmVhazsK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHRzIDw8ICJwZXJjZW50Ijsg
YnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOiB0cyA8
PCAicGVyY2VudC1udW1iZXIiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnRMZW5ndGg6IHRzIDw8ICJwZXJjZW50LWxlbmd0aCI7IGJyZWFrOwotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6IHRzIDw8ICJhbmdsZSI7IGJyZWFrOwotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTogdHMgPDwgInRpbWUiOyBicmVhazsKLSAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTogdHMgPDwgImZyZXF1ZW5jeSI7IGJy
ZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6IHRzIDw8ICJvdGhlciI7
IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY1ZhbHVlJiB2YWx1ZSkKLXsKLSAgICB2
YWx1ZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAkocmV2aXNp
b24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAko
bm9uZXhpc3RlbnQpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
LSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0KLW5hbWVzcGFjZSBXVEYgewotY2xhc3Mg
VGV4dFN0cmVhbTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NQYXJzZXJU
b2tlblJhbmdlOwotY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKLWNsYXNzIFJlbmRl
clN0eWxlOwotCi1jbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHsKLXB1YmxpYzoKLSAgICBlbnVtIFR5cGUgewotICAg
ICAgICBDc3NDYWxjUHJpbWl0aXZlVmFsdWUgPSAxLAotICAgICAgICBDc3NDYWxjT3BlcmF0aW9u
LAotICAgICAgICBDc3NDYWxjTmVnYXRlLAotICAgICAgICBDc3NDYWxjSW52ZXJ0LAotICAgIH07
Ci0KLSAgICB2aXJ0dWFsIH5DU1NDYWxjRXhwcmVzc2lvbk5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAg
dmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHN0ZDo6dW5pcXVl
X3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgZG91
YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGRvdWJsZSBjb21w
dXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0ID0gMDsK
LSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnkgPT0gb3RoZXIubV9jYXRlZ29yeTsgfQotICAg
IHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgQ1NTVW5pdFR5cGUg
cHJpbWl0aXZlVHlwZSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGly
ZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29u
c3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKLQotICAgIENh
bGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5OyB9
Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi1wcm90
ZWN0ZWQ6Ci0gICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0
ZWdvcnkpCi0gICAgICAgIDogbV9jYXRlZ29yeShjYXRlZ29yeSkKLSAgICB7Ci0gICAgfQotCi1w
cml2YXRlOgotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9jYXRlZ29yeTsKLX07Ci0KLWNsYXNz
IENTU0NhbGNWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25z
dCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5LCBWYWx1ZVJhbmdlKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBj
cmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KLSAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9leHByZXNz
aW9uLT5jYXRlZ29yeSgpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3Q7Ci0gICAg
ZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikg
Y29uc3Q7Ci0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZXhwcmVzc2lvbi0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAgICBSZWY8Q2FsY3VsYXRpb25WYWx1
ZT4gY3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UpOwot
Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JikgY29uc3Q7Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OwotCi0g
ICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKLSAgICBib29sIGVxdWFscyhjb25zdCBD
U1NDYWxjVmFsdWUmKSBjb25zdDsKLSAgICAKLSAgICBzdGF0aWMgYm9vbCBpc0NhbGNGdW5jdGlv
bihDU1NWYWx1ZUlEKTsKLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgQ1NTQ2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGJv
b2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKTsKLQotICAgIGRvdWJsZSBjbGFtcFRvUGVybWl0
dGVkUmFuZ2UoZG91YmxlKSBjb25zdDsKLQotICAgIGNvbnN0IFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IG1fZXhwcmVzc2lvbjsKLSAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZl
OwotfTsKLQotaW5saW5lIENTU0NhbGNWYWx1ZTo6Q1NTQ2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgZXhwcmVzc2lvbiwgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUp
Ci0gICAgOiBDU1NWYWx1ZShDYWxjdWxhdGlvbkNsYXNzKQotICAgICwgbV9leHByZXNzaW9uKFdU
Rk1vdmUoZXhwcmVzc2lvbikpCi0gICAgLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZShzaG91
bGRDbGFtcFRvTm9uTmVnYXRpdmUpCi17Ci19Ci0KLWlubGluZSBSZWY8Q2FsY3VsYXRpb25WYWx1
ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHJldHVybiBDYWxj
dWxhdGlvblZhbHVlOjpjcmVhdGUobV9leHByZXNzaW9uLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihj
b252ZXJzaW9uRGF0YSksCi0gICAgICAgIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID8gVmFs
dWVSYW5nZTo6Tm9uTmVnYXRpdmUgOiBWYWx1ZVJhbmdlOjpBbGwpOwotfQotCi1pbmxpbmUgdm9p
ZCBDU1NDYWxjVmFsdWU6OnNldFBlcm1pdHRlZFZhbHVlUmFuZ2UoVmFsdWVSYW5nZSByYW5nZSkK
LXsKLSAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA9IHJhbmdlICE9IFZhbHVlUmFuZ2U6
OkFsbDsKLX0KLQotaW5saW5lIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0
Ci17Ci0gICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVu
Y2llcyh2YWx1ZXMpOwotfQotCi1pbmxpbmUgdm9pZCBDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJl
Y3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2
YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotV1RGOjpUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENhbGN1bGF0aW9uQ2F0ZWdvcnkpOwotV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENTU0NhbGNWYWx1ZSYp
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NT
X1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKLQotI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVk
aWNhdGUpIFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5
cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAotU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19FTkQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0dyYWRp
ZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVu
dFZhbHVlLmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0dy
YWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVk
ZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgi
Ci0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ29sb3JCbGVuZGluZy5oIgpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKIAogI2lu
Y2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5o
IgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIK
ICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NNYXJrdXAuaCIKQEAgLTMwLDYg
KzMwLDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNp
bmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JTZXJpYWxpemF0aW9uLmgi
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdz
LmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKIAogI3ByYWdt
YSBvbmNlCiAKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NT
Q2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkNTU1By
aW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBA
CiAKICNpbmNsdWRlICJDU1NBc3BlY3RSYXRpb1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQm9yZGVy
SW1hZ2VTbGljZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2lu
Y2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ3Jvc3Nm
YWRlVmFsdWUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNDYXRlZ29y
eU1hcHBpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNDYXRlZ29yeU1hcHBpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNT
U0NhbGNDYXRlZ29yeU1hcHBpbmcuaCIKKworI2luY2x1ZGUgIkNTU1VuaXRzLmgiCisjaW5jbHVk
ZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbGN1
bGF0aW9uQ2F0ZWdvcnkgY2FsY1VuaXRDYXRlZ29yeShDU1NVbml0VHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI7CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0VNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1BDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1JFTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NIUzoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19WTUFYOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOworICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0dSQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46CisgICAgICAgIHJldHVybiBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTVM6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpUaW1lOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19IWjoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfS0haOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6RnJlcXVlbmN5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjsKKyAgICB9Cit9CisKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY3VsYXRp
b25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICAgICAgcmV0
dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUFg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19NTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1BUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Okxlbmd0aDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICAgICAg
cmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgorICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
SFo6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKKyAgICAgICAgcmV0dXJuIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1T
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0xIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUkxIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkg6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1ZNQVg6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOworICAgIH0KK30KKworQ1NTVW5pdFR5cGUgY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxj
dWxhdGlvbkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkpCit7CisgICAgc3dp
dGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOiBy
ZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGg6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1BYOworICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFH
RTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOiByZXR1cm4gQ1NTVW5pdFR5
cGU6OkNTU19ERUc7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOiByZXR1cm4g
Q1NTVW5pdFR5cGU6OkNTU19NUzsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1
ZW5jeTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfSFo7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1i
ZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVy
biBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Cit9CisKK2Jvb2wgaGFzRG91YmxlVmFsdWUoQ1NT
VW5pdFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0VYUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfQ006CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19E
RUc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfR1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RJTUVOU0lPTjoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfVlc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19EUFBYOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUEk6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQQ006CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0ZSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19TVFJJTkc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0ZPTlRf
RkFNSUxZOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VUkk6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lERU5UOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19BVFRSOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19DT1VOVEVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19S
RUNUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SR0JDT0xPUjoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUEFJUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVU5JQ09ERV9SQU5H
RToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ09VTlRFUl9OQU1FOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19TSEFQRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVBRDoKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfQ0FMQzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJ
VEhfTlVNQkVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lU
SF9MRU5HVEg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BST1BFUlRZX0lEOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH07CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0NhdGVnb3J5TWFw
cGluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGND
YXRlZ29yeU1hcHBpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBD
U1NVbml0VHlwZSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1
aW50OF90OworCitDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGNVbml0Q2F0ZWdvcnkoQ1NTVW5pdFR5
cGUpOworQ2FsY3VsYXRpb25DYXRlZ29yeSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRp
b24oQ1NTVW5pdFR5cGUpOworQ1NTVW5pdFR5cGUgY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxh
dGlvbkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnkpOworYm9vbCBoYXNEb3VibGVWYWx1ZShD
U1NVbml0VHlwZSk7CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNF
eHByZXNzaW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8
KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7Cisg
ICAgbm9kZS5kdW1wKHRzKTsKKyAgICByZXR1cm4gdHM7Cit9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CitTdHJpbmcgcHJldHR5UHJpbnROb2RlKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9k
ZSkKK3sKKyAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKKyAgICBtdWx0aWxpbmVTdHJl
YW0gPDwgbm9kZTsKKyAgICByZXR1cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKK30KKwor
U3RyaW5nIHByZXR0eVByaW50Tm9kZXMoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiYgbm9kZXMpCit7CisgICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07CisgICAg
bXVsdGlsaW5lU3RyZWFtIDw8IG5vZGVzOworICAgIHJldHVybiBtdWx0aWxpbmVTdHJlYW0ucmVs
ZWFzZSgpOworfQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNFeHByZXNzaW9uTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAi
Q2FsY3VsYXRpb25DYXRlZ29yeS5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKKwor
ZW51bSBDU1NQcm9wZXJ0eUlEIDogdWludDE2X3Q7CisKK2VudW0gY2xhc3MgQ1NTVW5pdFR5cGUg
OiB1aW50OF90OworCitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgOiBwdWJsaWMgUmVmQ291
bnRlZDxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHsKK3B1YmxpYzoKKyAgICBlbnVtIFR5cGUgewor
ICAgICAgICBDc3NDYWxjUHJpbWl0aXZlVmFsdWUgPSAxLAorICAgICAgICBDc3NDYWxjT3BlcmF0
aW9uLAorICAgICAgICBDc3NDYWxjTmVnYXRlLAorICAgICAgICBDc3NDYWxjSW52ZXJ0LAorICAg
IH07CisKKyAgICB2aXJ0dWFsIH5DU1NDYWxjRXhwcmVzc2lvbk5vZGUoKSA9IGRlZmF1bHQ7Cisg
ICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUg
ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGRvdWJsZSBj
b21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0ID0g
MDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYg
b3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnkgPT0gb3RoZXIubV9jYXRlZ29yeTsgfQor
ICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgQ1NTVW5pdFR5
cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0
RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Jikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKKworICAg
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5
OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgPSAwOworCitw
cm90ZWN0ZWQ6CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkg
Y2F0ZWdvcnkpCisgICAgICAgIDogbV9jYXRlZ29yeShjYXRlZ29yeSkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9jYXRlZ29yeTsKK307CisKK1Rl
eHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IENTU0NhbGNFeHByZXNzaW9u
Tm9kZSYpOworCisjaWYgIUxPR19ESVNBQkxFRAorU3RyaW5nIHByZXR0eVByaW50Tm9kZShjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKTsKK1N0cmluZyBwcmV0dHlQcmludE5vZGVzKGNvbnN0
IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mKTsKKyNlbmRpZgorCit9CisKKyNk
ZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKFRvVmFs
dWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUucHJlZGlj
YXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNw
cAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlci5oIgorCisjaW5jbHVkZSAiQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIgorI2lu
Y2x1ZGUgIkNTU0NhbGNJbnZlcnROb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUu
aCIKKyNpbmNsdWRlICJDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NQYXJzZXJUb2tlbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKKyNp
bmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGNvbnN0
ZXhwciBpbnQgbWF4RXhwcmVzc2lvbkRlcHRoID0gMTAwOworCisvLyA8aHR0cHM6Ly9kcmFmdHMu
Y3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jY2FsYy1zeW50YXg+OgorLy8gPGNhbGMoKT4gID0gY2Fs
YyggPGNhbGMtc3VtPiApCisvLyA8bWluKCk+ICAgPSBtaW4oIDxjYWxjLXN1bT4jICkKKy8vIDxt
YXgoKT4gICA9IG1heCggPGNhbGMtc3VtPiMgKQorLy8gPGNsYW1wKCk+ID0gY2xhbXAoIDxjYWxj
LXN1bT4jezN9ICkKKy8vIDxzaW4oKT4gICA9IHNpbiggPGNhbGMtc3VtPiApCisvLyA8Y29zKCk+
ICAgPSBjb3MoIDxjYWxjLXN1bT4gKQorLy8gPHRhbigpPiAgID0gdGFuKCA8Y2FsYy1zdW0+ICkK
Ky8vIDxhc2luKCk+ICA9IGFzaW4oIDxjYWxjLXN1bT4gKQorLy8gPGFjb3MoKT4gID0gYWNvcygg
PGNhbGMtc3VtPiApCisvLyA8YXRhbigpPiAgPSBhdGFuKCA8Y2FsYy1zdW0+ICkKKy8vIDxhdGFu
MigpPiA9IGF0YW4yKCA8Y2FsYy1zdW0+LCA8Y2FsYy1zdW0+ICkKKy8vIDxwb3coKT4gICA9IHBv
dyggPGNhbGMtc3VtPiwgPGNhbGMtc3VtPiApCisvLyA8c3FydCgpPiAgPSBzcXJ0KCA8Y2FsYy1z
dW0+ICkKKy8vIDxoeXBvdCgpPiA9IGh5cG90KCA8Y2FsYy1zdW0+IyApCisvLyA8Y2FsYy1zdW0+
ID0gPGNhbGMtcHJvZHVjdD4gWyBbICcrJyB8ICctJyBdIDxjYWxjLXByb2R1Y3Q+IF0qCisvLyA8
Y2FsYy1wcm9kdWN0PiA9IDxjYWxjLXZhbHVlPiBbIFsgJyonIHwgJy8nIF0gPGNhbGMtdmFsdWU+
IF0qCisvLyA8Y2FsYy12YWx1ZT4gPSA8bnVtYmVyPiB8IDxkaW1lbnNpb24+IHwgPHBlcmNlbnRh
Z2U+IHwgKCA8Y2FsYy1zdW0+ICkKK1JlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFuZ2UgdG9r
ZW5zLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKQoreworICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFj
ZSgpOworCisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcmVzdWx0OworICAgIGJv
b2wgb2sgPSBwYXJzZUNhbGNGdW5jdGlvbih0b2tlbnMsIGZ1bmN0aW9uLCAwLCByZXN1bHQpOwor
ICAgIGlmICghb2sgfHwgIXRva2Vucy5hdEVuZCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIExPR19X
SVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VDYWxjICIgPDwgcHJldHR5UHJpbnROb2RlKCpyZXN1bHQpKTsKKworICAgIHJlc3VsdCA9
IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7
CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjRXhwcmVzc2lv
bk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAtIGFmdGVyIHNpbXBsaWZpY2F0aW9uICIgPDwgcHJldHR5
UHJpbnROb2RlKCpyZXN1bHQpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2NoYXIgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpvcGVyYXRvclZhbHVlKGNvbnN0IENTU1BhcnNlclRv
a2VuJiB0b2tlbikKK3sKKyAgICBpZiAodG9rZW4udHlwZSgpID09IERlbGltaXRlclRva2VuKQor
ICAgICAgICByZXR1cm4gdG9rZW4uZGVsaW1pdGVyKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Vu
dW0gUGFyc2VTdGF0ZSB7CisgICAgT0ssCisgICAgVG9vRGVlcCwKKyAgICBOb01vcmVUb2tlbnMK
K307CisKK3N0YXRpYyBQYXJzZVN0YXRlIGNoZWNrRGVwdGhBbmRJbmRleChpbnQgZGVwdGgsIENT
U1BhcnNlclRva2VuUmFuZ2UgdG9rZW5zKQoreworICAgIGlmICh0b2tlbnMuYXRFbmQoKSkKKyAg
ICAgICAgcmV0dXJuIE5vTW9yZVRva2VuczsKKyAgICBpZiAoZGVwdGggPiBtYXhFeHByZXNzaW9u
RGVwdGgpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRGVwdGgg
IiA8PCBkZXB0aCA8PCAiIGV4Y2VlZGVkIG1heEV4cHJlc3Npb25EZXB0aCAiIDw8IG1heEV4cHJl
c3Npb25EZXB0aCk7CisgICAgICAgIHJldHVybiBUb29EZWVwOworICAgIH0KKyAgICByZXR1cm4g
T0s7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNGdW5j
dGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb25JRCwg
aW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAg
IGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vICJhcmd1bWVudHMiIHJlZmVycyB0byB0aGluZ3MgYmV0d2Vl
biBjb21tYXMuCisgICAgdW5zaWduZWQgbWluQXJndW1lbnRDb3VudCA9IDE7CisgICAgT3B0aW9u
YWw8dW5zaWduZWQ+IG1heEFyZ3VtZW50Q291bnQ7CisKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSUQp
IHsKKyAgICBjYXNlIENTU1ZhbHVlTWluOgorICAgIGNhc2UgQ1NTVmFsdWVNYXg6CisgICAgICAg
IG1heEFyZ3VtZW50Q291bnQgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ1NTVmFsdWVDbGFtcDoKKyAgICAgICAgbWluQXJndW1lbnRDb3VudCA9IDM7CisgICAgICAg
IG1heEFyZ3VtZW50Q291bnQgPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVl
Q2FsYzoKKyAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IDE7CisgICAgICAgIGJyZWFrOworICAg
IC8vIFRPRE86IGNsYW1wLCBzaW4sIGNvcywgdGFuLCBhc2luLCBhY29zLCBhdGFuLCBhdGFuMiwg
cG93LCBzcXJ0LCBoeXBvdC4KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisK
KyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworCisgICAgYm9v
bCByZXF1aXJlQ29tbWEgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBhcmd1bWVudENvdW50ID0gMDsK
KyAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7CisgICAgICAgIHRva2Vucy5jb25zdW1lV2hp
dGVzcGFjZSgpOworICAgICAgICBpZiAocmVxdWlyZUNvbW1hKSB7CisgICAgICAgICAgICBpZiAo
dG9rZW5zLmNvbnN1bWUoKS50eXBlKCkgIT0gQ29tbWFUb2tlbikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5vZGU7Cisg
ICAgICAgIGlmICghcGFyc2VDYWxjU3VtKHRva2VucywgZGVwdGgsIG5vZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICsrYXJndW1lbnRDb3VudDsKKyAgICAgICAgaWYg
KG1heEFyZ3VtZW50Q291bnQgJiYgYXJndW1lbnRDb3VudCA+IG1heEFyZ3VtZW50Q291bnQudmFs
dWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBub2Rlcy5hcHBlbmQo
bm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgcmVxdWlyZUNvbW1hID0gdHJ1ZTsKKyAg
ICB9CisgICAgCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCBtaW5Bcmd1bWVudENvdW50KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSUQpIHsKKyAgICBjYXNl
IENTU1ZhbHVlTWluOgorICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3Jl
YXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6TWluLCBXVEZNb3ZlKG5vZGVzKSwgbV9k
ZXN0aW5hdGlvbkNhdGVnb3J5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZU1h
eDoKKyAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4
T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1heCwgV1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25D
YXRlZ29yeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKKyAgICAg
ICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChD
YWxjT3BlcmF0b3I6OkNsYW1wLCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENhbGM6CisgICAgY2Fz
ZSBDU1NWYWx1ZUNhbGM6CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVTdW0oV1RGTW92ZShub2RlcykpOworICAgICAgICBicmVhazsKKyAgICAvLyBUT0RPOiBj
bGFtcCwgc2luLCBjb3MsIHRhbiwgYXNpbiwgYWNvcywgYXRhbiwgYXRhbjIsIHBvdywgc3FydCwg
aHlwb3QKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
ISFyZXN1bHQ7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZh
bHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogQWRkIGNvZGUgaGVyZSB0byBwYXJzZSBD
U1NWYWxpZElEIGZvciBuYW1lZCBjb25zdGFudHMuCisKKyAgICBDU1NQYXJzZXJUb2tlbiB0b2tl
biA9IHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOworICAgIGlmICghKHRva2Vu
LnR5cGUoKSA9PSBOdW1iZXJUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gUGVyY2VudGFnZVRva2Vu
IHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBhdXRvIHR5cGUgPSB0b2tlbi51bml0VHlwZSgpOworICAgIGlmIChjYWxj
VW5pdENhdGVnb3J5KHR5cGUpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmVzdWx0ID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodG9rZW4ubnVtZXJpY1ZhbHVl
KCksIHR5cGUpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1ZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHRv
a2VucywgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQor
eworICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZmluZEZ1bmN0aW9uSWQgPSBbJl0oQ1NTVmFs
dWVJRCYgZnVuY3Rpb25JZCkgeworICAgICAgICBpZiAodG9rZW5zLnBlZWsoKS50eXBlKCkgPT0g
TGVmdFBhcmVudGhlc2lzVG9rZW4pIHsKKyAgICAgICAgICAgIGZ1bmN0aW9uSWQgPSBDU1NWYWx1
ZUNhbGM7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGZ1
bmN0aW9uSWQgPSB0b2tlbnMucGVlaygpLmZ1bmN0aW9uSWQoKTsKKyAgICAgICAgcmV0dXJuIENT
U0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oZnVuY3Rpb25JZCk7CisgICAgfTsKKworICAgIENT
U1ZhbHVlSUQgZnVuY3Rpb25JZDsKKyAgICBpZiAoZmluZEZ1bmN0aW9uSWQoZnVuY3Rpb25JZCkp
IHsKKyAgICAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBpbm5lclJhbmdlID0gdG9rZW5zLmNvbnN1
bWVCbG9jaygpOworICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAg
aW5uZXJSYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICByZXR1cm4gcGFyc2VDYWxj
RnVuY3Rpb24oaW5uZXJSYW5nZSwgZnVuY3Rpb25JZCwgZGVwdGggKyAxLCByZXN1bHQpOworICAg
IH0KKworICAgIHJldHVybiBwYXJzZVZhbHVlKHRva2VucywgcmVzdWx0KTsKK30KKworYm9vbCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1Byb2R1Y3QoQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiByZXN1bHQpCit7CisgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAh
PSBPSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gZmlyc3RWYWx1ZTsKKyAgICBpZiAoIXBhcnNlQ2FsY1ZhbHVlKHRva2VucywgZGVw
dGgsIGZpcnN0VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworCisgICAgd2hpbGUgKCF0b2tlbnMuYXRF
bmQoKSkgeworICAgICAgICBjaGFyIG9wZXJhdG9yQ2hhcmFjdGVyID0gb3BlcmF0b3JWYWx1ZSh0
b2tlbnMucGVlaygpKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19j
YXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpICYmIG9wZXJhdG9yQ2hhcmFjdGVyICE9
IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6RGl2aWRlKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAg
ICAgCisgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5leHRWYWx1ZTsKKyAg
ICAgICAgaWYgKCFwYXJzZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRoLCBuZXh0VmFsdWUpIHx8ICFu
ZXh0VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG9wZXJh
dG9yQ2hhcmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6RGl2aWRlKSkK
KyAgICAgICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUobmV4dFZh
bHVlLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgICAgIGlmIChmaXJzdFZhbHVlKQorICAgICAg
ICAgICAgbm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAg
ICAgbm9kZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAg
ICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZmlyc3RW
YWx1ZSk7CisgICAgICAgIHJldHVybiAhIXJlc3VsdDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3ZlKG5vZGVzKSk7CisgICAg
cmV0dXJuICEhcmVzdWx0OworfQorCitib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VDYWxjU3VtKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAgIGlmIChjaGVja0RlcHRo
QW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFsdWU7CisgICAgaWYgKCFw
YXJzZUNhbGNQcm9kdWN0KHRva2VucywgZGVwdGgsIGZpcnN0VmFsdWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVz
OworCisgICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgeworICAgICAgICBjaGFyIG9wZXJhdG9y
Q2hhcmFjdGVyID0gb3BlcmF0b3JWYWx1ZSh0b2tlbnMucGVlaygpKTsKKyAgICAgICAgaWYgKG9w
ZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6QWRkKSAm
JiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1
YnRyYWN0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICgoJnRva2Vucy5wZWVr
KCkgLSAxKS0+dHlwZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsgLy8gY2FsYygxcHgrIDJweCkgaXMgaW52YWxpZAorCisgICAgICAgIHRva2Vucy5jb25z
dW1lKCk7CisgICAgICAgIGlmICh0b2tlbnMucGVlaygpLnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9r
ZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4ICsycHgpIGlzIGludmFs
aWQKKworICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKworICAg
ICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBuZXh0VmFsdWU7CisgICAgICAgIGlm
ICghcGFyc2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBuZXh0VmFsdWUpIHx8ICFuZXh0VmFs
dWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG9wZXJhdG9yQ2hh
cmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6U3VidHJhY3QpKQorICAg
ICAgICAgICAgbmV4dFZhbHVlID0gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0ZShuZXh0VmFsdWUu
cmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAgICAgaWYgKGZpcnN0VmFsdWUpCisgICAgICAgICAg
ICBub2Rlcy5hcHBlbmQoZmlyc3RWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICBu
b2Rlcy5hcHBlbmQobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKworICAgIGlm
IChub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShmaXJzdFZhbHVl
KTsKKyAgICAgICAgcmV0dXJuICEhcmVzdWx0OworICAgIH0KKworICAgIHJlc3VsdCA9IENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShub2RlcykpOworICAgIHJldHVybiAh
IXJlc3VsdDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhbGNPcGVyYXRvci5oIgorI2lu
Y2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGU7CitjbGFzcyBDU1NQYXJzZXJUb2tlbjsKK2NsYXNz
IENTU1BhcnNlclRva2VuUmFuZ2U7CisKK2NsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNl
ciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyKENh
bGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKKyAgICAgICAgOiBtX2Rlc3Rp
bmF0aW9uQ2F0ZWdvcnkoZGVzdGluYXRpb25DYXRlZ29yeSkKKyAgICB7CisgICAgfQorCisgICAg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFu
Z2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24pOworICAgIAorcHJpdmF0ZToKKyAgICBjaGFyIG9wZXJh
dG9yVmFsdWUoY29uc3QgQ1NTUGFyc2VyVG9rZW4mKTsKKworICAgIGJvb2wgcGFyc2VWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKyAg
ICBib29sIHBhcnNlVmFsdWVUZXJtKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZUNhbGNGdW5jdGlv
bihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCwgaW50IGRlcHRoLCBSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxjU3VtKENTU1BhcnNlclRv
a2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Cisg
ICAgYm9vbCBwYXJzZUNhbGNQcm9kdWN0KENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgs
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZUNhbGNWYWx1
ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYpOworCisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2Rlc3RpbmF0aW9uQ2F0ZWdv
cnk7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0lu
dmVydE5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNJbnZlcnROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNJbnZlcnROb2Rl
LmgiCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oIgorI2luY2x1ZGUgPHd0
Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlQ2FsY0V4
cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEp
IGNvbnN0Cit7CisgICAgYXV0byBjaGlsZE5vZGUgPSBtX2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVz
c2lvbihjb252ZXJzaW9uRGF0YSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Np
b25JbnZlcnNpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Cit9CisKK2RvdWJsZSBDU1NDYWxjSW52
ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Cit7CisgICAg
YXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOworICAgIGlm
ICghY2hpbGRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKTsKKyAgICByZXR1cm4gMS4wIC8gY2hpbGRWYWx1ZTsKK30KKworZG91Ymxl
IENTU0NhbGNJbnZlcnROb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgYXV0byBjaGlsZFZhbHVl
ID0gbV9jaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKKyAgICBpZiAoIWNo
aWxkVmFsdWUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46Omlu
ZmluaXR5KCk7CisgICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7Cit9CisKK3ZvaWQgQ1NTQ2Fs
Y0ludmVydE5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgIjEv
IiA8PCBtX2NoaWxkLmdldCgpOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNJbnZlcnROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0NhbGNJbnZl
cnROb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxDU1NDYWxjSW52ZXJ0Tm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiYgY2hpbGQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
U1NDYWxjSW52ZXJ0Tm9kZShXVEZNb3ZlKGNoaWxkKSkpOworICAgIH0KKworICAgIGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgp
OyB9CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hpbGQu
Z2V0KCk7IH0KKworICAgIHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4m
JiBjaGlsZCkgeyBtX2NoaWxkID0gV1RGTW92ZShjaGlsZCk7IH0KKworcHJpdmF0ZToKKyAgICBD
U1NDYWxjSW52ZXJ0Tm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQorICAg
ICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKKyAgICAgICAg
LCBtX2NoaWxkKFdURk1vdmUoY2hpbGQpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAgICBib29sIGlzWmVybygp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9CisgICAgZG91YmxlIGRv
dWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgY29tcHV0ZUxl
bmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDc3NDYWxjSW52ZXJ0OyB9
CisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y2hpbGQtPnByaW1pdGl2ZVR5cGUoKTsgfQorCisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBj
b25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKHByb3BlcnRpZXMpOyB9CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3Qg
ZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNp
ZXMocHJvcGVydGllcyk7IH0KKworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmlu
YWw7CisKKyAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOworfTsKKworfQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY0lu
dmVydE5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6
OkNzc0NhbGNJbnZlcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVn
YXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2Fs
Y05lZ2F0ZU5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxj
L0NTU0NhbGNOZWdhdGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNOZWdhdGVO
b2RlLmgiCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGVDYWxj
RXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSkgY29uc3QKK3sKKyAgICBhdXRvIGNoaWxkTm9kZSA9IG1fY2hpbGQtPmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVz
c2lvbk5lZ2F0aW9uPihXVEZNb3ZlKGNoaWxkTm9kZSkpOworfQorCit2b2lkIENTU0NhbGNOZWdh
dGVOb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICItIiA8PCBt
X2NoaWxkLmdldCgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1ND
YWxjTmVnYXRlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNOZWdhdGVOb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxjTmVnYXRlTm9kZSBm
aW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8Q1NTQ2FsY05lZ2F0ZU5vZGU+IGNyZWF0ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY05l
Z2F0ZU5vZGUoV1RGTW92ZShjaGlsZCkpKTsKKyAgICB9CisKKyAgICBjb25zdCBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUmIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAg
IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9
CisKKyAgICB2b2lkIHNldENoaWxkKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQp
IHsgbV9jaGlsZCA9IFdURk1vdmUoY2hpbGQpOyB9CisKK3ByaXZhdGU6CisgICAgQ1NTQ2FsY05l
Z2F0ZU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKKyAgICAgICAgOiBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUoY2hpbGQtPmNhdGVnb3J5KCkpCisgICAgICAgICwgbV9jaGls
ZChXVEZNb3ZlKGNoaWxkKSkKKyAgICB7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc1plcm8oKSBjb25zdCBm
aW5hbCB7IHJldHVybiBtX2NoaWxkLT5pc1plcm8oKTsgfQorICAgIGRvdWJsZSBkb3VibGVWYWx1
ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QgZmluYWwgeyByZXR1cm4gLW1fY2hpbGQtPmRv
dWJsZVZhbHVlKHVuaXRUeXBlKTsgfQorICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIC1tX2NoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpOyB9CisgICAg
VHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6Q3NzQ2FsY05lZ2F0ZTsgfQor
ICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2No
aWxkLT5wcmltaXRpdmVUeXBlKCk7IH0KKworICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29u
c3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2ll
cyhwcm9wZXJ0aWVzKTsgfQorICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZp
bmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVz
KHByb3BlcnRpZXMpOyB9CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFs
OworCisgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGlsZDsKK307CisKK30KKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNOZWdh
dGVOb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpD
c3NDYWxjTmVnYXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJh
dGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNPcGVyYXRpb25Ob2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Y2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MDEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0Nh
bGNPcGVyYXRpb25Ob2RlLmgiCisKKyNpbmNsdWRlICJDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgi
CisjaW5jbHVkZSAiQ1NTQ2FsY0ludmVydE5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjTmVnYXRl
Tm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCIKKyNpbmNsdWRl
ICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8v
IFRoaXMgaXMgdGhlIHJlc3VsdCBvZiB0aGUgIlRvIGFkZCB0d28gdHlwZXMgdHlwZTEgYW5kIHR5
cGUyLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6IiBydWxlcy4KKworc3RhdGljIGNvbnN0
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV1bc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV0gPSB7CisvLyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXIgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGggICAgICAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50ICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TnVtYmVyICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoCisgICAgeyBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
ciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9LCAv
LyAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcgorICAgIHsgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCAgICAg
ICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCB9LCAv
LyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgKKyAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudAorICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJl
ciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TnVtYmVyCisgICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwg
ICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnRMZW5ndGgKK307CisKK3N0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRl
dGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIGNv
bnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Igb3ApCit7
CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBsZWZ0U2lkZS5jYXRlZ29y
eSgpOworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgcmlnaHRDYXRlZ29yeSA9IHJpZ2h0U2lkZS5j
YXRlZ29yeSgpOworICAgIEFTU0VSVChsZWZ0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7CisgICAgQVNTRVJUKHJpZ2h0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFk
ZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAgICAgIGlmIChsZWZ0Q2F0
ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiByaWdodENhdGVnb3J5IDwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCisgICAgICAgICAgICByZXR1cm4gYWRkU3VidHJhY3RS
ZXN1bHRbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlZnRDYXRlZ29yeSldW3N0YXRpY19jYXN0PHVu
c2lnbmVkPihyaWdodENhdGVnb3J5KV07CisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPT0gcmln
aHRDYXRlZ29yeSkKKyAgICAgICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7CisgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6
TXVsdGlwbHk6CisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyICYmIHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
KQorICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgICAg
ICByZXR1cm4gbGVmdENhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciA/IHJp
Z2h0Q2F0ZWdvcnkgOiBsZWZ0Q2F0ZWdvcnk7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlk
ZToKKyAgICAgICAgaWYgKHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyIHx8IHJpZ2h0U2lkZS5pc1plcm8oKSkKKyAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeTsKKyAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TWluOgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgIH0KKworICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
cjsKK30KKworLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IGNvcnJlY3QgY2F0ZWdvcnkgY29t
cHV0YXRpb24gcGVyOgorLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3VkaW5pLm9yZy9jc3MtdHlw
ZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLWludmVydC1hLXR5cGU+CisvLyBUbyBpbnZlcnQgYSB0
eXBlIHR5cGUsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKy8vIExldCByZXN1bHQgYmUg
YSBuZXcgdHlwZSB3aXRoIGFuIGluaXRpYWxseSBlbXB0eSBvcmRlcmVkIG1hcCBhbmQgYW4gaW5p
dGlhbGx5IG51bGwgcGVyY2VudCBoaW50CisvLyBGb3IgZWFjaCB1bml0IOKGkiBleHBvbmVudCBv
ZiB0eXBlLCBzZXQgcmVzdWx0W3VuaXRdIHRvICgtMSAqIGV4cG9uZW50KS4KK3N0YXRpYyBDYWxj
dWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5Rm9ySW52ZXJ0KENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0
ZWdvcnkpCit7CisgICAgcmV0dXJuIGNhdGVnb3J5OworfQorCitzdGF0aWMgQ2FsY3VsYXRpb25D
YXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+JiBub2RlcywgQ2FsY09wZXJhdG9yIG9wKQoreworICAgIGlmIChub2Rlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKworICAg
IGF1dG8gY3VycmVudENhdGVnb3J5ID0gbm9kZXNbMF0tPmNhdGVnb3J5KCk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgbm9kZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3Qg
YXV0byYgbm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAKKyAgICAgICAgYXV0byB1c2Vk
T3BlcmF0b3IgPSBvcDsKKyAgICAgICAgaWYgKG5vZGUudHlwZSgpID09IENTU0NhbGNFeHByZXNz
aW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY0ludmVydCkKKyAgICAgICAgICAgIHVzZWRPcGVyYXRvciA9
IENhbGNPcGVyYXRvcjo6RGl2aWRlOworCisgICAgICAgIGF1dG8gbmV4dENhdGVnb3J5ID0gbm9k
ZS5jYXRlZ29yeSgpOworCisgICAgICAgIHN3aXRjaCAodXNlZE9wZXJhdG9yKSB7CisgICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0
cmFjdDoKKyAgICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3Nz
LXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1hZGQtdHdvLXR5cGVzPgorICAgICAgICAgICAg
Ly8gQXQgYSArIG9yIC0gc3ViLWV4cHJlc3Npb24sIGF0dGVtcHQgdG8gYWRkIHRoZSB0eXBlcyBv
ZiB0aGUgbGVmdCBhbmQgcmlnaHQgYXJndW1lbnRzLgorICAgICAgICAgICAgLy8gSWYgdGhpcyBy
ZXR1cm5zIGZhaWx1cmUsIHRoZSBlbnRpcmUgY2FsY3VsYXRpb27igJlzIHR5cGUgaXMgZmFpbHVy
ZS4gT3RoZXJ3aXNlLCB0aGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJldHVybmVk
IHR5cGUuCisgICAgICAgICAgICBpZiAoY3VycmVudENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGUgJiYgbmV4dENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUp
CisgICAgICAgICAgICAgICAgY3VycmVudENhdGVnb3J5ID0gYWRkU3VidHJhY3RSZXN1bHRbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KGN1cnJlbnRDYXRlZ29yeSldW3N0YXRpY19jYXN0PHVuc2lnbmVk
PihuZXh0Q2F0ZWdvcnkpXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDYXRlZ29yeSAh
PSBuZXh0Q2F0ZWdvcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok11bHRpcGx5OgorICAgICAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3VkaW5p
Lm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLW11bHRpcGx5LXR3by10eXBlcz4K
KyAgICAgICAgICAgIC8vIEF0IGEgKiBzdWItZXhwcmVzc2lvbiwgbXVsdGlwbHkgdGhlIHR5cGVz
IG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVudHMuIFRoZSBzdWItZXhwcmVzc2lvbuKAmXMg
dHlwZSBpcyB0aGUgcmV0dXJuZWQgcmVzdWx0LgorICAgICAgICAgICAgaWYgKGN1cnJlbnRDYXRl
Z29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgbmV4dENhdGVnb3J5ICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7CisKKyAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9IGN1
cnJlbnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgPyBuZXh0Q2F0ZWdv
cnkgOiBjdXJyZW50Q2F0ZWdvcnk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl
IENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7CisgICAgICAgICAgICBhdXRvIGludmVydENhdGVnb3J5
ID0gY2F0ZWdvcnlGb3JJbnZlcnQobmV4dENhdGVnb3J5KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gQXQgYSAvIHN1Yi1leHByZXNzaW9uLCBsZXQgbGVmdCB0eXBlIGJlIHRoZSByZXN1
bHQgb2YgZmluZGluZyB0aGUgdHlwZXMgb2YgaXRzIGxlZnQgYXJndW1lbnQsCisgICAgICAgICAg
ICAvLyBhbmQgcmlnaHQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRpbmcgdGhlIHR5cGVzIG9m
IGl0cyByaWdodCBhcmd1bWVudCBhbmQgdGhlbiBpbnZlcnRpbmcgaXQuCisgICAgICAgICAgICAv
LyBUaGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJlc3VsdCBvZiBtdWx0aXBseWlu
ZyB0aGUgbGVmdCB0eXBlIGFuZCByaWdodCB0eXBlLgorICAgICAgICAgICAgaWYgKGludmVydENh
dGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCBub2RlLmlzWmVybygpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1p
bjoKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDoKKyAgICAgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkNsYW1wOgorICAgICAgICAgICAgLy8gVGhlIHR5cGUgb2YgYSBtaW4oKSwgbWF4KCks
IG9yIGNsYW1wKCkgZXhwcmVzc2lvbiBpcyB0aGUgcmVzdWx0IG9mIGFkZGluZyB0aGUgdHlwZXMg
b2YgaXRzIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbnMKKyAgICAgICAgICAgIHJldHVybiBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVy
biBjdXJyZW50Q2F0ZWdvcnk7Cit9CisKK3N0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IHJlc29s
dmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcChDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7CisgICAgc3dpdGNoIChj
YXRlZ29yeSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKKyAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpGcmVxdWVuY3k6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKKyAgICAg
ICAgcmV0dXJuIGNhdGVnb3J5OworCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50OgorICAgICAgICBpZiAoZGVzdGluYXRpb25DYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aDsKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXI7CisgICAgICAgIHJldHVybiBjYXRlZ29yeTsKKyAgICB9CisKKyAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cit9CisKK3N0YXRpYyBib29sIGlz
U2FtZVBhaXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBhLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGIsIENh
bGN1bGF0aW9uQ2F0ZWdvcnkgeCwgQ2FsY3VsYXRpb25DYXRlZ29yeSB5KQoreworICAgIHJldHVy
biAoYSA9PSB4ICYmIGIgPT0geSkgfHwgKGEgPT0geSAmJiBiID09IHgpOworfQorCitlbnVtIGNs
YXNzIFNvcnRpbmdDYXRlZ29yeSB7CisgICAgTnVtYmVyLAorICAgIFBlcmNlbnQsCisgICAgRGlt
ZW5zaW9uLAorICAgIE90aGVyCit9OworCitzdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdD
YXRlZ29yeUZvclR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpCit7CisgICAgc3RhdGljIGNvbnN0
ZXhwciBTb3J0aW5nQ2F0ZWdvcnkgc29ydE9yZGVyW10gPSB7CisgICAgICAgIFNvcnRpbmdDYXRl
Z29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLAorICAg
ICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aCwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpQZXJjZW50LCAgICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51
bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsCisgICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aCwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5
OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lLAorICAgICAgICBT
b3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZy
ZXF1ZW5jeSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpPdGhlciwgICAgICAgICAvLyBVT3Ro
ZXIKKyAgICB9OworCisgICAgQ09NUElMRV9BU1NFUlQoQVJSQVlfU0laRShzb3J0T3JkZXIpID09
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgKyAxLCBz
b3J0T3JkZXJfc2l6ZV9zaG91bGRfbWF0Y2hfVW5pdENhdGVnb3J5KTsKKyAgICByZXR1cm4gc29y
dE9yZGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihjYWxjVW5pdENhdGVnb3J5KHVuaXRUeXBlKSld
OworfQorCitzdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdDYXRlZ29yeShjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICByZXR1cm4gc29ydGluZ0NhdGVnb3J5Rm9yVHlwZShu
b2RlLnByaW1pdGl2ZVR5cGUoKSk7CisKKyAgICByZXR1cm4gU29ydGluZ0NhdGVnb3J5OjpPdGhl
cjsKK30KKworc3RhdGljIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgaWYgKGlzPENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICByZXR1cm4gbm9kZS5wcmltaXRpdmVU
eXBlKCk7CisgICAgCisgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKK30KKwor
c3RhdGljIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uIGNvbnZlcnNp
b25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhDU1NVbml0VHlwZSBmaXJzdFR5cGUsIENTU1VuaXRUeXBl
IHNlY29uZFR5cGUpCit7CisgICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV04gfHwgc2Vjb25kVHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV04pCisgICAgICAg
IHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6SW52YWxp
ZDsKKworICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21i
aW5hdGlvbihmaXJzdFR5cGUpOworCisgICAgLy8gQ29tcGF0aWJsZSB0eXBlcy4KKyAgICBpZiAo
Zmlyc3RDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBmaXJzdENhdGVn
b3J5ID09IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihzZWNvbmRUeXBlKSkKKyAg
ICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpD
YW5vbmljYWxpemU7CisKKyAgICAvLyBNYXRjaGluZyB0eXBlcy4KKyAgICBpZiAoZmlyc3RUeXBl
ID09IHNlY29uZFR5cGUgJiYgaGFzRG91YmxlVmFsdWUoZmlyc3RUeXBlKSkKKyAgICAgICAgcmV0
dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZTsK
KworICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6
SW52YWxpZDsKK30KKworCitzdGF0aWMgQ1NTVmFsdWVJRCBmdW5jdGlvbkZyb21PcGVyYXRvcihD
YWxjT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpBZGQ6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgorICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseToKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgorICAg
ICAgICByZXR1cm4gQ1NTVmFsdWVDYWxjOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Cisg
ICAgICAgIHJldHVybiBDU1NWYWx1ZU1pbjsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4Ogor
ICAgICAgICByZXR1cm4gQ1NTVmFsdWVNYXg7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1w
OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVDbGFtcDsKKyAgICB9CisgICAgcmV0dXJuIENTU1Zh
bHVlQ2FsYzsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0
aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvciBvcCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNp
ZGUpCit7CisgICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmlnaHRTaWRlKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6OkFkZCB8fCBvcCA9PSBD
YWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKKworICAgIEFTU0VSVChsZWZ0U2lkZS0+Y2F0ZWdvcnko
KSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKyAgICBBU1NFUlQocmlnaHRTaWRlLT5j
YXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworCisgICAgYXV0byBuZXdD
YXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwor
ICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIENT
U0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBub2RlIGJlY2F1c2UgdW5hYmxlIHRvIGRl
dGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2RlKCpsZWZ0U2lkZSkgPDwg
IiBhbmQgIiA8PCAqcmlnaHRTaWRlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShuZXdDYXRlZ29y
eSwgb3AsIGxlZnRTaWRlLnJlbGVhc2VOb25OdWxsKCksIHJpZ2h0U2lkZS5yZWxlYXNlTm9uTnVs
bCgpKSk7Cit9CisKK1JlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFs
dWVzKQoreworICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSh2YWx1ZXMsIENh
bGNPcGVyYXRvcjo6QWRkKTsKKyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAi
RmFpbGVkIHRvIGNyZWF0ZSBzdW0gbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0
ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7CisgICAgICAgIG5ld0Nh
dGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6OkFkZCk7Cisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNPcGVyYXRvcjo6QWRkLCBXVEZN
b3ZlKHZhbHVlcykpKTsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4+JiYgdmFsdWVzKQoreworICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29y
eSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOworICAgIGlmIChuZXdDYXRlZ29yeSA9
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
Q2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHByb2R1Y3Qgbm9kZSBiZWNhdXNlIHVu
YWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFs
dWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNPcGVyYXRvcjo6
TXVsdGlwbHksIFdURk1vdmUodmFsdWVzKSkpOworfQorCitSZWZQdHI8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09w
ZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzLCBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7CisgICAgQVNTRVJUKG9w
ID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TWF4IHx8IG9wID09
IENhbGNPcGVyYXRvcjo6Q2xhbXApOworICAgIEFTU0VSVF9JTVBMSUVTKG9wID09IENhbGNPcGVy
YXRvcjo6Q2xhbXAsIHZhbHVlcy5zaXplKCkgPT0gMyk7CisKKyAgICBPcHRpb25hbDxDYWxjdWxh
dGlvbkNhdGVnb3J5PiBjYXRlZ29yeSA9IHN0ZDo6bnVsbG9wdDsKKyAgICBmb3IgKGF1dG8mIHZh
bHVlIDogdmFsdWVzKSB7CisgICAgICAgIGF1dG8gdmFsdWVDYXRlZ29yeSA9IHJlc29sdmVkVHlw
ZUZvck1pbk9yTWF4T3JDbGFtcCh2YWx1ZS0+Y2F0ZWdvcnkoKSwgZGVzdGluYXRpb25DYXRlZ29y
eSk7CisKKyAgICAgICAgQVNTRVJUKHZhbHVlQ2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7CisgICAgICAgIGlmICghY2F0ZWdvcnkpIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7CisgICAgICAgICAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1ND
YWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRl
cm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
YXRlZ29yeSA9IHZhbHVlQ2F0ZWdvcnk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2F0ZWdv
cnkgIT0gdmFsdWVDYXRlZ29yeSkgeworICAgICAgICAgICAgaWYgKGlzU2FtZVBhaXIoY2F0ZWdv
cnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKSkgeworICAgICAgICAgICAgICAgIGNh
dGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpc1NhbWVQYWly
KGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikpIHsKKyAgICAgICAgICAg
ICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NT
Q2FsY09wZXJhdGlvbk5vZGUoY2F0ZWdvcnkudmFsdWUoKSwgb3AsIFdURk1vdmUodmFsdWVzKSkp
OworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENoaWxkcmVuV2l0aE9wZXJh
dG9yKENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBBU1NFUlQob3AgPT0gQ2FsY09wZXJhdG9yOjpB
ZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7CisKKyAgICBhdXRvIGhhc0NoaWxk
V2l0aE9wZXJhdG9yID0gWyZdIChDYWxjT3BlcmF0b3Igb3ApIHsKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBp
ZiAoIWhhc0NoaWxkV2l0aE9wZXJhdG9yKG9wKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVj
dG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKKyAgICBmb3IgKGF1
dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hp
bGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7CisgICAgICAgICAgICBhdXRvJiBjaGls
ZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2hpbGRy
ZW4oKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUgOiBjaGlsZHJlbikKKyAg
ICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZFRvTW92ZSkpOwor
ICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNo
aWxkKSk7CisgICAgfQorICAgIAorICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7CisgICAg
bV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworfQorCitib29sIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjpjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdAoreworICAgIGlmIChtX2No
aWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmICghaXM8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obV9jaGlsZHJlblswXSkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGF1dG8gZmlyc3RVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1p
dGl2ZVR5cGUoKTsKKyAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5
Rm9yQ29tYmluYXRpb24obV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpKTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGF1dG8mIG5vZGUgPSBtX2NoaWxkcmVuW2ldOworCisgICAgICAgIGlmICghaXM8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgYXV0byBub2RlVW5pdFR5cGUgPSBub2RlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAg
IGF1dG8gbm9kZUNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG5v
ZGVVbml0VHlwZSk7CisKKyAgICAgICAgaWYgKG5vZGVDYXRlZ29yeSAhPSBmaXJzdENhdGVnb3J5
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChub2RlQ2F0ZWdvcnkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgJiYgbm9kZVVuaXRUeXBlICE9IGZpcnN0VW5p
dFR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBpZiAo
IWhhc0RvdWJsZVZhbHVlKG5vZGVVbml0VHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmNvbWJpbmVDaGlsZHJlbigpCit7CisgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpIDwgMikK
KyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNob3VsZFNvcnRDaGlsZHJlbigpKSB7CisgICAg
ICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzb3J0LWEtY2Fs
Y3VsYXRpb25zLWNoaWxkcmVuPgorICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fY2hpbGRyZW4u
YmVnaW4oKSwgbV9jaGlsZHJlbi5lbmQoKSwgW10oY29uc3QgYXV0byYgZmlyc3QsIGNvbnN0IGF1
dG8mIHNlY29uZCkgeworICAgICAgICAgICAgLy8gU29ydCBvcmRlcjogbnVtYmVyLCBwZXJjZW50
YWdlLCBkaW1lbnNpb24sIG90aGVyLgorICAgICAgICAgICAgU29ydGluZ0NhdGVnb3J5IGZpcnN0
Q2F0ZWdvcnkgPSBzb3J0aW5nQ2F0ZWdvcnkoZmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgU29y
dGluZ0NhdGVnb3J5IHNlY29uZENhdGVnb3J5ID0gc29ydGluZ0NhdGVnb3J5KHNlY29uZC5nZXQo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmaXJzdENhdGVnb3J5ID09IFNvcnRp
bmdDYXRlZ29yeTo6RGltZW5zaW9uICYmIHNlY29uZENhdGVnb3J5ID09IFNvcnRpbmdDYXRlZ29y
eTo6RGltZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgbm9kZXMgY29udGFpbnMgYW55
IGRpbWVuc2lvbnMsIHJlbW92ZSB0aGVtIGZyb20gbm9kZXMsIHNvcnQgdGhlbSBieSB0aGVpciB1
bml0cywgYW5kIGFwcGVuZCB0aGVtIHRvIHJldC4KKyAgICAgICAgICAgICAgICBhdXRvIGZpcnN0
VW5pdFN0cmluZyA9IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyhmaXJzdC0+cHJp
bWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlY29uZFVuaXRTdHJpbmcgPSBD
U1NQcmltaXRpdmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcoc2Vjb25kLT5wcmltaXRpdmVUeXBlKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oZmlyc3RV
bml0U3RyaW5nLCBzZWNvbmRVbml0U3RyaW5nKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmaXJzdENhdGVnb3J5KSA8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihzZWNvbmRDYXRlZ29yeSk7CisgICAgICAgIH0pOworCisgICAgICAgIExP
R19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgInBvc3Qtc29ydDogIiA8PCAqdGhpcyk7Cisg
ICAgfQorCisgICAgaWYgKGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7Cisg
ICAgICAgIC8vIEZvciBlYWNoIHNldCBvZiByb2904oCZcyBjaGlsZHJlbiB0aGF0IGFyZSBudW1l
cmljIHZhbHVlcyB3aXRoIGlkZW50aWNhbCB1bml0cywKKyAgICAgICAgLy8gcmVtb3ZlIHRob3Nl
IGNoaWxkcmVuIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHNpbmdsZSBudW1lcmljIHZhbHVlIGNv
bnRhaW5pbmcKKyAgICAgICAgLy8gdGhlIHN1bSBvZiB0aGUgcmVtb3ZlZCBub2RlcywgYW5kIHdp
dGggdGhlIHNhbWUgdW5pdC4KKyAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiBuZXdDaGlsZHJlbjsKKyAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShtX2NoaWxkcmVuLnNpemUoKSk7CisgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFw
cGVuZChtX2NoaWxkcmVuWzBdLmNvcHlSZWYoKSk7CisKKyAgICAgICAgQ1NTVW5pdFR5cGUgcHJl
dmlvdXNUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG5ld0NoaWxkcmVuWzBdLmdl
dCgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jaGlsZHJlbi5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgY3VycmVudE5vZGUgPSBtX2NoaWxkcmVuW2ld
OworICAgICAgICAgICAgQ1NTVW5pdFR5cGUgY3VycmVudFR5cGUgPSBwcmltaXRpdmVUeXBlRm9y
Q29tYmluYXRpb24oY3VycmVudE5vZGUuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIGNvbnZl
cnNpb25UeXBlID0gY29udmVyc2lvblRvQWRkVmFsdWVzV2l0aFR5cGVzKHByZXZpb3VzVHlwZSwg
Y3VycmVudFR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnZlcnNpb25UeXBlICE9IENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpJbnZhbGlkKSB7CisgICAgICAgICAg
ICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW4ubGFz
dCgpLmdldCgpKS5hZGQoZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY3VycmVu
dE5vZGUuZ2V0KCkpLCBjb252ZXJzaW9uVHlwZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXZpb3VzVHlwZSA9IHByaW1pdGl2ZVR5
cGVGb3JDb21iaW5hdGlvbihjdXJyZW50Tm9kZSk7CisgICAgICAgICAgICBuZXdDaGlsZHJlbi51
bmNoZWNrZWRBcHBlbmQoY3VycmVudE5vZGUuY29weVJlZigpKTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jaGlsZHJl
biA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpIHsKKyAgICAgICAg
Ly8gSWYgcm9vdCBoYXMgbXVsdGlwbGUgY2hpbGRyZW4gdGhhdCBhcmUgbnVtYmVycyAobm90IHBl
cmNlbnRhZ2VzIG9yIGRpbWVuc2lvbnMpLAorICAgICAgICAvLyByZW1vdmUgdGhlbSBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggYSBzaW5nbGUgbnVtYmVyIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3Qgb2Yg
dGhlIHJlbW92ZWQgbm9kZXMuCisgICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMTsKKworICAg
ICAgICAvLyBTb3J0aW5nIHdpbGwgaGF2ZSBwdXQgdGhlIG51bWJlciBub2RlcyBmaXJzdC4KKyAg
ICAgICAgdW5zaWduZWQgbGVhZGluZ051bWJlck5vZGVDb3VudCA9IDA7CisgICAgICAgIGZvciAo
YXV0byYgbm9kZSA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGF1dG8gbm9kZVR5cGUgPSBw
cmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obm9kZS5nZXQoKSk7CisgICAgICAgICAgICBpZiAo
bm9kZVR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG11bHRpcGxpZXIgKj0gbm9kZS0+ZG91Ymxl
VmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICAgICAgKytsZWFkaW5nTnVt
YmVyTm9kZUNvdW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWZWN0b3I8UmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOworICAgICAgICBuZXdDaGlsZHJlbi5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIElmIHJvb3QgY29udGFpbnMgb25seSB0d28gY2hpbGRyZW4sIG9uZSBvZiB3aGljaCBp
cyBhIG51bWJlciAobm90IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24pIGFuZCB0aGUgb3RoZXIg
b2YKKyAgICAgICAgLy8gd2hpY2ggaXMgYSBTdW0gd2hvc2UgY2hpbGRyZW4gYXJlIGFsbCBudW1l
cmljIHZhbHVlcywgbXVsdGlwbHkgYWxsIG9mIHRoZSBTdW3igJlzIGNoaWxkcmVuIGJ5IHRoZSBu
dW1iZXIsIHRoZW4KKyAgICAgICAgLy8gcmV0dXJuIHRoZSBTdW0uCisgICAgICAgIC8vIFRoZSBT
dW0ncyBjaGlsZHJlbiBzaW1wbGlmaWNhdGlvbiB3aWxsIGhhdmUgaGFwcGVuZWQgYWxyZWFkeS4K
KyAgICAgICAgYm9vbCBkaWRNdWx0aXBseSA9IGZhbHNlOworICAgICAgICBpZiAobGVhZGluZ051
bWJlck5vZGVDb3VudCAmJiBtX2NoaWxkcmVuLnNpemUoKSAtIGxlYWRpbmdOdW1iZXJOb2RlQ291
bnQgPT0gMSkgeworICAgICAgICAgICAgYXV0byBtdWx0aXBsaWNhbmRDYXRlZ29yeSA9IGNhbGNV
bml0Q2F0ZWdvcnkocHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG1fY2hpbGRyZW4ubGFzdCgp
LmdldCgpKSk7CisgICAgICAgICAgICBpZiAobXVsdGlwbGljYW5kQ2F0ZWdvcnkgIT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNo
ZWNrZWRBcHBlbmQobV9jaGlsZHJlbi5sYXN0KCkuY29weVJlZigpKTsKKyAgICAgICAgICAgICAg
ICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdDaGlsZHJlblswXS5nZXQo
KSkubXVsdGlwbHkobXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAgZGlkTXVsdGlwbHkgPSB0
cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9j
aGlsZHJlbi5sYXN0KCkuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPiht
X2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpB
ZGQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtdWx0aXBseWluZyB3aXRoIGFub3Ro
ZXIgb3BlcmF0aW9uIHRoYXQgaXMgYW4gYWRkaXRpb24gYW5kIGFsbCB0aGUgYWRkZWQgY2hpbGRy
ZW4KKyAgICAgICAgICAgICAgICAvLyBhcmUgcGVyY2VudGFnZXMgb3IgZGltZW5zaW9ucywgd2Ug
c2hvdWxkIG11bHRpcGx5IGVhY2ggY2hpbGQgYW5kIG1ha2UgdGhpcyBleHByZXNzaW9uIGFuCisg
ICAgICAgICAgICAgICAgLy8gYWRkaXRpb24uCisgICAgICAgICAgICAgICAgYXV0byBhbGxDaGls
ZHJlbkFyZVByaW1pdGl2ZVZhbHVlcyA9IFtdKGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4mIGNoaWxkcmVuKSAtPiBib29sCisgICAgICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQuZ2V0
KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmNoaWxkcmVuKCk7
CisgICAgICAgICAgICAgICAgaWYgKGFsbENoaWxkcmVuQXJlUHJpbWl0aXZlVmFsdWVzKGNoaWxk
cmVuKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZC5jb3B5
UmVmKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW4ubGFzdCgpLmdldCgpKS5tdWx0aXBseShtdWx0aXBsaWVy
KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBtX29wZXJhdG9y
ID0gQ2FsY09wZXJhdG9yOjpBZGQ7CisgICAgICAgICAgICAgICAgICAgIGRpZE11bHRpcGx5ID0g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIWRpZE11bHRpcGx5KSB7CisgICAgICAgICAgICBpZiAobGVhZGluZ051bWJlck5v
ZGVDb3VudCkgeworICAgICAgICAgICAgICAgIGF1dG8gbXVsdGlwbGllck5vZGUgPSBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtdWx0
aXBsaWVyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOworICAgICAgICAgICAgICAgIG5ld0No
aWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG11bHRpcGxpZXJOb2RlKSk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlYWRpbmdOdW1iZXJOb2Rl
Q291bnQ7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAgICAgICAgICAgIG5ld0No
aWxkcmVuLnVuY2hlY2tlZEFwcGVuZChtX2NoaWxkcmVuW2ldLmNvcHlSZWYoKSk7CisgICAgICAg
IH0KKworICAgICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOworICAgICAgICBtX2NoaWxk
cmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CisgICAgfQorCisgICAgaWYgKGlzTWluT3JNYXhO
b2RlKCkgJiYgY2FuQ29tYmluZUFsbENoaWxkcmVuKCkpIHsKKyAgICAgICAgYXV0byBjb21iaW5l
ZFVuaXRUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBhdXRv
IGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKGNvbWJpbmVkVW5p
dFR5cGUpOworICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIpCisgICAgICAgICAgICBjb21iaW5lZFVuaXRUeXBlID0gY2Fub25pY2FsVW5pdFR5cGVGb3JD
YWxjdWxhdGlvbkNhdGVnb3J5KGNhdGVnb3J5KTsKKworICAgICAgICBkb3VibGUgcmVzb2x2ZWRW
YWx1ZSA9IGRvdWJsZVZhbHVlKGNvbWJpbmVkVW5pdFR5cGUpOworICAgICAgICBhdXRvIG5ld0No
aWxkID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUocmVzb2x2ZWRWYWx1ZSwgY29tYmluZWRVbml0VHlwZSkpOworCisgICAgICAgIG1f
Y2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShuZXdD
aGlsZCkpOworICAgIH0KK30KKworLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1
ZXMtNC8jc2ltcGxpZnktYS1jYWxjdWxhdGlvbi10cmVlCisKK1JlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYmIHJvb3ROb2RlKQoreworICAgIHJldHVybiBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZN
b3ZlKHJvb3ROb2RlKSwgMCk7Cit9CisKK1JlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeVJlY3Vyc2l2ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYmIHJvb3ROb2RlLCBpbnQgZGVwdGgpCit7CisgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRp
b25Ob2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25j
YXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZS5nZXQoKSk7CisgICAgICAgIAorICAg
ICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBhdXRvIGNoaWxkID0gY2hpbGRyZW5baV0uY29weVJlZigpOworICAgICAgICAgICAgYXV0
byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7
CisgICAgICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSBjaGlsZHJlbltpXS5wdHIoKSkKKyAg
ICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IFdURk1vdmUobmV3Tm9kZSk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKKyAgICAg
ICAgYXV0byYgbmVnYXRlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9k
ZS5nZXQoKSk7CisgICAgICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNoaWxkID0gbmVn
YXRlTm9kZS5jaGlsZCgpOworICAgICAgICBhdXRvIG5ld05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2
ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGggKyAxKTsKKyAgICAgICAgaWYgKG5ld05vZGUucHRyKCkg
IT0gJm5lZ2F0ZU5vZGUuY2hpbGQoKSkKKyAgICAgICAgICAgIG5lZ2F0ZU5vZGUuc2V0Q2hpbGQo
V1RGTW92ZShuZXdOb2RlKSk7CisgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4o
cm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIGludmVydE5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
SW52ZXJ0Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBjaGlsZCA9IGludmVydE5vZGUuY2hpbGQoKTsKKyAgICAgICAgYXV0byBuZXdOb2Rl
ID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7CisgICAgICAg
IGlmIChuZXdOb2RlLnB0cigpICE9ICZpbnZlcnROb2RlLmNoaWxkKCkpCisgICAgICAgICAgICBp
bnZlcnROb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOworICAgIH0KKworICAgIHJldHVy
biBzaW1wbGlmeU5vZGUoV1RGTW92ZShyb290Tm9kZSksIGRlcHRoKTsKK30KKworUmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5Tm9kZShSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJvb3ROb2RlLCBpbnQgZGVwdGgpCit7CisgICAgaWYg
KGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICAvLyBJ
ZiByb290IGlzIGEgcGVyY2VudGFnZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCBhbm90
aGVyIHZhbHVlLCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uCisgICAgICAgIC8vIGF2
YWlsYWJsZSB0byByZXNvbHZlIGl0LCBkbyBzbywgYW5kIGV4cHJlc3MgdGhlIHJlc3VsdGluZyBu
dW1lcmljIHZhbHVlIGluIHRoZSBhcHByb3ByaWF0ZSBjYW5vbmljYWwKKyAgICAgICAgLy8gdW5p
dC4gUmV0dXJuIHRoZSB2YWx1ZS4KKworICAgICAgICAvLyBJZiByb290IGlzIGEgZGltZW5zaW9u
IHRoYXQgaXMgbm90IGV4cHJlc3NlZCBpbiBpdHMgY2Fub25pY2FsIHVuaXQsIGFuZCB0aGVyZSBp
cyBlbm91Z2ggaW5mb3JtYXRpb24KKyAgICAgICAgLy8gYXZhaWxhYmxlIHRvIGNvbnZlcnQgaXQg
dG8gdGhlIGNhbm9uaWNhbCB1bml0LCBkbyBzbywgYW5kIHJldHVybiB0aGUgdmFsdWUuCisgICAg
ICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KHJvb3ROb2RlLmdldCgpKTsKKyAgICAgICAgcHJpbWl0aXZlVmFsdWVOb2RlLmNh
bm9uaWNhbGl6ZVVuaXQoKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOworICAg
IH0KKworICAgIC8vIElmIHJvb3QgaXMgYW4gb3BlcmF0b3Igbm9kZSB0aGF04oCZcyBub3Qgb25l
IG9mIHRoZSBjYWxjLW9wZXJhdG9yIG5vZGVzLCBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUg
bnVtZXJpYyB2YWx1ZXMKKyAgICAvLyB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjb21wdXRl
ZCB0aGUgb3BlcmF0aW9uIHJvb3QgcmVwcmVzZW50cywgcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVu
bmluZyByb2904oCZcyBvcGVyYXRpb24KKyAgICAvLyB1c2luZyBpdHMgY2hpbGRyZW4sIGV4cHJl
c3NlZCBpbiB0aGUgcmVzdWx04oCZcyBjYW5vbmljYWwgdW5pdC4KKyAgICBpZiAoaXM8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjYWxjT3BlcmF0aW9u
Tm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZS5nZXQoKSk7Cisg
ICAgICAgIC8vIERvbid0IHNpbXBsaWZ5IGF0IHRoZSByb290LCBvdGhlcndpc2Ugd2UgbG9zZSB0
cmFjayBvZiB0aGUgb3BlcmF0aW9uIGZvciBzZXJpYWxpemF0aW9uLgorICAgICAgICBpZiAoY2Fs
Y09wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKS5zaXplKCkgPT0gMSAmJiBkZXB0aCkKKyAgICAgICAg
ICAgIHJldHVybiBXVEZNb3ZlKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKClbMF0pOworICAg
ICAgICAKKyAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5vZGUoKSkgewor
ICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihD
YWxjT3BlcmF0b3I6OkFkZCk7CisgICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5l
Q2hpbGRyZW4oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5p
c0NhbGNQcm9kdWN0Tm9kZSgpKSB7CisgICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5ob2lz
dENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOworICAgICAgICAg
ICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5pc01pbk9yTWF4Tm9kZSgpKQorICAg
ICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7CisKKyAgICAgICAg
Ly8gSWYgb25seSBvbmUgY2hpbGQgcmVtYWlucywgcmV0dXJuIHRoZSBjaGlsZCAoZXhjZXB0IGF0
IHRoZSByb290KS4KKyAgICAgICAgYXV0byBzaG91bGRDb21iaW5lUGFyZW50V2l0aE9ubHlDaGls
ZCA9IFtdKGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBwYXJlbnQsIGludCBkZXB0aCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbigpLnNpemUoKSAhPSAxKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gQWx3YXlzIHNp
bXBsaWZ5IGJlbG93IHRoZSByb290LgorICAgICAgICAgICAgaWYgKGRlcHRoKQorICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBBdCB0aGUgcm9vdCwgcHJlc2Vy
dmUgdGhlIHJvb3QgZnVuY3Rpb24gYnkgb25seSBtZXJnaW5nIG5vZGVzIHdpdGggdGhlIHNhbWUg
ZnVuY3Rpb24uCisgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbigpLmZp
cnN0KCk7CisgICAgICAgICAgICBpZiAoIWlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBhdXRvIHBhcmVu
dEZ1bmN0aW9uID0gZnVuY3Rpb25Gcm9tT3BlcmF0b3IocGFyZW50LmNhbGNPcGVyYXRvcigpKTsK
KyAgICAgICAgICAgIGF1dG8gY2hpbGRGdW5jdGlvbiA9IGZ1bmN0aW9uRnJvbU9wZXJhdG9yKGRv
d25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkp
OworICAgICAgICAgICAgcmV0dXJuIGNoaWxkRnVuY3Rpb24gPT0gcGFyZW50RnVuY3Rpb247Cisg
ICAgICAgIH07CisKKyAgICAgICAgaWYgKHNob3VsZENvbWJpbmVQYXJlbnRXaXRoT25seUNoaWxk
KGNhbGNPcGVyYXRpb25Ob2RlLCBkZXB0aCkpCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShj
YWxjT3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpLmZpcnN0KCkpOworCisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+
KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
TmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7CisgICAgICAgIC8vIElmIHJvb3Ti
gJlzIGNoaWxkIGlzIGEgbnVtZXJpYyB2YWx1ZSwgcmV0dXJuIGFuIGVxdWl2YWxlbnQgbnVtZXJp
YyB2YWx1ZSwgYnV0IHdpdGggdGhlIHZhbHVlIG5lZ2F0ZWQgKDAgLSB2YWx1ZSkuCisgICAgICAg
IGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpICYmIGRvd25jYXN0
PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNOdW1lcmljVmFsdWUoKSkg
eworICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGRO
b2RlKS5uZWdhdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGEgTmVnYXRlIG5vZGUs
IHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0
ZU5vZGU+KGNoaWxkTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY05l
Z2F0ZU5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+
KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
SW52ZXJ0Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7CisgICAgICAgIC8vIElmIHJvb3Ti
gJlzIGNoaWxkIGlzIGEgbnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9yIGRpbWVuc2lvbikgcmV0
dXJuIHRoZSByZWNpcHJvY2FsIG9mIHRoZSBjaGlsZOKAmXMgdmFsdWUuCisgICAgICAgIGlmIChp
czxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpICYmIGRvd25jYXN0PENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNOdW1lcmljVmFsdWUoKSkgeworICAg
ICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5p
bnZlcnQoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhbiBJbnZlcnQgbm9kZSwgcmV0dXJuIHRoZSBj
aGlsZOKAmXMgY2hpbGQuCisgICAgICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGRO
b2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hp
bGROb2RlKS5jaGlsZCgpOworCisgICAgICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKKyAg
ICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Cit9CisKK0NTU1VuaXRUeXBlIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKK3sKKyAgICBhdXRvIHVu
aXRDYXRlZ29yeSA9IGNhdGVnb3J5KCk7CisgICAgc3dpdGNoICh1bml0Q2F0ZWdvcnkpIHsKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKKyNpZiBBU1NFUlRfRU5BQkxFRAor
ICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgICAgIEFTU0VS
VChjaGlsZC0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOworI2Vu
ZGlmCisgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjsKKworICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogeworICAgICAgICBpZiAobV9jaGlsZHJlbi5p
c0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwor
CisgICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKSB7CisgICAgICAgICAgICBpZiAo
bV9jaGlsZHJlblswXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMV0tPnByaW1pdGl2ZVR5cGUoKTsK
KyAgICAgICAgICAgIGlmIChtX2NoaWxkcmVuWzFdLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlblswXS0+
cHJpbWl0aXZlVHlwZSgpOworICAgICAgICB9CisgICAgICAgIENTU1VuaXRUeXBlIGZpcnN0VHlw
ZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgZm9yIChhdXRvJiBj
aGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlmIChmaXJzdFR5cGUgIT0gY2hpbGQt
PnByaW1pdGl2ZVR5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19VTktOT1dOOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmaXJzdFR5cGU7CisgICAgfQor
CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpBbmdsZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6
CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6CisgICAgICAgIGlmICht
X2NoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW4uZmly
c3QoKS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICByZXR1cm4gY2Fub25pY2FsVW5pdFR5cGVG
b3JDYWxjdWxhdGlvbkNhdGVnb3J5KHVuaXRDYXRlZ29yeSk7CisKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Cisg
ICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25O
b2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobV9jaGlsZHJlbi5zaXplKCkpOworCisgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRy
ZW4pIHsKKyAgICAgICAgYXV0byBub2RlID0gY2hpbGQtPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNv
bnZlcnNpb25EYXRhKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5vZGUpKTsKKyAg
ICB9CisKKyAgICAvLyBSZXZlcnNlIHRoZSBvcGVyYXRpb24gd2UgZGlkIHdoZW4gY3JlYXRpbmcg
dGhpcyBub2RlLCByZWNvdmVyaW5nIGEgc3VpdGFibGUgZGVzdGluYXRpb24gY2F0ZWdvcnkgZm9y
IG90aGVyd2lzZS1hbWJpZ3VvdXMgbWluL21heC9jbGFtcCBub2Rlcy4KKyAgICAvLyBOb3RlIHRo
YXQgdGhpcyBjYXRlZ29yeSBpcyByZWFsbHkgb25seSBnb29kIGVub3VnaCBmb3IgdGhhdCBwdXJw
b3NlIGFuZCBpcyBub3QgYWNjdXJhdGUgZm9yIG90aGVyIG5vZGUgdHlwZXM7IHdlIGNvdWxkIHVz
ZSBhIGJvb2xlYW4gaW5zdGVhZC4KKyAgICBhdXRvIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICBpZiAoY2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKQorICAgICAgICBkZXN0aW5hdGlvbkNhdGVnb3J5ID0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOworICAgIGVsc2UgaWYgKGNhdGVnb3J5KCkgPT0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikKKyAgICAgICAgZGVzdGluYXRpb25D
YXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKKworICAgIHJldHVybiBtYWtl
VW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKG5vZGVzKSwgbV9vcGVyYXRv
ciwgZGVzdGluYXRpb25DYXRlZ29yeSk7Cit9CisKK2RvdWJsZSBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Cit7CisgICAgYm9vbCBh
bGxvd051bWJlcnMgPSBjYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5Owor
CisgICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAoYXV0byYgY2hpbGQpIHsK
KyAgICAgICAgQ1NTVW5pdFR5cGUgY2hpbGRUeXBlID0gdW5pdFR5cGU7CisgICAgICAgIGlmIChh
bGxvd051bWJlcnMgJiYgdW5pdFR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIgJiYgY2hp
bGQtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikKKyAgICAgICAg
ICAgIGNoaWxkVHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOworICAgICAgICByZXR1cm4g
Y2hpbGQtPmRvdWJsZVZhbHVlKGNoaWxkVHlwZSk7CisgICAgfSkpOworfQorCitkb3VibGUgQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gZXZhbHVhdGUo
bV9jaGlsZHJlbi5tYXAoWyZdIChhdXRvJiBjaGlsZCkgeworICAgICAgICByZXR1cm4gY2hpbGQt
PmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7CisgICAgfSkpOworfQorCit2b2lkIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2ll
cyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgZm9yIChhdXRv
JiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIGNoaWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25O
b2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1
aWxkQ1NTVGV4dChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIFN0cmluZ0J1aWxk
ZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBzaG91bGRPdXRwdXRFbmNsb3NpbmdDYWxjID0gW10o
Y29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByb290Tm9kZSkgeworICAgICAgICBpZiAoaXM8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICAgICAgYXV0byYgb3Bl
cmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSk7Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkgfHwgb3BlcmF0
aW9uTm9kZS5pc0NhbGNQcm9kdWN0Tm9kZSgpOworICAgICAgICB9CisgICAgICAgIHJldHVybiAh
aXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUpOworICAgIH07CisgICAgCisg
ICAgYm9vbCBvdXRwdXRDYWxjID0gc2hvdWxkT3V0cHV0RW5jbG9zaW5nQ2FsYyhub2RlKTsKKyAg
ICBpZiAob3V0cHV0Q2FsYykKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoImNhbGMoIik7CisKKyAg
ICBidWlsZENTU1RleHRSZWN1cnNpdmUobm9kZSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9t
aXQpOworCisgICAgaWYgKG91dHB1dENhbGMpCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7
Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKENhbGNP
cGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6
OkFkZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6Ok11bHRpcGx5OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIiI7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6Ok1pbjogcmV0dXJuICJtaW4oIjsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4
OiByZXR1cm4gIm1heCgiOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogcmV0dXJuICJj
bGFtcCgiOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gIiI7Cit9CisKKy8vIDxodHRwczovL2Ry
YWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzZXJpYWxpemUtYS1jYWxjdWxhdGlvbi10cmVl
Pgordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0
IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgR3Jv
dXBpbmdQYXJlbnMgcGFyZW5zKQoreworICAgIC8vIElmIHJvb3QgaXMgYSBudW1lcmljIHZhbHVl
LCBvciBhIG5vbi1tYXRoIGZ1bmN0aW9uLCBzZXJpYWxpemUgcm9vdCBwZXIgdGhlIG5vcm1hbCBy
dWxlcyBmb3IgaXQgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorICAgIGlmIChpczxDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlPihub2RlKSkgeworICAgICAgICBhdXRvJiB2YWx1ZU5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKTsKKyAgICAgICAgYnVpbGRlci5h
cHBlbmQodmFsdWVOb2RlLmN1c3RvbUNTU1RleHQoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUpKSB7CisgICAgICAgIGF1
dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obm9kZSk7
CisKKyAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9kZSgpKSB7CisgICAgICAg
ICAgICAvLyBJZiByb290IGlzIGEgU3VtIG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxs
eSBjb250YWluaW5nICIoIi4KKyAgICAgICAgICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJl
bnM6OkluY2x1ZGUpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJygnKTsKKworICAg
ICAgICAgICAgLy8gU2ltcGxpZmljYXRpb24gYWxyZWFkeSBzb3J0ZWQgY2hpbGRyZW4uCisgICAg
ICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKKyAgICAg
ICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkpOworICAgICAgICAgICAgLy8gU2VyaWFsaXpl
IHJvb3TigJlzIGZpcnN0IGNoaWxkLCBhbmQgYXBwZW5kIGl0IHRvIHMuCisgICAgICAgICAgICBi
dWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVpbGRlcik7CisKKyAgICAg
ICAgICAgIC8vIEZvciBlYWNoIGNoaWxkIG9mIHJvb3QgYmV5b25kIHRoZSBmaXJzdDoKKyAgICAg
ICAgICAgIC8vIElmIGNoaWxkIGlzIGEgTmVnYXRlIG5vZGUsIGFwcGVuZCAiIC0gIiB0byBzLCB0
aGVuIHNlcmlhbGl6ZSB0aGUgTmVnYXRl4oCZcyBjaGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQg
dG8gcy4KKyAgICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGEgbmVnYXRpdmUgbnVtZXJpYyB2YWx1
ZSwgYXBwZW5kICIgLSAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBuZWdhdGlvbiBvZiBjaGls
ZCBhcyBub3JtYWwgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICAvLyBP
dGhlcndpc2UsIGFwcGVuZCAiICsgIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSBjaGlsZCBhbmQgYXBw
ZW5kIHRoZSByZXN1bHQgdG8gcy4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkID0g
Y2hpbGRyZW5baV07CisgICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihj
aGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAtICIpOworICAg
ICAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93bmNhc3Q8Q1NTQ2FsY05l
Z2F0ZU5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWVOb2RlID0gZG93bmNhc3Q8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQuZ2V0KCkpOworICAgICAgICAgICAgICAg
ICAgICBpZiAocHJpbWl0aXZlVmFsdWVOb2RlLmlzTmVnYXRpdmUoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAtICIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gU2VyaWFsaXplIHRoZSBuZWdhdGlvbiBvZiBjaGlsZC4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwcmltaXRpdmVWYWx1ZU5vZGUudmFsdWUoKS5wcmltaXRp
dmVUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgwIC0gcHJp
bWl0aXZlVmFsdWVOb2RlLnZhbHVlKCkuZG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6
OnVuaXRUeXBlU3RyaW5nKHVuaXRUeXBlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICsgIik7CisgICAgICAg
ICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVk
ZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc0Nh
bGNQcm9kdWN0Tm9kZSgpKSB7CisgICAgICAgICAgICAvLyBJZiByb290IGlzIGEgUHJvZHVjdCBu
b2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIuCisgICAgICAg
ICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgIC8vIFNpbXBsaWZpY2F0aW9u
IGFscmVhZHkgc29ydGVkIGNoaWxkcmVuLgorICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBv
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6
ZSgpKTsKKyAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBjaGlsZCwgYW5k
IGFwcGVuZCBpdCB0byBzLgorICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxk
cmVuLmZpcnN0KCksIGJ1aWxkZXIpOworCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBv
ZiByb290IGJleW9uZCB0aGUgZmlyc3Q6CisgICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhbiBJ
bnZlcnQgbm9kZSwgYXBwZW5kICIgLyAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBJbnZlcnTi
gJlzIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAgICAgICAgICAgLy8gT3Ro
ZXJ3aXNlLCBhcHBlbmQgIiAqICIgdG8gcywgdGhlbiBzZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVu
ZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
Y2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGNo
aWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hp
bGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgLyAiKTsKKyAgICAg
ICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGRvd25jYXN0PENTU0NhbGNJbnZl
cnROb2RlPihjaGlsZC5nZXQoKSkuY2hpbGQoKSwgYnVpbGRlcik7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgKiAiKTsKKyAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUo
Y2hpbGQsIGJ1aWxkZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFyZW5z
ID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCcpJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBJ
ZiByb290IGlzIGFueXRoaW5nIGJ1dCBhIFN1bSwgTmVnYXRlLCBQcm9kdWN0LCBvciBJbnZlcnQg
bm9kZSwgc2VyaWFsaXplIGEgbWF0aCBmdW5jdGlvbiBmb3IgdGhlCisgICAgICAgIC8vIGZ1bmN0
aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUgdHlwZSwgdHJlYXRpbmcgdGhlIG5vZGXigJlz
IGNoaWxkcmVuIGFzIHRoZSBmdW5jdGlvbuKAmXMKKyAgICAgICAgLy8gY29tbWEtc2VwYXJhdGVk
IGNhbGN1bGF0aW9uIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorICAgICAgICBi
dWlsZGVyLmFwcGVuZChmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKG9wZXJhdGlvbk5vZGUuY2Fs
Y09wZXJhdG9yKCkpKTsKKworICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUu
Y2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyLCBHcm91cGluZ1Bh
cmVuczo6T21pdCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVu
LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKKyAgICAg
ICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbltpXSwgYnVpbGRlciwgR3JvdXBp
bmdQYXJlbnM6Ok9taXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBidWlsZGVyLmFw
cGVuZCgnKScpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczxDU1ND
YWxjTmVnYXRlTm9kZT4obm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmVnYXRlTm9kZSA9IGRvd25j
YXN0PENTU0NhbGNOZWdhdGVOb2RlPihub2RlKTsKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhIE5l
Z2F0ZSBub2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKC0xICog
Ii4KKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIi0xICoiKTsKKyAgICAgICAgYnVpbGRDU1NUZXh0
UmVjdXJzaXZlKG5lZ2F0ZU5vZGUuY2hpbGQoKSwgYnVpbGRlcik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihub2RlKSkgeworICAg
ICAgICBhdXRvJiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KG5vZGUp
OworICAgICAgICAvLyBJZiByb290IGlzIGFuIEludmVydCBub2RlLCBsZXQgcyBiZSBhIHN0cmlu
ZyBpbml0aWFsbHkgY29udGFpbmluZyAiKDEgLyAiLgorICAgICAgICBidWlsZGVyLmFwcGVuZCgi
MSAvICIpOworICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoaW52ZXJ0Tm9kZS5jaGlsZCgp
LCBidWlsZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwordm9pZCBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiY2Fs
YyBvcGVyYXRpb24gIiA8PCBtX29wZXJhdG9yIDw8ICIgKGNhdGVnb3J5OiAiIDw8IGNhdGVnb3J5
KCkgPDwgIiwgdHlwZSAiIDw8IHByaW1pdGl2ZVR5cGUoKSA8PCAiKSI7CisKKyAgICBUZXh0U3Ry
ZWFtOjpHcm91cFNjb3BlIHNjb3BlKHRzKTsKKyAgICB0cyA8PCBtX2NoaWxkcmVuLnNpemUoKSA8
PCAiIGNoaWxkcmVuIjsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAg
ICAgdHMuZHVtcFByb3BlcnR5KCJub2RlIiwgY2hpbGQpOworfQorCitib29sIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHApIGNvbnN0
Cit7CisgICAgaWYgKHR5cGUoKSAhPSBleHAudHlwZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBjb25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSYgb3RoZXIgPSBzdGF0aWNfY2FzdDxj
b25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSY+KGV4cCk7CisKKyAgICBpZiAobV9jaGlsZHJlbi5z
aXplKCkgIT0gb3RoZXIubV9jaGlsZHJlbi5zaXplKCkgfHwgbV9vcGVyYXRvciAhPSBvdGhlci5t
X29wZXJhdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFjb21wYXJlQ1NT
VmFsdWUobV9jaGlsZHJlbltpXSwgb3RoZXIubV9jaGlsZHJlbltpXSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitkb3VibGUgQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wLCBjb25zdCBW
ZWN0b3I8ZG91YmxlPiYgY2hpbGRyZW4pCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpBZGQ6IHsKKyAgICAgICAgZG91YmxlIHN1bSA9IDA7CisgICAgICAgIGZv
ciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgICAgIHN1bSArPSBjaGlsZDsKKyAg
ICAgICAgcmV0dXJuIHN1bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0
OgorICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICByZXR1cm4g
Y2hpbGRyZW5bMF0gLSBjaGlsZHJlblsxXTsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlw
bHk6IHsKKyAgICAgICAgZG91YmxlIHByb2R1Y3QgPSAxOworICAgICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxkOworICAgICAgICBy
ZXR1cm4gcHJvZHVjdDsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKKyAg
ICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9PSAxIHx8IGNoaWxkcmVuLnNpemUoKSA9PSAy
KTsKKyAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIHJldHVy
biBjaGlsZHJlblswXSAvIGNoaWxkcmVuWzFdOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46
IHsKKyAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICBkb3VibGUg
bWluaW11bSA9IGNoaWxkcmVuWzBdOworICAgICAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJl
bikKKyAgICAgICAgICAgIG1pbmltdW0gPSBzdGQ6Om1pbihtaW5pbXVtLCBjaGlsZCk7CisgICAg
ICAgIHJldHVybiBtaW5pbXVtOworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiB7
CisgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgZG91YmxlIG1h
eGltdW0gPSBjaGlsZHJlblswXTsKKyAgICAgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4p
CisgICAgICAgICAgICBtYXhpbXVtID0gc3RkOjptYXgobWF4aW11bSwgY2hpbGQpOworICAgICAg
ICByZXR1cm4gbWF4aW11bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7
CisgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMykKKyAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICBkb3VibGUg
bWluID0gY2hpbGRyZW5bMF07CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNoaWxkcmVuWzFdOwor
ICAgICAgICBkb3VibGUgbWF4ID0gY2hpbGRyZW5bMl07CisgICAgICAgIHJldHVybiBzdGQ6Om1h
eChtaW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKKyAgICB9CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCisKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENTU0NhbGNPcGVyYXRpb25Ob2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlKENhbGNPcGVyYXRvciwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+IGNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
JiYgdmFsdWVzKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVh
dGVQcm9kdWN0KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpOwor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZU1pbk9yTWF4T3JD
bGFtcChDYWxjT3BlcmF0b3IsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2
YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSk7CisKKyAgICBz
dGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnkoUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJik7CisKKyAgICBzdGF0aWMgdm9pZCBidWlsZENTU1RleHQoY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRlciYpOworCisgICAgQ2FsY09wZXJhdG9y
IGNhbGNPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3I7IH0KKyAgICBib29sIGlz
Q2FsY1N1bU5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6
QWRkOyB9CisgICAgYm9vbCBpc0NhbGNQcm9kdWN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
cmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsgfQorICAgIGJvb2wgaXNNaW5Pck1heE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1f
b3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXg7IH0KKyAgICBib29sIHNob3VsZFNvcnRDaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzQ2FsY1N1bU5vZGUoKSB8fCBpc0NhbGNQcm9kdWN0Tm9k
ZSgpOyB9CisKKyAgICB2b2lkIGhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9y
KTsKKyAgICB2b2lkIGNvbWJpbmVDaGlsZHJlbigpOworICAgIAorICAgIGJvb2wgY2FuQ29tYmlu
ZUFsbENoaWxkcmVuKCkgY29uc3Q7CisKKyAgICBjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKyAg
ICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIHsgcmV0dXJu
IG1fY2hpbGRyZW47IH0KKworcHJpdmF0ZToKKyAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxj
dWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmln
aHRTaWRlKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKKyAgICAg
ICAgLCBtX29wZXJhdG9yKG9wKQorICAgIHsKKyAgICAgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDIpOworICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGxlZnRTaWRlKSk7CisgICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocmlnaHRTaWRlKSk7CisgICAgfQorCisgICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4pCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNhdGVnb3J5KQorICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCisgICAgICAgICwgbV9j
aGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKKyAgICB7CisgICAgfQorCisgICAgVHlwZSB0eXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3NzQ2FsY09wZXJhdGlvbjsgfQorCisgICAgYm9vbCBp
c1plcm8oKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZShw
cmltaXRpdmVUeXBlKCkpOworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlw
ZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29u
c3QgZmluYWw7CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5h
bDsKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhI
YXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgc3RhdGljIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSogZ2V0TnVtYmVyU2lkZShDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSkKKyAgICB7CisgICAgICAgIGlmIChsZWZ0U2lkZS5j
YXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJl
dHVybiAmbGVmdFNpZGU7CisgICAgICAgIGlmIChyaWdodFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gJnJpZ2h0U2lkZTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZG91YmxlIGV2YWx1YXRlKGNv
bnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBldmFsdWF0ZU9wZXJhdG9yKG1fb3BlcmF0b3IsIGNoaWxkcmVuKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yLCBjb25zdCBWZWN0b3I8
ZG91YmxlPiYpOworICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlm
eU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKKyAgICBzdGF0
aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlSZWN1cnNpdmUoUmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKKyAgICAKKyAgICBlbnVtIGNsYXNzIEdy
b3VwaW5nUGFyZW5zIHsKKyAgICAgICAgT21pdCwKKyAgICAgICAgSW5jbHVkZQorICAgIH07Cisg
ICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0IENTU0NhbGNFeHByZXNz
aW9uTm9kZSYsIFN0cmluZ0J1aWxkZXImLCBHcm91cGluZ1BhcmVucyA9IEdyb3VwaW5nUGFyZW5z
OjpJbmNsdWRlKTsKKworICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOworICAgIFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKK307CisKK30KKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNPcGVyYXRpb25O
b2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3ND
YWxjT3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIgorCisjaW5jbHVkZSAiQ1NTQ2Fs
Y0NhdGVnb3J5TWFwcGluZy5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5j
bHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNz
aW9uTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCIKKyNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0
ZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShXVEZNb3ZlKHZhbHVlKSkpOworfQorCitS
ZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSwgQ1NTVW5pdFR5cGUgdHlwZSkKK3sKKyAgICBpZiAoIXN0
ZDo6aXNmaW5pdGUodmFsdWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
YWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZSh2YWx1ZSwgdHlwZSkpKTsKK30KKworU3RyaW5nIENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlLT5jc3NU
ZXh0KCk7Cit9CisKK0NTU1VuaXRUeXBlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OnByaW1p
dGl2ZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7
Cit9CisKK0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQorICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNhbGNVbml0Q2F0ZWdvcnkodmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkpCisgICAgLCBt
X3ZhbHVlKFdURk1vdmUodmFsdWUpKQoreworfQorCisvLyBGSVhNRTogVXNlIGNhbGNVbml0Q2F0
ZWdvcnk/Citib29sIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTnVtZXJpY1ZhbHVlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZS0+aXNMZW5ndGgoKSB8fCBtX3ZhbHVlLT5pc051
bWJlcigpIHx8IG1fdmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8IG1fdmFsdWUtPmlzQW5nbGUoKQor
ICAgICAgICB8fCBtX3ZhbHVlLT5pc1RpbWUoKSB8fCBtX3ZhbHVlLT5pc1Jlc29sdXRpb24oKSB8
fCBtX3ZhbHVlLT5pc0ZsZXgoKSB8fCBtX3ZhbHVlLT5pc0ZyZXF1ZW5jeSgpOworfQorCitib29s
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTmVnYXRpdmUoKSBjb25zdAoreworICAgIHJl
dHVybiBpc051bWVyaWNWYWx1ZSgpICYmIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCkgPCAwLjA7Cit9
CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRlKCkKK3sKKyAgICBBU1NF
UlQoaXNOdW1lcmljVmFsdWUoKSk7CisgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoMC4wIC0gbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppbnZlcnQoKQorewor
ICAgIEFTU0VSVChpc051bWVyaWNWYWx1ZSgpKTsKKyAgICBpZiAoIW1fdmFsdWUtPmRvdWJsZVZh
bHVlKCkpCisgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlw
ZSgpKTsKKworICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEuMCAvIG1f
dmFsdWUtPmRvdWJsZVZhbHVlKCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Cit9CisKK3Zv
aWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6YWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUmIG5vZGUsIFVuaXRDb252ZXJzaW9uIHVuaXRDb252ZXJzaW9uKQoreworICAgIGF1
dG8gdmFsdWVUeXBlID0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworCisgICAgc3dpdGNoICh1
bml0Q29udmVyc2lvbikgeworICAgIGNhc2UgVW5pdENvbnZlcnNpb246OkludmFsaWQ6CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFVuaXRD
b252ZXJzaW9uOjpQcmVzZXJ2ZToKKyAgICAgICAgQVNTRVJUKG5vZGUucHJpbWl0aXZlVHlwZSgp
ID09IHZhbHVlVHlwZSk7CisgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKCkgKyBub2RlLmRvdWJsZVZhbHVlKHZhbHVlVHlwZSks
IHZhbHVlVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5pdENvbnZlcnNpb246OkNh
bm9uaWNhbGl6ZTogeworICAgICAgICBhdXRvIHZhbHVlQ2F0ZWdvcnkgPSB1bml0Q2F0ZWdvcnko
dmFsdWVUeXBlKTsKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgYXdrd2FyZCB0aGF0IGNhbm9uaWNh
bFVuaXRUeXBlRm9yQ2F0ZWdvcnkoKSBoYXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgQ1NTVW5pdENh
dGVnb3J5OjpQZXJjZW50LgorICAgICAgICBhdXRvIGNhbm9uaWNhbFR5cGUgPSB2YWx1ZUNhdGVn
b3J5ID09IENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudCA/IENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VO
VEFHRSA6IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkodmFsdWVDYXRlZ29yeSk7CisgICAg
ICAgIEFTU0VSVChjYW5vbmljYWxUeXBlICE9IENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTik7Cisg
ICAgICAgIGRvdWJsZSBsZWZ0VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZShjYW5vbmljYWxU
eXBlKTsKKyAgICAgICAgZG91YmxlIHJpZ2h0VmFsdWUgPSBub2RlLmRvdWJsZVZhbHVlKGNhbm9u
aWNhbFR5cGUpOworICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShs
ZWZ0VmFsdWUgKyByaWdodFZhbHVlLCBjYW5vbmljYWxUeXBlKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIH0KK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjptdWx0aXBs
eShkb3VibGUgbXVsdGlwbGllcikKK3sKKyAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFsdWUtPnBy
aW1pdGl2ZVR5cGUoKTsKKyAgICBBU1NFUlQoaGFzRG91YmxlVmFsdWUodmFsdWVUeXBlKSk7Cisg
ICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV92YWx1ZS0+ZG91YmxlVmFs
dWUodmFsdWVUeXBlKSAqIG11bHRpcGxpZXIsIHZhbHVlVHlwZSk7Cit9CisKK3ZvaWQgQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29udmVydFRvVW5pdFR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5
cGUpCit7CisgICAgQVNTRVJUKHVuaXRDYXRlZ29yeSh1bml0VHlwZSkgPT0gdW5pdENhdGVnb3J5
KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkpOworICAgIGRvdWJsZSBuZXdWYWx1ZSA9IG1fdmFs
dWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShuZXdWYWx1ZSwgdW5pdFR5cGUpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU6OmNhbm9uaWNhbGl6ZVVuaXQoKQoreworICAgIGF1dG8gY2F0ZWdvcnkgPSBj
YWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24obV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgp
KTsKKyAgICBpZiAoY2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCisgICAg
ICAgIHJldHVybjsKKworICAgIGF1dG8gY2Fub25pY2FsVHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBl
Rm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRlZ29yeSk7CisgICAgaWYgKGNhbm9uaWNhbFR5cGUg
PT0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBkb3Vi
bGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKKyAgICBt
X3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShuZXdWYWx1ZSwgY2Fub25pY2FsVHlw
ZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAgIHN3aXRjaCAoY2F0ZWdv
cnkoKSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgorICAgICAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk51bWJlcj4obV92YWx1ZS0+ZmxvYXRWYWx1
ZSgpKTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KExlbmd0aChtX3ZhbHVlLT5jb21w
dXRlTGVuZ3RoPGZsb2F0Pihjb252ZXJzaW9uRGF0YSksIExlbmd0aFR5cGU6OkZpeGVkKSk7Cisg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OgorICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDogeworICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxD
YWxjRXhwcmVzc2lvbkxlbmd0aD4obV92YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRD
b252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKSk7CisgICAgfQor
ICAgIC8vIE9ubHkgdHlwZXMgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGEgTGVuZ3RoIGV4cHJlc3Np
b24gY2FuIGJlIGNvbnZlcnRlZAorICAgIC8vIHRvIGEgQ2FsY0V4cHJlc3Npb25Ob2RlLiBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyIG1ha2VzIG5vIHNlbnNlIGFzIGEgTGVuZ3Ro
LgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6VGltZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKKyAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK2RvdWJsZSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkb3VibGVWYWx1ZShD
U1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QKK3sKKyAgICBpZiAoaGFzRG91YmxlVmFsdWUodW5p
dFR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQodW5pdENhdGVn
b3J5KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkgPT0gdW5pdENhdGVnb3J5KHVuaXRUeXBlKSks
IGJ1dCBvbmx5IHdoZW4gYWxsIGNhbGxlcnMgYXJlIGZpeGVkIChlLmcuIHdlYmtpdC5vcmcvYi8y
MDQ4MjYpLgorICAgICAgICBpZiAodW5pdENhdGVnb3J5KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUo
KSkgIT0gdW5pdENhdGVnb3J5KHVuaXRUeXBlKSkgeworICAgICAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKENhbGMsIHN0cmVhbSA8PCAiQ2FsbGluZyBkb3VibGVWYWx1ZSgpIHdpdGggdW5pdCAiIDw8
IHVuaXRUeXBlIDw8ICIgb24gYSBub2RlIG9mIHVuaXQgdHlwZSAiIDw8IG1fdmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSA8PCAiIHdoaWNoIGlzIGluY29tcGF0aWJsZSIpOworICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV92YWx1ZS0+ZG91YmxlVmFsdWUo
dW5pdFR5cGUpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworZG91YmxlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbXB1dGVMZW5ndGhQ
eChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aDoKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZG91Ymxl
Pihjb252ZXJzaW9uRGF0YSk7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgorICAgICAgICByZXR1cm4g
bV92YWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVy
OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVl
bmN5OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIG1fdmFsdWUtPmNvbGxlY3REaXJlY3RD
b21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVz
KEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBtX3ZhbHVlLT5j
b2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKwor
Ym9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc1plcm8oKSBjb25zdAoreworICAgIHJl
dHVybiAhbV92YWx1ZS0+ZG91YmxlVmFsdWUoKTsKK30KKworYm9vbCBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29u
c3QKK3sKKyAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZShtX3ZhbHVlLCBzdGF0aWNfY2FzdDxj
b25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJj4ob3RoZXIpLm1fdmFsdWUpOworfQorCit2
b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0
Cit7CisgICAgdHMgPDwgInZhbHVlICIgPDwgbV92YWx1ZS0+Y3VzdG9tQ1NTVGV4dCgpIDw8ICIg
KGNhdGVnb3J5OiAiIDw8IGNhdGVnb3J5KCkgPDwgIiwgdHlwZTogIiA8PCBwcmltaXRpdmVUeXBl
KCkgPDwgIikiOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBDU1NQcmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CisK
K2VudW0gQ1NTUHJvcGVydHlJRCA6IHVpbnQxNl90OworCitjbGFzcyBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlPiBjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmKTsKKyAgICBz
dGF0aWMgUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IGNyZWF0ZShkb3VibGUgdmFs
dWUsIENTU1VuaXRUeXBlKTsKKworICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CisK
KyAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWw7CisKKyAgICBib29s
IGlzTnVtZXJpY1ZhbHVlKCkgY29uc3Q7CisgICAgYm9vbCBpc05lZ2F0aXZlKCkgY29uc3Q7CisK
KyAgICB2b2lkIG5lZ2F0ZSgpOworICAgIHZvaWQgaW52ZXJ0KCk7CisKKyAgICBlbnVtIGNsYXNz
IFVuaXRDb252ZXJzaW9uIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgUHJlc2VydmUsCisg
ICAgICAgIENhbm9uaWNhbGl6ZQorICAgIH07CisgICAgdm9pZCBhZGQoY29uc3QgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZSYsIFVuaXRDb252ZXJzaW9uID0gVW5pdENvbnZlcnNpb246OlByZXNl
cnZlKTsKKyAgICB2b2lkIG11bHRpcGx5KGRvdWJsZSk7CisKKyAgICB2b2lkIGNvbnZlcnRUb1Vu
aXRUeXBlKENTU1VuaXRUeXBlKTsKKyAgICB2b2lkIGNhbm9uaWNhbGl6ZVVuaXQoKTsKKworICAg
IGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUu
Z2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsOworICAg
IGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0IGZp
bmFsOworICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNQcmltaXRp
dmVWYWx1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3Jl
YXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0
IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7
CisKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYp
IGNvbnN0IGZpbmFsOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmKTsKKworICAgIFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4gbV92YWx1ZTsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1ND
QUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUsIHR5cGUoKSA9PSBX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNQcmltaXRpdmVWYWx1
ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExLCAy
MDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgorCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0ludmVydE5vZGUuaCIKKyNpbmNsdWRlICJD
U1NDYWxjTmVnYXRlTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNPcGVyYXRpb25Ob2RlLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKKyNpbmNsdWRlICJDU1NQcmlt
aXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIFJlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBDYWxjRXhwcmVzc2lvbk5v
ZGUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworCitz
dGF0aWMgaW5saW5lIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlQmxlbmRIYWxm
KGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0IHBy
b2dyZXNzKQoreworICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNP
cGVyYXRvcjo6TXVsdGlwbHksIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKSwKKyAgICAgICAgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cHJvZ3Jlc3MsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSkpOworfQorCitzdGF0aWMgVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBjcmVhdGVDU1MoY29uc3QgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKK3sKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVl
czsKKyAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2Rlcy5zaXplKCkpOworICAg
IGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7CisgICAgICAgIGF1dG8gY3NzTm9kZSA9IGNyZWF0
ZUNTUygqbm9kZSwgc3R5bGUpOworICAgICAgICBpZiAoIWNzc05vZGUpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VO
b25OdWxsKCkpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWVzOworfQorCitzdGF0aWMgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0IENhbGNFeHByZXNzaW9uTm9k
ZSYgbm9kZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIHN3aXRjaCAobm9kZS50
eXBlKCkpIHsKKyAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcjogeworICAg
ICAgICBmbG9hdCB2YWx1ZSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihub2RlKS52
YWx1ZSgpOyAvLyBkb3VibGU/CisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpM
ZW5ndGg6IHsKKyAgICAgICAgYXV0byYgbGVuZ3RoID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25M
ZW5ndGg+KG5vZGUpLmxlbmd0aCgpOworICAgICAgICBpZiAoIWxlbmd0aC5pc1BlcmNlbnQoKSAm
JiBsZW5ndGguaXNaZXJvKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKTsKKyAgICB9CisKKyAgICBjYXNlIENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uOiB7CisgICAgICAgIGF1dG8gY2hpbGROb2RlID0g
Y3JlYXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihub2RlKS5jaGlsZCgp
LCBzdHlsZSk7CisgICAgICAgIGlmICghY2hpbGROb2RlKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIHJldHVybiBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlKGNoaWxkTm9k
ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVU
eXBlOjpJbnZlcnNpb246IHsKKyAgICAgICAgYXV0byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRv
d25jYXN0PENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihub2RlKS5jaGlsZCgpLCBzdHlsZSk7Cisg
ICAgICAgIGlmICghY2hpbGROb2RlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRp
b246IHsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uPihub2RlKTsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uQ2hpbGRyZW4gPSBv
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgIENhbGNPcGVyYXRvciBvcCA9IG9wZXJh
dGlvbk5vZGUuZ2V0T3BlcmF0b3IoKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAob3ApIHsK
KyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogeworICAgICAgICAgICAgYXV0byBjaGls
ZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOworICAgICAgICAgICAg
aWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShjaGlsZHJlblswXSk7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgIH0KKyAg
ICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7CisgICAgICAgICAgICBBU1NFUlQo
b3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09IDIpOworCisgICAgICAgICAgICBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKKyAgICAgICAgICAgIHZhbHVlcy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGF1dG8gZmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hp
bGRyZW5bMF0sIHN0eWxlKTsKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2hpbGQgPSBjcmVhdGVD
U1MoKm9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7CisKKyAgICAgICAgICAgIGlmICghc2Vj
b25kQ2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CisKKyAgICAgICAg
ICAgIGF1dG8gbmVnYXRlTm9kZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUoc2Vjb25kQ2hp
bGQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZU5vZGU7CisKKyAgICAgICAgICAgIHZhbHVlcy5hcHBl
bmQoZmlyc3RDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBl
bmQoV1RGTW92ZShuZWdhdGVOb2RlKSk7CisKKyAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUodmFsdWVzKSk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAgICAgICBhdXRvIGNoaWxk
cmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7CisgICAgICAgICAgICBp
ZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdU
Rk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6
RGl2aWRlOiB7CisgICAgICAgICAgICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09
IDIpOworCisgICAgICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZh
bHVlczsKKyAgICAgICAgICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlv
bkNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gZmlyc3RD
aGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKKyAgICAgICAg
ICAgIGlmICghZmlyc3RDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgICAgICAgICAgYXV0byBzZWNvbmRDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRy
ZW5bMV0sIHN0eWxlKTsKKyAgICAgICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIGludmVydE5vZGUgPSBDU1ND
YWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOworCisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUoaW52ZXJ0Tm9kZSkpOworCisgICAgICAg
ICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoY3JlYXRlQ1NT
KG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSkpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNaW46CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6CisgICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogeworICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9
IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOworICAgICAgICAgICAgaWYgKGNo
aWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1w
KG9wLCBXVEZNb3ZlKGNoaWxkcmVuKSwgb3BlcmF0aW9uTm9kZS5kZXN0aW5hdGlvbkNhdGVnb3J5
KCkpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
fQorICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGg6IHsKKyAgICAg
ICAgLy8gRklYTUU6IChodHRwOi8vd2Via2l0Lm9yZy9iLzEyMjAzNikgQ3JlYXRlIGEgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlIGVxdWl2YWxlbnQgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC4K
KyAgICAgICAgYXV0byYgYmxlbmQgPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
Pihub2RlKTsKKyAgICAgICAgZmxvYXQgcHJvZ3Jlc3MgPSBibGVuZC5wcm9ncmVzcygpOworICAg
ICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6OkFk
ZCwgY3JlYXRlQmxlbmRIYWxmKGJsZW5kLmZyb20oKSwgc3R5bGUsIDEgLSBwcm9ncmVzcyksIGNy
ZWF0ZUJsZW5kSGFsZihibGVuZC50bygpLCBzdHlsZSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisgICAg
Y2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworc3RhdGljIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmIGxlbmd0
aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUo
KSkgeworICAgIGNhc2UgTGVuZ3RoVHlwZTo6UGVyY2VudDoKKyAgICBjYXNlIExlbmd0aFR5cGU6
OkZpeGVkOgorICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRl
KENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLCBzdHlsZSkpOworICAgIGNhc2UgTGVu
Z3RoVHlwZTo6Q2FsY3VsYXRlZDoKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGguY2Fs
Y3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSwgc3R5bGUpOworICAgIGNhc2UgTGVuZ3RoVHlw
ZTo6QXV0bzoKKyAgICBjYXNlIExlbmd0aFR5cGU6OkludHJpbnNpYzoKKyAgICBjYXNlIExlbmd0
aFR5cGU6Ok1pbkludHJpbnNpYzoKKyAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkNvbnRlbnQ6Cisg
ICAgY2FzZSBMZW5ndGhUeXBlOjpNYXhDb250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6Rmls
bEF2YWlsYWJsZToKKyAgICBjYXNlIExlbmd0aFR5cGU6OkZpdENvbnRlbnQ6CisgICAgY2FzZSBM
ZW5ndGhUeXBlOjpSZWxhdGl2ZToKKyAgICBjYXNlIExlbmd0aFR5cGU6OlVuZGVmaW5lZDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOwor
fQorCitDU1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYmIGV4cHJlc3Npb24sIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQorICAgIDogQ1NT
VmFsdWUoQ2FsY3VsYXRpb25DbGFzcykKKyAgICAsIG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJl
c3Npb24pKQorICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlKQoreworfQorCitDU1NDYWxjVmFsdWU6On5DU1NDYWxjVmFsdWUoKSA9IGRlZmF1
bHQ7CisKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgQ1NTQ2FsY1ZhbHVlOjpjYXRlZ29yeSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZXhwcmVzc2lvbi0+Y2F0ZWdvcnkoKTsKK30KKworQ1NTVW5pdFR5
cGUgQ1NTQ2FsY1ZhbHVlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9l
eHByZXNzaW9uLT5wcmltaXRpdmVUeXBlKCk7Cit9CisKK1JlZjxDYWxjdWxhdGlvblZhbHVlPiBD
U1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIENhbGN1bGF0
aW9uVmFsdWU6OmNyZWF0ZShtX2V4cHJlc3Npb24tPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZl
cnNpb25EYXRhKSwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgPyBWYWx1ZVJhbmdlOjpOb25O
ZWdhdGl2ZSA6IFZhbHVlUmFuZ2U6OkFsbCk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ZhbHVlOjpzZXRQ
ZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UgcmFuZ2UpCit7CisgICAgbV9zaG91bGRDbGFt
cFRvTm9uTmVnYXRpdmUgPSByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGw7Cit9CisKK3ZvaWQgQ1NT
Q2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgbV9leHByZXNzaW9uLT5jb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENT
U0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBtX2V4cHJlc3Npb24t
PmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQor
CitTdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dChtX2V4cHJlc3Npb24uZ2V0KCksIGJ1aWxkZXIpOworICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVl
JiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fZXhwcmVzc2lv
biwgb3RoZXIubV9leHByZXNzaW9uKTsKK30KKworaW5saW5lIGRvdWJsZSBDU1NDYWxjVmFsdWU6
OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZShkb3VibGUgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKK30K
KworZG91YmxlIENTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25zdAoreworICAgIHJldHVy
biBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZShwcmltaXRp
dmVUeXBlKCkpKTsKK30KKworZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAorewor
ICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5jb21wdXRlTGVu
Z3RoUHgoY29udmVyc2lvbkRhdGEpKTsKK30KKworYm9vbCBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1
bmN0aW9uKENTU1ZhbHVlSUQgZnVuY3Rpb25JZCkKK3sKKyAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQp
IHsKKyAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoK
KyAgICBjYXNlIENTU1ZhbHVlTWluOgorICAgIGNhc2UgQ1NTVmFsdWVNYXg6CisgICAgY2FzZSBD
U1NWYWx1ZUNsYW1wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDU1ND
YWxjVmFsdWU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgaW5kZW50
IDw8ICIoIiA8PCAiQ1NTQ2FsY1ZhbHVlIjsKKworICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3Ry
ZWFtOworICAgIG11bHRpbGluZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5kZW50KCkgKyAyKTsKKwor
ICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoInNob3VsZCBjbGFtcCBub24tbmVnYXRp
dmUiLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7CisgICAgbXVsdGlsaW5lU3RyZWFtLmR1
bXBQcm9wZXJ0eSgiZXhwcmVzc2lvbiIsIG1fZXhwcmVzc2lvbi5nZXQoKSk7CisKKyAgICB0cyA8
PCBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOworICAgIHRzIDw8ICIpXG4iOworfQorCitSZWZQ
dHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9u
LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSByYW5nZSkKK3sKKyAgICBDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIgcGFyc2VyKGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgIGF1dG8g
ZXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUNhbGModG9rZW5zLCBmdW5jdGlvbik7CisgICAgaWYg
KCFleHByZXNzaW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBhdXRvIHJlc3VsdCA9
IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgpLCBy
YW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGwpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3Ry
ZWFtIDw8ICJDU1NDYWxjVmFsdWU6OmNyZWF0ZSAiIDw8ICpyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisgICAgCitSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0
ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQoreworICAgIGF1dG8gZXhwcmVzc2lvbiA9IGNyZWF0ZUNTUyh2YWx1ZS5leHByZXNzaW9uKCks
IHN0eWxlKTsKKyAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgYXV0byBzaW1wbGlmaWVkRXhwcmVzc2lvbiA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpz
aW1wbGlmeShleHByZXNzaW9uLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgYXV0byByZXN1bHQg
PSBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKFdURk1vdmUoc2ltcGxpZmllZEV4cHJlc3Npb24p
LCB2YWx1ZS5zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoKSkpOworICAgIExPR19XSVRIX1NUUkVB
TShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3JlYXRlIGZyb20gQ2FsY3VsYXRpb25W
YWx1ZTogIiA8PCAqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxjVmFsdWUmIHZhbHVlKQor
eworICAgIHZhbHVlLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAi
Q2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8
d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0NhbGNFeHByZXNz
aW9uTm9kZTsKK2NsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CitjbGFzcyBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhOworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2VudW0gY2xhc3MgQ1NTVW5pdFR5
cGUgOiB1aW50OF90OworZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVnb3J5IDogdWludDhfdDsK
K2VudW0gY2xhc3MgVmFsdWVSYW5nZSA6IHVpbnQ4X3Q7CisKK2NsYXNzIENTU0NhbGNWYWx1ZSBm
aW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJUb2tl
blJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJh
bmdlKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKGNvbnN0IENhbGN1
bGF0aW9uVmFsdWUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIH5DU1NDYWxjVmFsdWUoKTsK
KworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdDsKKyAgICBkb3VibGUg
ZG91YmxlVmFsdWUoKSBjb25zdDsKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdDsKKyAgICBDU1NVbml0VHlwZSBwcmltaXRp
dmVUeXBlKCkgY29uc3Q7CisKKyAgICBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRlQ2FsY3Vs
YXRpb25WYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3Q7CisgICAg
dm9pZCBzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UpOworCisgICAgdm9pZCBjb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JikgY29uc3Q7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OworCisgICAgU3RyaW5nIGN1c3Rv
bUNTU1RleHQoKSBjb25zdDsKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjVmFsdWUmKSBj
b25zdDsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0NhbGNGdW5jdGlvbihDU1NWYWx1ZUlEKTsK
KworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgQ1NT
Q2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGJvb2wgc2hvdWxkQ2xhbXBU
b05vbk5lZ2F0aXZlKTsKKworICAgIGRvdWJsZSBjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91Ymxl
KSBjb25zdDsKKworICAgIGNvbnN0IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVz
c2lvbjsKKyAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlOworfTsKKworVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ1NTQ2FsY1ZhbHVlJik7CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfVkFMVUUo
Q1NTQ2FsY1ZhbHVlLCBpc0NhbGNWYWx1ZSgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkocmV2aXNpb24g
Mjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhl
bHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmgiCiAKLSNpbmNsdWRl
ICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDcm9zc2ZhZGVWYWx1ZS5oIgog
I2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNs
dWRlICJDU1NQYWludEltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQYXJzZXJJZGlvbXMuaCIK
ICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5
LmgiCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiQ29sb3JMdW1pbmFu
Y2UuaCIKICNpbmNsdWRlICJQYWlyLmgiCkBAIC05NCw3ICs5NSw3IEBAIHN0YXRpYyBPcHRpb25h
bDxkb3VibGU+IGNvbnN1bWVOdW1iZXJPclAKICAgICByZXR1cm4gc3RkOjpudWxsb3B0OwogfQog
Ci0vLyBGSVhNRTogY29uc2lkZXIgcHVsbGluZyBpbiB0aGUgcGFyc2luZyBsb2dpYyBmcm9tIENT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwLgorLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhl
IHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuCiBjbGFzcyBD
YWxjUGFyc2VyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDYWxjUGFyc2VyKENTU1BhcnNlclRv
a2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnks
IFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwgQ1NTVmFsdWVQb29sJiBj
c3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHJldmlzaW9uIDI3ODIzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuY3BwCShub25leGlz
dGVudCkKQEAgLTEsMjgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNhbGN1
bGF0aW9uVmFsdWUuaCIKLQotI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUg
PGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotUmVmPENhbGN1bGF0aW9uVmFsdWU+IENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0
ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiB2YWx1ZSwgVmFsdWVSYW5nZSBy
YW5nZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWxjdWxhdGlvblZhbHVlKFdURk1v
dmUodmFsdWUpLCByYW5nZSkpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6ZXZh
bHVhdGUoZmxvYXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWU7Ci19Ci0KLXZvaWQgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXI6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMg
PDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKG1fdmFsdWUpOwot
fQotCi1ib29sIENhbGNFeHByZXNzaW9uTnVtYmVyOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHBy
ZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9u
TnVtYmVyPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25OdW1iZXI+
KG90aGVyKTsKLX0KLQotZmxvYXQgQ2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0Ci17Ci0gICAgZmxvYXQgcmVzdWx0ID0gbV9leHByZXNzaW9uLT5ldmFsdWF0
ZShtYXhWYWx1ZSk7Ci0gICAgLy8gRklYTUU6IFRoaXMgdGVzdCB3YXMgb3JpZ2luYWxseSBuZWVk
ZWQgd2hlbiB3ZSBkaWQgbm90IGRldGVjdCBkaXZpc2lvbiBieSB6ZXJvIGF0IHBhcnNlIHRpbWUu
Ci0gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgbm93IHVubmVlZGVkIGNvZGUgYW5k
IGNhbiBiZSByZW1vdmVkLgotICAgIGlmIChzdGQ6OmlzbmFuKHJlc3VsdCkpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAmJiByZXN1bHQg
PCAwID8gMCA6IHJlc3VsdDsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6ZXZh
bHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIC1tX2NoaWxkLT5ldmFs
dWF0ZShtYXhWYWx1ZSk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6b3BlcmF0
b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVy
biBpczxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8
Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIpOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9u
TmVnYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIi0oIjsK
LSAgICB0cyA8PCAqbV9jaGlsZDsKLSAgICB0cyA8PCAiKSI7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uJiBiKQotewotICAgIHJldHVybiAqYS5jaGlsZCgpID09ICpiLmNoaWxkKCk7Ci19Ci0K
LWZsb2F0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gMS4wZiAvIG1fY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsK
LX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykg
Y29uc3QKLXsKLSAgICB0cyA8PCAiMS4wIC8gIiA8PCAiKCI7Ci0gICAgdHMgPDwgKm1fY2hpbGQ7
Ci0gICAgdHMgPDwgIikiOwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVy
YXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIGlzPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNh
c3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG90aGVyKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbklu
dmVyc2lvbiYgYikKLXsKLSAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgpOwotfQot
Ci1mbG9hdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUp
IGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX29wZXJhdG9yKSB7Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6OkFkZDogewotICAgICAgICBmbG9hdCBzdW0gPSAwOwotICAgICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAgIHN1bSArPSBjaGlsZC0+ZXZhbHVhdGUobWF4
VmFsdWUpOwotICAgICAgICByZXR1cm4gc3VtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6U3VidHJhY3Q6IHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQVNTRVJUKG1fY2hpbGRy
ZW4uc2l6ZSgpID09IDIpOwotICAgICAgICBmbG9hdCBsZWZ0ID0gbV9jaGlsZHJlblswXS0+ZXZh
bHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmbG9hdCByaWdodCA9IG1fY2hpbGRyZW5bMV0tPmV2
YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGxlZnQgLSByaWdodDsKLSAgICB9Ci0g
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Ci0gICAgICAgIGZsb2F0IHByb2R1Y3Qg
PSAxOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAg
IHByb2R1Y3QgKj0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHBy
b2R1Y3Q7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAgICAgICAg
Ly8gRklYTUUKLSAgICAgICAgQVNTRVJUKG1fY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwgbV9jaGls
ZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9PSAxKQot
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKLSAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVl
KTsKLSAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1
ZSk7Ci0gICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpNaW46IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLSAg
ICAgICAgZmxvYXQgbWluaW11bSA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsK
LSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBtaW5p
bXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKSk7Ci0gICAg
ICAgIHJldHVybiBtaW5pbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiB7
Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBz
dGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0IG1h
eGltdW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZvciAo
YXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgbWF4aW11bSA9IHN0ZDo6bWF4
KG1heGltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkpOwotICAgICAgICByZXR1cm4gbWF4
aW11bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7Ci0gICAgICAgIGlm
IChtX2NoaWxkcmVuLnNpemUoKSAhPSAzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLQotICAgICAgICBmbG9hdCBtaW4gPSBtX2No
aWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZsb2F0IHZhbHVlID0gbV9j
aGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmbG9hdCBtYXggPSBtX2No
aWxkcmVuWzJdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1heCht
aW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKLSAgICB9Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRf
TmFOKCk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246Om9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhw
cmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24mIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJiBi
KQotewotICAgIGlmIChhLmdldE9wZXJhdG9yKCkgIT0gYi5nZXRPcGVyYXRvcigpIHx8IGEuZGVz
dGluYXRpb25DYXRlZ29yeSgpICE9IGIuZGVzdGluYXRpb25DYXRlZ29yeSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2UgdG8gaGF2ZSBhIGhlbHBl
ciBmdW5jdGlvbiBmb3IgZG9pbmcgYSBkZWVwIGNvbXBhcmUgb24gYSB2ZWN0b3Igb2YgcG9pbnRl
cnMuCi0gICAgaWYgKGEuY2hpbGRyZW4oKS5zaXplKCkgIT0gYi5jaGlsZHJlbigpLnNpemUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmNo
aWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCEoKmEuY2hpbGRyZW4oKVtpXSA9
PSAqYi5jaGlsZHJlbigpW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246OmR1bXAo
VGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJh
dG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1heCkgewotICAgICAgICB0
cyA8PCBtX29wZXJhdG9yIDw8ICIoIjsKLSAgICAgICAgc2l6ZV90IGNoaWxkcmVuQ291bnQgPSBt
X2NoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJl
bkNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIHRzIDw8IG1fY2hpbGRyZW5baV0uZ2V0KCk7Ci0g
ICAgICAgICAgICBpZiAoaSA8IGNoaWxkcmVuQ291bnQgLSAxKQotICAgICAgICAgICAgICAgIHRz
IDw8ICIsICI7Ci0gICAgICAgIH0KLSAgICAgICAgdHMgPDwgIikiOwotICAgIH0gZWxzZQotICAg
ICAgICB0cyA8PCBtX2NoaWxkcmVuWzBdLmdldCgpIDw8ICIgIiA8PCBtX29wZXJhdG9yIDw8ICIg
IiA8PCBtX2NoaWxkcmVuWzFdLmdldCgpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVzc2lvbkxlbmd0
aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZsb2F0VmFs
dWVGb3JMZW5ndGgobV9sZW5ndGgsIG1heFZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lv
bkxlbmd0aDo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25z
dAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpICYmICp0aGlz
ID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihvdGhlcik7Ci19Ci0KLXZvaWQgQ2Fs
Y0V4cHJlc3Npb25MZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMg
PDwgbV9sZW5ndGg7Ci19Ci0KLUNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OkNhbGNFeHByZXNz
aW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQgcHJvZ3Jlc3MpCi0g
ICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5n
dGgpCi0gICAgLCBtX2Zyb20oZnJvbSkKLSAgICAsIG1fdG8odG8pCi0gICAgLCBtX3Byb2dyZXNz
KHByb2dyZXNzKQotewotICAgIC8vIEZsYXR0ZW4gbmVzdGluZyBvZiBDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoIGFzIGEgc3BlY3VsYXRpdmUgZml4IGZvciByZGFyOi8vcHJvYmxlbS8zMDUzMzAw
NS4KLSAgICAvLyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGlzIG9ubHkgdXNlZCBhcyBhIHJl
c3VsdCBvZiBhbmltYXRpb24gYW5kIHRoZXkgZG9uJ3QgbmVzdCBpbiBub3JtYWwgY2FzZXMuCi0g
ICAgaWYgKG1fZnJvbS5pc0NhbGN1bGF0ZWQoKSAmJiBtX2Zyb20uY2FsY3VsYXRpb25WYWx1ZSgp
LmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5n
dGgpCi0gICAgICAgIG1fZnJvbSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+
KG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpKS5mcm9tKCk7Ci0gICAgaWYg
KG1fdG8uaXNDYWxjdWxhdGVkKCkgJiYgbV90by5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lv
bigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKLSAgICAg
ICAgbV90byA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG1fdG8uY2FsY3Vs
YXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSkudG8oKTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Np
b25CbGVuZExlbmd0aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuICgxLjBmIC0gbV9wcm9ncmVzcykgKiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fZnJvbSwgbWF4
VmFsdWUpICsgbV9wcm9ncmVzcyAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV90bywgbWF4VmFsdWUp
OwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKTsKLX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbkJsZW5k
TGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJibGVuZCgi
IDw8IG1fZnJvbSA8PCAiLCAiIDw8IG1fdG8gPDwgIiwgIiA8PCBtX3Byb2dyZXNzIDw8ICIpIjsK
LX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ2FsY09wZXJhdG9y
IG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB0
cyA8PCAiKyI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDogdHMgPDwg
Ii0iOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHRzIDw8ICIqIjsg
YnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogdHMgPDwgIi8iOyBicmVhazsK
LSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB0cyA8PCAibWluIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDogdHMgPDwgIm1heCI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpDbGFtcDogdHMgPDwgImNsYW1wIjsgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiB0
czsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2Fs
Y3VsYXRpb25WYWx1ZSYgdmFsdWUpCi17Ci0gICAgdHMgPDwgImNhbGMoIjsKLSAgICB0cyA8PCB2
YWx1ZS5leHByZXNzaW9uKCk7Ci0gICAgdHMgPDwgIikiOwotICAgIHJldHVybiB0czsKLX0KLQot
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2FsY0V4cHJlc3Np
b25Ob2RlJiBleHByZXNzaW9uTm9kZSkKLXsKLSAgICBleHByZXNzaW9uTm9kZS5kdW1wKHRzKTsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmgJKHJldmlzaW9uIDI3ODIzOSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAkobm9uZXhpc3Rl
bnQpCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJMZW5ndGguaCIK
LSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgotI2luY2x1ZGUgPHd0Zi9S
ZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2UgV1RGIHsK
LWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gRklYTUU6
IEZpbmQgYSB3YXkgdG8gdW5pZnkgdGhpcyB3aXRoIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0
ZWdvcnk/Ci1lbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1aW50OF90IHsKLSAgICBO
dW1iZXIsCi0gICAgTGVuZ3RoLAotICAgIFBlcmNlbnQsCi0gICAgUGVyY2VudE51bWJlciwKLSAg
ICBQZXJjZW50TGVuZ3RoLAotICAgIEFuZ2xlLAotICAgIFRpbWUsCi0gICAgRnJlcXVlbmN5LAot
ICAgIE90aGVyCi19OwotCi0vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdmFsdWVzOyBwYXJzaW5nIHVz
ZXMgdGhlbS4KLWVudW0gY2xhc3MgQ2FsY09wZXJhdG9yIDogdWludDhfdCB7Ci0gICAgQWRkID0g
JysnLAotICAgIFN1YnRyYWN0ID0gJy0nLAotICAgIE11bHRpcGx5ID0gJyonLAotICAgIERpdmlk
ZSA9ICcvJywKLSAgICBNaW4gPSAwLAotICAgIE1heCwKLSAgICBDbGFtcCwKLX07Ci0KLWVudW0g
Y2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA6IHVpbnQ4X3QgewotICAgIFVuZGVmaW5lZCwK
LSAgICBOdW1iZXIsCi0gICAgTGVuZ3RoLAotICAgIE9wZXJhdGlvbiwKLSAgICBOZWdhdGlvbiwK
LSAgICBJbnZlcnNpb24sCi0gICAgQmxlbmRMZW5ndGgsCi19OwotCi1jbGFzcyBDYWxjRXhwcmVz
c2lvbk5vZGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4
cGxpY2l0IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlID0gQ2FsY0V4
cHJlc3Npb25Ob2RlVHlwZTo6VW5kZWZpbmVkKTsKLSAgICB2aXJ0dWFsIH5DYWxjRXhwcmVzc2lv
bk5vZGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIHZpcnR1YWwgZmxvYXQgZXZhbHVhdGUoZmxv
YXQgbWF4VmFsdWUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGR1bXAo
V1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi1wcml2YXRlOgotICAgIENhbGNFeHByZXNz
aW9uTm9kZVR5cGUgbV90eXBlOwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25OdW1iZXIgZmlu
YWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBD
YWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCk7Ci0KLSAgICBmbG9hdCB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCkg
Y29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdmFsdWU7Ci19OwotCi1jbGFzcyBDYWxjRXhw
cmVzc2lvbkxlbmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTGVuZ3RoKExlbmd0aCk7Ci0KLSAgICBjb25z
dCBMZW5ndGgmIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9Ci0KLXByaXZhdGU6
Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IG92ZXJyaWRlOwotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlk
ZTsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAg
ICBMZW5ndGggbV9sZW5ndGg7Ci19OwotCi1jbGFzcyBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uIGZp
bmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsY0V4cHJl
c3Npb25OZWdhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5vZGUp
Ci0gICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5l
Z2F0aW9uKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkKLSAgICB7Ci0gICAgICAg
IEFTU0VSVChtX2NoaWxkKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhW
YWx1ZSkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNz
aW9uTm9kZSYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBj
b25zdCBmaW5hbDsKLSAgICAKLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUqIGNoaWxkKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1ib29sIG9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYsIGNvbnN0IENhbGNFeHByZXNzaW9uTmVn
YXRpb24mKTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24gZmluYWwgOiBwdWJsaWMg
Q2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBDYWxjRXhwcmVzc2lvbkludmVyc2lv
bihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5vZGUpCi0gICAgICAgIDog
Q2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbikKLSAg
ICAgICAgLCBtX2NoaWxkKFdURk1vdmUobm9kZSkpCi0gICAgewotICAgICAgICBBU1NFUlQobV9j
aGlsZCk7Ci0gICAgfQotCi0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0
IGZpbmFsOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBj
b25zdCBmaW5hbDsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7
Ci0KLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4g
bV9jaGlsZC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhw
cmVzc2lvbk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYpOwotCi1j
bGFzcyBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lv
bk5vZGUgewotcHVibGljOgotICAgIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uKFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJlbiwgQ2FsY09wZXJhdG9y
LCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcik7Ci0KLSAgICBDYWxjT3BlcmF0b3IgZ2V0T3BlcmF0b3IoKSBjb25zdCB7
IHJldHVybiBtX29wZXJhdG9yOyB9Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlv
bkNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbkNhdGVnb3J5OyB9Ci0KLSAg
ICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLQotcHJpdmF0ZToKLSAgICBmbG9h
dCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZv
aWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKLSAgICBDYWxj
T3BlcmF0b3IgbV9vcGVyYXRvcjsKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1fZGVzdGluYXRp
b25DYXRlZ29yeSB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyIH07Ci19OwotCi1jbGFzcyBD
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9k
ZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aChMZW5ndGggZnJvbSwg
TGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcyk7Ci0KLSAgICBjb25zdCBMZW5ndGgmIGZyb20oKSBj
b25zdCB7IHJldHVybiBtX2Zyb207IH0KLSAgICBjb25zdCBMZW5ndGgmIHRvKCkgY29uc3QgeyBy
ZXR1cm4gbV90bzsgfQotICAgIGZsb2F0IHByb2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9n
cmVzczsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBj
b25zdCBvdmVycmlkZTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25O
b2RlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOwotCi0gICAgTGVuZ3RoIG1fZnJvbTsKLSAgICBMZW5ndGggbV90bzsKLSAg
ICBmbG9hdCBtX3Byb2dyZXNzOwotfTsKLQotY2xhc3MgQ2FsY3VsYXRpb25WYWx1ZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPENhbGN1bGF0aW9uVmFsdWU+IHsKLXB1YmxpYzoKLSAgICBXRUJDT1JFX0VY
UE9SVCBzdGF0aWMgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8
Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxv
YXQgbWF4VmFsdWUpIGNvbnN0OwotCi0gICAgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUo
KSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsgfQotICAgIGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX2V4cHJl
c3Npb247IH0KLQotcHJpdmF0ZToKLSAgICBDYWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0
cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKLSAgICBib29sIG1fc2hvdWxkQ2xh
bXBUb05vbk5lZ2F0aXZlOwotfTsKLQotaW5saW5lIENhbGNFeHByZXNzaW9uTm9kZTo6Q2FsY0V4
cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSkKLSAgICA6IG1fdHlwZSh0
eXBlKQotewotfQotCi1pbmxpbmUgQ2FsY3VsYXRpb25WYWx1ZTo6Q2FsY3VsYXRpb25WYWx1ZShz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9uLCBWYWx1ZVJhbmdl
IHJhbmdlKQotICAgIDogbV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCi0gICAgLCBt
X3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZShyYW5nZSA9PSBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2
ZSkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjdWxhdGlvblZhbHVl
JiBhLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJiBiKQotewotICAgIHJldHVybiBhLmV4cHJlc3Np
b24oKSA9PSBiLmV4cHJlc3Npb24oKTsKLX0KLQotaW5saW5lIENhbGNFeHByZXNzaW9uTnVtYmVy
OjpDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCB2YWx1ZSkKLSAgICA6IENhbGNFeHByZXNzaW9u
Tm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOdW1iZXIpCi0gICAgLCBtX3ZhbHVlKHZhbHVl
KQotewotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTnVt
YmVyJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYgYikKLXsKLSAgICByZXR1cm4gYS52
YWx1ZSgpID09IGIudmFsdWUoKTsKLX0KLQotaW5saW5lIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpD
YWxjRXhwcmVzc2lvbkxlbmd0aChMZW5ndGggbGVuZ3RoKQotICAgIDogQ2FsY0V4cHJlc3Npb25O
b2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxlbmd0aCkKLSAgICAsIG1fbGVuZ3RoKGxlbmd0
aCkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbkxl
bmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGIpCi17Ci0gICAgcmV0dXJuIGEu
bGVuZ3RoKCkgPT0gYi5sZW5ndGgoKTsKLX0KLQotaW5saW5lIENhbGNFeHByZXNzaW9uT3BlcmF0
aW9uOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciBvcCwgQ2FsY3VsYXRpb25D
YXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENh
bGNFeHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbikKLSAgICAsIG1fY2hpbGRyZW4oV1RGTW92
ZShjaGlsZHJlbikpCi0gICAgLCBtX29wZXJhdG9yKG9wKQotICAgICwgbV9kZXN0aW5hdGlvbkNh
dGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi17Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
Jik7Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCYgYikKLXsKLSAgICByZXR1
cm4gYS5wcm9ncmVzcygpID09IGIucHJvZ3Jlc3MoKSAmJiBhLmZyb20oKSA9PSBiLmZyb20oKSAm
JiBhLnRvKCkgPT0gYi50bygpOwotfQotCi1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RG
OjpUZXh0U3RyZWFtJiwgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYpOwotV1RGOjpUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYp
OwotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENhbGNPcGVy
YXRvcik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2RlZmluZSBTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUp
IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1l
KSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
Tm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05P
REUoQ2FsY0V4cHJlc3Npb25OdW1iZXIsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGVUeXBlOjpOdW1iZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9O
X05PREUoQ2FsY0V4cHJlc3Npb25MZW5ndGgsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVz
c2lvbk5vZGVUeXBlOjpMZW5ndGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNT
SU9OX05PREUoQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NB
TENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiwgdHlwZSgpID09IFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uKQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uKQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGgsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0
aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkocmV2aXNpb24gMjc4MjM5KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Miw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUu
b3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAoIG11ZWxsZXJAa2RlLm9y
ZyApCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kcmV3IFdlbGxpbmd0b24gKHByb3Rv
bkB3aXJldGFwcGVkLm5ldCkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsyNiw5IEBACiAjaW5jbHVk
ZSAiTGVuZ3RoLmgiCiAKICNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRpZXMuaCIKKyNpbmNsdWRl
ICJDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25M
ZW5ndGguaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIgogI2luY2x1ZGUg
IkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCIK
KworI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlv
bnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6Q2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcykKKyAgICA6IENhbGNF
eHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKKyAgICAs
IG1fZnJvbShmcm9tKQorICAgICwgbV90byh0bykKKyAgICAsIG1fcHJvZ3Jlc3MocHJvZ3Jlc3Mp
Cit7CisgICAgLy8gRmxhdHRlbiBuZXN0aW5nIG9mIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgg
YXMgYSBzcGVjdWxhdGl2ZSBmaXggZm9yIHJkYXI6Ly9wcm9ibGVtLzMwNTMzMDA1LgorICAgIC8v
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGggaXMgb25seSB1c2VkIGFzIGEgcmVzdWx0IG9mIGFu
aW1hdGlvbiBhbmQgdGhleSBkb24ndCBuZXN0IGluIG5vcm1hbCBjYXNlcy4KKyAgICBpZiAobV9m
cm9tLmlzQ2FsY3VsYXRlZCgpICYmIG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lv
bigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKKyAgICAg
ICAgbV9mcm9tID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4obV9mcm9tLmNh
bGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkpLmZyb20oKTsKKyAgICBpZiAobV90by5pc0Nh
bGN1bGF0ZWQoKSAmJiBtX3RvLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkudHlwZSgp
ID09IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQorICAgICAgICBtX3RvID0g
ZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4obV90by5jYWxjdWxhdGlvblZhbHVl
KCkuZXhwcmVzc2lvbigpKS50bygpOworfQorCitmbG9hdCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gKDEuMGYg
LSBtX3Byb2dyZXNzKSAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV9mcm9tLCBtYXhWYWx1ZSkgKyBt
X3Byb2dyZXNzICogZmxvYXRWYWx1ZUZvckxlbmd0aChtX3RvLCBtYXhWYWx1ZSk7Cit9CisKK2Jv
b2wgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVz
c2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVu
ZExlbmd0aD4ob3RoZXIpOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmR1
bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgImJsZW5kKCIgPDwgbV9mcm9t
IDw8ICIsICIgPDwgbV90byA8PCAiLCAiIDw8IG1fcHJvZ3Jlc3MgPDwgIikiOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGguaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxj
RXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGZpbmFsIDogcHVibGljIENh
bGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcyk7CisKKyAgICBjb25zdCBM
ZW5ndGgmIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KKyAgICBjb25zdCBMZW5ndGgm
IHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQorICAgIGZsb2F0IHByb2dyZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9ncmVzczsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZs
b2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdCBmaW5hbDsKKworICAgIExlbmd0aCBtX2Zyb207CisgICAgTGVuZ3RoIG1fdG87Cisg
ICAgZmxvYXQgbV9wcm9ncmVzczsKK307CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aCYgYikKK3sKKyAgICByZXR1cm4gYS5wcm9ncmVzcygpID09IGIucHJvZ3Jlc3MoKSAmJiBh
LmZyb20oKSA9PSBiLmZyb20oKSAmJiBhLnRvKCkgPT0gYi50bygpOworfQorCit9CisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbkJsZW5k
TGVuZ3RoLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRM
ZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
SW52ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxj
L0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJl
c3Npb25JbnZlcnNpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHJl
dHVybiAxLjBmIC8gbV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOworfQorCit2b2lkIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRz
IDw8ICIxLjAgLyAiIDw8ICIoIiA8PCAqbV9jaGlsZCA8PCAiKSI7Cit9CisKK2Jvb2wgQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG90
aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4ob3RoZXIp
OworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mIGEs
IGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBiKQoreworICAgIHJldHVybiAqYS5jaGls
ZCgpID09ICpiLmNoaWxkKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgPG1lbW9y
eT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbkludmVyc2lv
biBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
bm9kZSkKKyAgICAgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6SW52ZXJzaW9uKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2NoaWxkKTsKKyAgICB9CisKKyAgICBjb25zdCBDYWxjRXhwcmVzc2lv
bk5vZGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorCitwcml2YXRl
OgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7Cisg
ICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Cit9OworCitib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbkludmVy
c2lvbiYpOworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9E
RShDYWxjRXhwcmVzc2lvbkludmVyc2lvbiwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNz
aW9uTm9kZVR5cGU6OkludmVyc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25MZW5ndGguaCIKKworI2luY2x1ZGUgIkxl
bmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6ZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsb2F0VmFsdWVGb3JMZW5ndGgo
bV9sZW5ndGgsIG1heFZhbHVlKTsKK30KKworYm9vbCBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6b3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJl
dHVybiBpczxDYWxjRXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0
PENhbGNFeHByZXNzaW9uTGVuZ3RoPihvdGhlcik7Cit9CisKK3ZvaWQgQ2FsY0V4cHJlc3Npb25M
ZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgbV9sZW5ndGg7
Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVz
c2lvbkxlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25MZW5ndGguaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsY0V4
cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25MZW5ndGggZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJl
c3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbkxlbmd0aChM
ZW5ndGgpOworCisgICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2xl
bmd0aDsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBj
b25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2Rl
JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsK
KworICAgIExlbmd0aCBtX2xlbmd0aDsKK307CisKK2lubGluZSBDYWxjRXhwcmVzc2lvbkxlbmd0
aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoIGxlbmd0aCkKKyAgICA6IENhbGNFeHByZXNz
aW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGgpCisgICAgLCBtX2xlbmd0aChs
ZW5ndGgpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Np
b25MZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBiKQoreworICAgIHJldHVy
biBhLmxlbmd0aCgpID09IGIubGVuZ3RoKCk7Cit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTGVuZ3RoLCB0eXBlKCkgPT0g
V2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24u
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25OZWdhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6ZXZhbHVhdGUoZmxv
YXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIC1tX2NoaWxkLT5ldmFsdWF0ZShtYXhW
YWx1ZSk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6b3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxDYWxj
RXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJl
c3Npb25OZWdhdGlvbj4ob3RoZXIpOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uTmVnYXRpb246
OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgIi0oIiA8PCAqbV9jaGls
ZCA8PCAiKSI7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiBiKQoreworICAgIHJldHVybiAq
YS5jaGlsZCgpID09ICpiLmNoaWxkKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oCShub25leGlz
dGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgPG1l
bW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgQ2Fs
Y0V4cHJlc3Npb25OZWdhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYm
IG5vZGUpCisgICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5
cGU6Ok5lZ2F0aW9uKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX2NoaWxkKTsKKyAgICB9CisgICAgCisgICAgY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7Cisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFs
OworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOworfTsKKworYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENhbGNFeHByZXNzaW9uTmVnYXRpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uJik7CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9O
T0RFKENhbGNFeHByZXNzaW9uTmVnYXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVz
c2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9U
ZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHByZXNzaW9u
Tm9kZSkKK3sKKyAgICBleHByZXNzaW9uTm9kZS5kdW1wKHRzKTsKKyAgICByZXR1cm4gdHM7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25O
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGNFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
IDogdWludDhfdCB7CisgICAgVW5kZWZpbmVkLAorICAgIE51bWJlciwKKyAgICBMZW5ndGgsCisg
ICAgT3BlcmF0aW9uLAorICAgIE5lZ2F0aW9uLAorICAgIEludmVyc2lvbiwKKyAgICBCbGVuZExl
bmd0aCwKK307CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTm9kZSB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25Ob2RlKENh
bGNFeHByZXNzaW9uTm9kZVR5cGUgPSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpVbmRlZmluZWQp
OworICAgIHZpcnR1YWwgfkNhbGNFeHByZXNzaW9uTm9kZSgpID0gZGVmYXVsdDsKKworICAgIENh
bGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisg
ICAgdmlydHVhbCBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgPSAwOworCitw
cml2YXRlOgorICAgIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgbV90eXBlOworfTsKKworaW5saW5l
IENhbGNFeHByZXNzaW9uTm9kZTo6Q2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9k
ZVR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKTsKKworfQorCisj
ZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShUb1ZhbHVl
VHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJD
b3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2Vi
Q29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKSB7IHJldHVybiBub2RlLnByZWRpY2F0ZTsg
fSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVyLmNwcAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVt
YmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTnVtYmVyLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ZmxvYXQgQ2FsY0V4cHJlc3Npb25OdW1iZXI6OmV2YWx1YXRlKGZsb2F0KSBjb25zdAoreworICAg
IHJldHVybiBtX3ZhbHVlOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uTnVtYmVyOjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJl
clJlc3BlY3RpbmdJbnRlZ2VycyhtX3ZhbHVlKTsKK30KKworYm9vbCBDYWxjRXhwcmVzc2lvbk51
bWJlcjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAor
eworICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3RoZXIpICYmICp0aGlzID09
IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihvdGhlcik7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVy
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
ICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTnVtYmVyIGZpbmFsIDog
cHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ2FsY0V4
cHJlc3Npb25OdW1iZXIoZmxvYXQpOworCisgICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQpIGNvbnN0
IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBj
b25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisg
ICAgZmxvYXQgbV92YWx1ZTsKK307CisKK2lubGluZSBDYWxjRXhwcmVzc2lvbk51bWJlcjo6Q2Fs
Y0V4cHJlc3Npb25OdW1iZXIoZmxvYXQgdmFsdWUpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUo
Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sK
K30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYg
YSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OdW1iZXImIGIpCit7CisgICAgcmV0dXJuIGEudmFsdWUo
KSA9PSBiLnZhbHVlKCk7Cit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQ
UkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTnVtYmVyLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24u
aCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX29wZXJhdG9yKSB7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkFkZDogeworICAgICAgICBmbG9hdCBzdW0gPSAwOworICAgICAgICBmb3IgKGF1
dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgICAgIHN1bSArPSBjaGlsZC0+ZXZhbHVh
dGUobWF4VmFsdWUpOworICAgICAgICByZXR1cm4gc3VtOworICAgIH0KKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6U3VidHJhY3Q6IHsKKyAgICAgICAgLy8gRklYTUUKKyAgICAgICAgQVNTRVJUKG1f
Y2hpbGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICBmbG9hdCBsZWZ0ID0gbV9jaGlsZHJlblsw
XS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmbG9hdCByaWdodCA9IG1fY2hpbGRyZW5b
MV0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGxlZnQgLSByaWdodDsKKyAg
ICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAgIGZsb2F0IHBy
b2R1Y3QgPSAxOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAg
ICAgICAgIHByb2R1Y3QgKj0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIHByb2R1Y3Q7CisgICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKKyAg
ICAgICAgLy8gRklYTUUKKyAgICAgICAgQVNTRVJUKG1fY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwg
bV9jaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9
PSAxKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWll
dF9OYU4oKTsKKyAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1h
eFZhbHVlKTsKKyAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZSht
YXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7CisgICAgfQorICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpNaW46IHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4o
KTsKKyAgICAgICAgZmxvYXQgbWluaW11bSA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZh
bHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAg
ICBtaW5pbXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKSk7
CisgICAgICAgIHJldHVybiBtaW5pbXVtOworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6
TWF4OiB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJl
dHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGZs
b2F0IG1heGltdW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAg
IGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICAgICAgbWF4aW11bSA9IHN0
ZDo6bWF4KG1heGltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkpOworICAgICAgICByZXR1
cm4gbWF4aW11bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7CisgICAg
ICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSAhPSAzKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKworICAgICAgICBmbG9hdCBtaW4g
PSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZsb2F0IHZhbHVl
ID0gbV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmbG9hdCBtYXgg
PSBtX2NoaWxkcmVuWzJdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdGQ6
Om1heChtaW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKKyAgICB9CisgICAgfQorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
cXVpZXRfTmFOKCk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246Om9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
aXM8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpOworfQorCitib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0
aW9uJiBiKQoreworICAgIGlmIChhLmdldE9wZXJhdG9yKCkgIT0gYi5nZXRPcGVyYXRvcigpIHx8
IGEuZGVzdGluYXRpb25DYXRlZ29yeSgpICE9IGIuZGVzdGluYXRpb25DYXRlZ29yeSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuY2hpbGRyZW4oKS5zaXplKCkgIT0gYi5jaGls
ZHJlbigpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhLmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCEoKmEu
Y2hpbGRyZW4oKVtpXSA9PSAqYi5jaGlsZHJlbigpW2ldKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ2FsY0V4cHJlc3Npb25P
cGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgaWYgKG1fb3BlcmF0
b3IgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1h
eCkgeworICAgICAgICB0cyA8PCBtX29wZXJhdG9yIDw8ICIoIjsKKyAgICAgICAgc2l6ZV90IGNo
aWxkcmVuQ291bnQgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbkNvdW50OyBpKyspIHsKKyAgICAgICAgICAgIHRzIDw8IG1fY2hpbGRy
ZW5baV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoaSA8IGNoaWxkcmVuQ291bnQgLSAxKQorICAg
ICAgICAgICAgICAgIHRzIDw8ICIsICI7CisgICAgICAgIH0KKyAgICAgICAgdHMgPDwgIikiOwor
ICAgIH0gZWxzZQorICAgICAgICB0cyA8PCBtX2NoaWxkcmVuWzBdLmdldCgpIDw8ICIgIiA8PCBt
X29wZXJhdG9yIDw8ICIgIiA8PCBtX2NoaWxkcmVuWzFdLmdldCgpOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5v
ZGUuaCIKKyNpbmNsdWRlICJDYWxjT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNh
dGVnb3J5LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiBmaW5h
bCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4m
JiBjaGlsZHJlbiwgQ2FsY09wZXJhdG9yLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9u
Q2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7CisKKyAgICBDYWxjT3BlcmF0
b3IgZ2V0T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yOyB9CisgICAgQ2FsY3Vs
YXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0
aW5hdGlvbkNhdGVnb3J5OyB9CisKKyAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qg
ZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IG1fY2hpbGRyZW47
CisgICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBt
X2Rlc3RpbmF0aW9uQ2F0ZWdvcnkgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9OworfTsK
KworCitpbmxpbmUgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246OkNhbGNFeHByZXNzaW9uT3BlcmF0
aW9uKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJl
biwgQ2FsY09wZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdv
cnkpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3Bl
cmF0aW9uKQorICAgICwgbV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKKyAgICAsIG1fb3Bl
cmF0b3Iob3ApCisgICAgLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkoZGVzdGluYXRpb25DYXRlZ29y
eSkKK3sKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
JiwgY29uc3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mKTsKKworfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24sIHR5
cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNPcGVyYXRvci5oIgorCisjaW5jbHVkZSA8d3RmL3Rl
eHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2gg
KG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogdHMgPDwgIisiOyBicmVhazsKKyAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHRzIDw8ICItIjsgYnJlYWs7CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB0cyA8PCAiKiI7IGJyZWFrOworICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpEaXZpZGU6IHRzIDw8ICIvIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok1pbjogdHMgPDwgIm1pbiI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6
IHRzIDw8ICJtYXgiOyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHRzIDw8
ICJjbGFtcCI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuaAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lu
Y2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRG9uJ3Qg
Y2hhbmdlIHRoZXNlIHZhbHVlczsgcGFyc2luZyB1c2VzIHRoZW0uCitlbnVtIGNsYXNzIENhbGNP
cGVyYXRvciA6IHVpbnQ4X3QgeworICAgIEFkZCA9ICcrJywKKyAgICBTdWJ0cmFjdCA9ICctJywK
KyAgICBNdWx0aXBseSA9ICcqJywKKyAgICBEaXZpZGUgPSAnLycsCisgICAgTWluID0gMCwKKyAg
ICBNYXgsCisgICAgQ2xhbXAsCit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBDYWxjT3BlcmF0b3IpOworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKworI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQor
eworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlcjogdHMgPDwgIm51bWJlciI7IGJyZWFrOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TGVuZ3RoOiB0cyA8PCAibGVuZ3RoIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50OiB0cyA8PCAicGVyY2VudCI7IGJyZWFrOworICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjogdHMgPDwgInBlcmNlbnQtbnVtYmVyIjsg
YnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOiB0cyA8
PCAicGVyY2VudC1sZW5ndGgiOyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OkFuZ2xlOiB0cyA8PCAiYW5nbGUiOyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlRpbWU6IHRzIDw8ICJ0aW1lIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpGcmVxdWVuY3k6IHRzIDw8ICJmcmVxdWVuY3kiOyBicmVhazsKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOiB0cyA8PCAib3RoZXIiOyBicmVhazsKKyAgICB9CisKKyAg
ICByZXR1cm4gdHM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY3VsYXRpb25DYXRlZ29yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRklYTUU6IEZpbmQg
YSB3YXkgdG8gdW5pZnkgdGhpcyB3aXRoIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0Q2F0ZWdvcnk/
CitlbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1aW50OF90IHsKKyAgICBOdW1iZXIs
CisgICAgTGVuZ3RoLAorICAgIFBlcmNlbnQsCisgICAgUGVyY2VudE51bWJlciwKKyAgICBQZXJj
ZW50TGVuZ3RoLAorICAgIEFuZ2xlLAorICAgIFRpbWUsCisgICAgRnJlcXVlbmN5LAorICAgIE90
aGVyCit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBDYWxjdWxhdGlv
bkNhdGVnb3J5KTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxj
dWxhdGlvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGN1bGF0aW9uVmFsdWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoK
KyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgor
ICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBH
b29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5o
IgorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSA8bGltaXRzPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHZhbHVlLCBWYWx1ZVJhbmdlIHJhbmdlKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbGN1bGF0aW9uVmFsdWUoV1RGTW92ZSh2YWx1ZSks
IHJhbmdlKSk7Cit9CisKK0NhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0aW9uVmFsdWUoc3RkOjp1
bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lvbiwgVmFsdWVSYW5nZSByYW5n
ZSkKKyAgICA6IG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQorICAgICwgbV9zaG91
bGRDbGFtcFRvTm9uTmVnYXRpdmUocmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpCit7
Cit9CisKK0NhbGN1bGF0aW9uVmFsdWU6On5DYWxjdWxhdGlvblZhbHVlKCkgPSBkZWZhdWx0Owor
CitmbG9hdCBDYWxjdWxhdGlvblZhbHVlOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QK
K3sKKyAgICBmbG9hdCByZXN1bHQgPSBtX2V4cHJlc3Npb24tPmV2YWx1YXRlKG1heFZhbHVlKTsK
KyAgICAvLyBGSVhNRTogVGhpcyB0ZXN0IHdhcyBvcmlnaW5hbGx5IG5lZWRlZCB3aGVuIHdlIGRp
ZCBub3QgZGV0ZWN0IGRpdmlzaW9uIGJ5IHplcm8gYXQgcGFyc2UgdGltZS4KKyAgICAvLyBJdCdz
IHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBub3cgdW5uZWVkZWQgY29kZSBhbmQgY2FuIGJlIHJlbW92
ZWQuCisgICAgaWYgKHN0ZDo6aXNuYW4ocmVzdWx0KSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYmIHJlc3VsdCA8IDAgPyAwIDogcmVz
dWx0OworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYSwgY29u
c3QgQ2FsY3VsYXRpb25WYWx1ZSYgYikKK3sKKyAgICByZXR1cm4gYS5leHByZXNzaW9uKCkgPT0g
Yi5leHByZXNzaW9uKCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiB0cyA8PCAi
Y2FsYygiIDw8IHZhbHVlLmV4cHJlc3Npb24oKSA8PCAiKSI7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25W
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25WYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY3VsYXRpb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlOworCitjbGFzcyBD
YWxjdWxhdGlvblZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FsY3VsYXRpb25WYWx1ZT4gewor
cHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4g
Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsK
KyAgICB+Q2FsY3VsYXRpb25WYWx1ZSgpOworCisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoKSBjb25z
dCB7IHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsgfQorICAgIGNvbnN0IENhbGNF
eHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbigpIGNvbnN0IHsgcmV0dXJuICptX2V4cHJlc3Npb247
IH0KKworcHJpdmF0ZToKKyAgICBDYWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKKyAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlOworfTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGN1bGF0aW9uVmFsdWUm
LCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJik7CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWls
ZGVyQ29udmVydGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNwcmFnbWEg
b25jZQogCiAjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250RmVhdHVyZVZh
bHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFN0eWxlVmFsdWUuaCIKQEAgLTQyLDYgKzQyLDggQEAK
ICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKKyNpbmNsdWRlICJD
YWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uT3BlcmF0aW9u
LmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdGlvblZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCiAjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430103</attachid>
            <date>2021-05-29 12:26:54 -0700</date>
            <delta_ts>2021-05-29 13:40:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226421-20210529122652.patch</filename>
            <type>text/plain</type>
            <size>328902</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAyMS0wNS0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQg
ZmlsZXMgaW50byBwcm9wZXIgMS1jbGFzcyBwZXIgZmlsZSBzdHJ1Y3R1cmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0J3MgYm90aGVyZWQgbWUgZm9y
IGEgd2hpbGUgdGhhdCB0aGUgY2FsYyByZWxhdGVkIGNsYXNzZXMgKGJvdGggaW4gY3NzLworICAg
ICAgICBhbmQgaW4gcGxhdGZvcm0vKSB3ZXJlIGJ1bmRsZWQgYWxsIGluIHR3byBiaWcgZmlsZXMu
IFRoaXMgY2hhbmdlIHNwbGl0cworICAgICAgICB0aGVtIGFsbCBvdXQgaW50byB0aGVpciBvd24g
aGVhZGVyIGFuZCBpbXBsZW1lbnRhdGlvbiBmaWxlcyB0aGF0IG1hdGNoCisgICAgICAgIHRoZWly
IG5hbWUsIGFuZCBwdXRzIHRoZW0gaW4gbmV3IGNhbGMvIHN1YmRpcmVjdG9yaWVzIChjc3MvY2Fs
Yy8uLi4gYW5kCisgICAgICAgIHBsYXRmb3JtL2NhbGMvLi4uKS4gVGhpcyBzaG91bGQgaG9wZWZ1
bGx5IG1ha2UgdGhlIG1vZGlmaWNhdGlvbnMgSSBuZWVkCisgICAgICAgIHRvIG1ha2UgdG8gY2Fs
YygpIHRvIHN1cHBvcnQgcmVsYXRpdmUgY29sb3Igc3ludGF4IGEgbGl0dGxlIGVhc2llci4KKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmNwcDoKKyAg
ICAgICAgKiBjc3MvY2FsYzogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0NhdGVn
b3J5TWFwcGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FsY1VuaXRDYXRlZ29y
eSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVn
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0RvdWJsZVZhbHVlKToKKyAgICAgICAgKiBjc3Mv
Y2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9jYWxj
L0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV0dHlQcmludE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6cHJldHR5UHJpbnROb2Rlcyk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjplcXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjpjYXRlZ29yeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZSk6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6Om9wZXJhdG9yVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tEZXB0aEFuZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9k
dWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VDYWxjU3VtKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcik6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0ludmVydE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNJbnZl
cnROb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0ludmVydE5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjSW52ZXJ0Tm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY0ludmVydE5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05l
Z2F0ZU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNOZWdhdGVOb2Rl
OjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
TmVnYXRlTm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0
ZU5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZUNhdGVnb3J5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhdGVnb3J5Rm9ySW52ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjppc1NhbWVQYWly
KToKKyAgICAgICAgKFdlYkNvcmU6OnNvcnRpbmdDYXRlZ29yeUZvclR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6c29ydGluZ0NhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OnByaW1pdGl2ZVR5
cGVGb3JDb21iaW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJzaW9uVG9BZGRWYWx1
ZXNXaXRoVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZnVuY3Rpb25Gcm9tT3BlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3Bl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNhbkNvbWJp
bmVBbGxDaGlsZHJlbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y29tYmluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRp
b25Ob2RlOjpzaW1wbGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6c2ltcGxpZnlSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlv
bk5vZGU6OnNpbXBsaWZ5Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6cHJpbWl0aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVy
YXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHRSZWN1cnNpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmVxdWFscyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcik6
CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaDogQWRkZWQuCisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmN1c3RvbUNTU1RleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6cHJpbWl0
aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTnVtZXJpY1ZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmludmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjphZGQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29udmVydFRvVW5pdFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y2Fub25pY2FsaXplVW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVD
YWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjpkb3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzWmVy
byBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpl
cXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsZW5kSGFsZik6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDU1MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpDU1NDYWxjVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjYXRlZ29yeSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OnByaW1pdGl2ZVR5cGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIGNz
cy9jYWxjL0NTU0NhbGNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25W
YWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vY2FsYzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZHVtcCBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbkxlbmd0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHBy
ZXNzaW9uTGVuZ3RoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNF
eHByZXNzaW9uTGVuZ3RoOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uTGVuZ3RoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6
ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlv
bjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGU6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2Rl
OjpDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25OdW1iZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk51bWJlcjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk51
bWJlcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpDYWxjRXhwcmVzc2lvbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZh
bHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpDYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2Nh
bGMvQ2FsY09wZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYWxjdWxhdGlvblZhbHVlOjpzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXhwcmVzc2lvbiBjb25zdCk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisKIDIwMjEtMDUtMjkgIEFsYW4g
QnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gRG8gbm90IGlu
Y2x1ZGUgdmVydGljYWwgc3BhY2luZyB3aGVuIHJlc29sdmluZyBwZXJjZW50IGhlaWdodCBmb3Ig
dGFibGUgY29udGVudApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyAr
MzQxLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgY3J5
cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgKIAotICAgIGNzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmgKICAgICBjc3MvQ1NTQ29uZGl0aW9uUnVsZS5oCiAgICAgY3NzL0NTU0N1c3RvbVByb3Bl
cnR5VmFsdWUuaAogICAgIGNzcy9DU1NGb250RmFjZVJ1bGUuaApAQCAtMzg5LDYgKzM4OCw4IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBjc3MvU3R5bGVTaGVl
dENvbnRlbnRzLmgKICAgICBjc3MvU3R5bGVTaGVldExpc3QuaAogCisgICAgY3NzL2NhbGMvQ1NT
Q2FsY1ZhbHVlLmgKKwogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKICAgICBjc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaAogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCkBAIC0x
MDAzLDcgKzEwMDQsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9BYm9ydGFibGVUYXNrUXVldWUuaAogICAgIHBsYXRmb3JtL0NQVU1vbml0
b3IuaAotICAgIHBsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAogICAgIHBsYXRmb3JtL0NvbG9y
Q2hvb3Nlci5oCiAgICAgcGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xpZW50LmgKICAgICBwbGF0Zm9y
bS9Db250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIuaApAQCAtMTE1Niw2ICsxMTU2LDkgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAogCisgICAgcGxhdGZvcm0vY2Fs
Yy9DYWxjRXhwcmVzc2lvbk5vZGUKKyAgICBwbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUu
aAorCiAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNRW5jcnlwdGlvblNjaGVtZS5oCiAg
ICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNRmFjdG9yeS5oCiAgICAgcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3
ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03
MTgsNyArNzE4LDYgQEAgY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuY3BwCiBjc3MvQ1NTQmFzaWNT
aGFwZXMuY3BwCiBjc3MvQ1NTQm9yZGVySW1hZ2UuY3BwCiBjc3MvQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlLmNwcAotY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCiBjc3MvQ1NTQ2FudmFzVmFs
dWUuY3BwCiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAogY3NzL0NTU0NvbmRp
dGlvblJ1bGUuY3BwCkBAIC04MjUsNiArODI0LDE0IEBAIGNzcy9TdHlsZVNoZWV0LmNwcAogY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5jcHAKIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHAKIGNzcy9UcmFu
c2Zvcm1GdW5jdGlvbnMuY3BwCitjc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAor
Y3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlUGFyc2VyLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuY3BwCitjc3Mv
Y2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2Rl
LmNwcAorY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAKK2Nzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHAKIGNzcy9wYXJzZXIvQ1NTQXRSdWxlSUQuY3BwCiBjc3MvcGFyc2VyL0NT
U0RlZmVycmVkUGFyc2VyLmNwcAogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBAIC0xODE0LDcg
KzE4MjEsNiBAQCBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvCiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwCiBwYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCi1wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNwcAog
cGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKIHBsYXRm
b3JtL0NvbnRleHRNZW51SXRlbS5jcHAKQEAgLTE5MjgsNiArMTkzNCwxNiBAQCBwbGF0Zm9ybS9h
dWRpby9TdGVyZW9QYW5uZXIuY3BwCiBwbGF0Zm9ybS9hdWRpby9VcFNhbXBsZXIuY3BwCiBwbGF0
Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmNwcAogcGxhdGZvcm0vYXVkaW8vWmVyb1BvbGUuY3BwCitw
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwCitwbGF0Zm9ybS9jYWxj
L0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkxlbmd0aC5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAKK3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24u
Y3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAKIHBs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUZhY3RvcnkuY3BwCiBwbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1Mb2dnaW5nLmNwcAogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZS5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM1NCw3ICsxMzU0LDcg
QEAKIAkJNDk5QjNFQzUxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5QjNFQzMxMjhDQ0M0
NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFw
aGljc0xheWVyQ0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5OUIzRUQ1MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OTlCM0VERDEyOERC
NTAyMDBFNzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5QjNFREMxMjhEQjUwMTAwRTcyNkMyIC8qIFBs
YXRmb3JtQ0FBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlB
RTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0OUFFMkQ4RjEzNEVFNTBD
MDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ4RDEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlB
RTJEOTcxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QUUyRDk1MTM0RUU1RjkwMDcyOTIw
QSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5QzdCOTk0
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTEJ1ZmZlci5oICovOyB9OwpAQCAtNDE5MCw2ICs0MTkwLDIyIEBACiAJCUJDRUY0NUY2MEU2
ODdCNUMwMDFDMTI4NyAvKiBKU1RleHRNZXRyaWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VGNDVGNDBFNjg3QjVDMDAxQzEyODcgLyogSlNUZXh0
TWV0cmljcy5oICovOyB9OwogCQlCQ0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFy
VGhlbWVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0VGODY5RTBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gKi87IH07
CiAJCUJDRUZFMUVCMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUZFMUU5MERDQTVGNjQw
MDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCAqLzsgfTsKKwkJQkNGMTY0NTEyNjYyOUZDNzAw
MDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NEYyNjYyOUZDNzAwMDJGN0VGIC8qIENTU0Nh
bGNFeHByZXNzaW9uTm9kZS5oICovOyB9OworCQlCQ0YxNjQ1NTI2NjJBMTIyMDAwMkY3RUYgLyog
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NTMyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NTkyNjYyQTFFOTAwMDJGN0VGIC8qIENT
U0NhbGNOZWdhdGVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0YxNjQ1NzI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAq
LzsgfTsKKwkJQkNGMTY0NUQyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ1QjI2
NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NjEy
NjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ1RjI2NjJBMjhEMDAwMkY3RUYg
LyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NjUyNjYyQTMxQTAwMDJG
N0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NjMyNjYyQTMxQTAwMDJGN0VGIC8qIENT
U0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oICovOyB9OworCQlCQ0YxNjQ2QTI2NjJBOTM0MDAw
MkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NjgyNjYyQTkzNDAwMDJGN0VGIC8qIENTU0Nh
bGNDYXRlZ29yeU1hcHBpbmcuaCAqLzsgfTsKKwkJQkNGMTY0NkUyNjYyQUE1MDAwMDJGN0VGIC8q
IENhbGN1bGF0aW9uQ2F0ZWdvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRjE2NDZEMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVn
b3J5LmggKi87IH07CisJCUJDRjE2NDcyMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RjE2NDcwMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0YxNjQ3NjI2NjJBQjM2
MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDc0MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbk51bWJlci5oICovOyB9OworCQlCQ0YxNjQ3QTI2NjJBQjg1MDAwMkY3RUYgLyog
Q2FsY0V4cHJlc3Npb25MZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRjE2NDc4MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxl
bmd0aC5oICovOyB9OworCQlCQ0YxNjQ3RTI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25OZWdhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGMTY0N0MyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAq
LzsgfTsKKwkJQkNGMTY0ODIyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJz
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Yx
NjQ4MDI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCAqLzsgfTsK
KwkJQkNGMTY0ODYyNjYyQUNBMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ4NDI2
NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCAqLzsgfTsKKwkJQkNG
MTY0OEEyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDg4MjY2MkFE
NTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmggKi87IH07CisJCUJDRjE2
NDhFMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDhDMjY2MkFERDgwMDAyRjdFRiAvKiBD
YWxjT3BlcmF0b3IuaCAqLzsgfTsKIAkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVz
dFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRjQ4Q0U2MTM3MEQxMTQwMDRFODdENiAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNGQTkz
MDgxMDMzMzE5MzAwN0IyNUQxIC8qIFJlbmRlck92ZXJmbG93LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZBOTMwNzEwMzMzMTkzMDA3QjI1RDEgLyog
UmVuZGVyT3ZlcmZsb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0ZCMkU1RTA5NzlFNDY0MDBCQTcwM0QgLyogQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkIy
RTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NDQzLDggKzg0NTksOCBA
QAogCQk0OTlCM0VENDEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzTGF5ZXJDQS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OUIzRUQ1MTI4Q0QzMTQwMEU3MjZDMiAvKiBH
cmFwaGljc0xheWVyQ0EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhp
Y3NMYXllckNBLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OUIzRURDMTI4REI1
MDEwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtQ0FBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QUUyRDhEMTM0RUU1MEMw
MDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU0NhbGN1bGF0aW9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0OUFFMkQ4RDEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2Fs
Y1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEg
LyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWxjdWxhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY3VsYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJl
c2hNb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1MjEsNiArMTQ1
MzcsMzggQEAKIAkJQkNFRkUxREMwRENBNUNGRDAwNzM5MjE5IC8qIFhTTFRQcm9jZXNzb3IuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhTTFRQcm9jZXNzb3IuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0VGRTFFODBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vz
c29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWFNMVFByb2Nl
c3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUZFMUU5MERDQTVGNjQw
MDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNYU0xUUHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDRGMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRjE2NDUwMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTMyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1NDI2NjJBMTIy
MDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkNGMTY0NTcyNjYyQTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0NhbGNOZWdhdGVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRjE2NDU4MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjTmVnYXRlTm9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDVCMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxjSW52
ZXJ0Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjSW52ZXJ0Tm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1QzI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0lu
dmVydE5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY0ludmVydE5vZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1RjI2NjJBMjhEMDAwMkY3RUYgLyog
Q1NTQ2FsY09wZXJhdGlvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY09wZXJhdGlvbk5v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjAyNjYyQTI4RDAwMDJG
N0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Nh
bGNPcGVyYXRpb25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0
NjMyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjQyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2ODI2NjJB
OTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
U1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDY5MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0YxNjQ2RDI2NjJBQTUwMDAwMkY3RUYgLyogQ2FsY3VsYXRpb25D
YXRlZ29yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjdWxhdGlvbkNhdGVnb3J5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDZGMjY2MkFBNkYwMDAyRjdFRiAvKiBDYWxjdWxh
dGlvbkNhdGVnb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGN1bGF0aW9uQ2F0ZWdvcnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3MDI2NjJBQUMzMDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9u
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3MTI2NjJBQUMzMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNF
eHByZXNzaW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDc0
MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxjRXhwcmVzc2lvbk51bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0YxNjQ3NTI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ3ODI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25M
ZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25MZW5ndGguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzkyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uTGVuZ3Ro
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0N0MyNjYyQUJFNzAwMDJG
N0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJl
c3Npb25OZWdhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3RDI2
NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkNGMTY0ODAyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDgxMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhw
cmVzc2lvbkludmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjRXhwcmVzc2lvbklu
dmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDg0MjY2MkFD
QTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0YxNjQ4NTI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4ODI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDg5MjY2MkFENTIwMDAy
RjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQ0YxNjQ4QzI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENhbGNPcGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0Yx
NjQ4RDI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGNPcGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRjM0
QTM2MTFBMjMxQ0QwMEM3MTgwNCAvKiBOYW1lZE5vZGVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTmFtZWROb2RlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNGNDhDRTYxMzcwRDExNDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdTaXplT3JO
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRqdXN0Vmlld1NpemVPck5v
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZBOTMwNzEwMzMzMTkzMDA3QjI1
RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyT3ZlcmZsb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3ODkxLDEx
ICsyNzkzOSw2MiBAQAogCQkJbmFtZSA9IENvbnN0cnVjdG9yczsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCUJDRjE2NDREMjY2MjlGOUEwMDAyRjdFRiAvKiBjYWxjICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ2OTI2NjJB
OTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHAgKi8sCisJCQkJQkNGMTY0
NjgyNjYyQTkzNDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCAqLywKKwkJCQlC
Q0YxNjQ1MDI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAqLywK
KwkJCQlCQ0YxNjQ0RjI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgg
Ki8sCisJCQkJQkNGMTY0NjQyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlci5jcHAgKi8sCisJCQkJQkNGMTY0NjMyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlci5oICovLAorCQkJCUJDRjE2NDVDMjY2MkEyMzcwMDAyRjdFRiAv
KiBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NUIyNjYyQTIzNzAwMDJGN0VG
IC8qIENTU0NhbGNJbnZlcnROb2RlLmggKi8sCisJCQkJQkNGMTY0NTgyNjYyQTFFOTAwMDJGN0VG
IC8qIENTU0NhbGNOZWdhdGVOb2RlLmNwcCAqLywKKwkJCQlCQ0YxNjQ1NzI2NjJBMUU5MDAwMkY3
RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAqLywKKwkJCQlCQ0YxNjQ2MDI2NjJBMjhEMDAwMkY3
RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwICovLAorCQkJCUJDRjE2NDVGMjY2MkEyOEQw
MDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oICovLAorCQkJCUJDRjE2NDU0MjY2MkEx
MjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcCAqLywKKwkJCQlCQ0Yx
NjQ1MzI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oICovLAor
CQkJCTQ5QUUyRDhDMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuY3BwICovLAorCQkJ
CTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuaCAqLywKKwkJCSk7CisJ
CQlwYXRoID0gY2FsYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUJDRjE2
NDZDMjY2MkFBMEEwMDAyRjdFRiAvKiBjYWxjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ4OTI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aC5jcHAgKi8sCisJCQkJQkNGMTY0ODgyNjYyQUQ1MjAwMDJGN0VGIC8q
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCAqLywKKwkJCQlCQ0YxNjQ4MTI2NjJBQzUxMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uY3BwICovLAorCQkJCUJDRjE2NDgwMjY2
MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oICovLAorCQkJCUJDRjE2
NDc5MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5jcHAgKi8sCisJCQkJ
QkNGMTY0NzgyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmggKi8sCisJ
CQkJQkNGMTY0N0QyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uY3Bw
ICovLAorCQkJCUJDRjE2NDdDMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uLmggKi8sCisJCQkJQkNGMTY0NzEyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
Tm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NzAyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNz
aW9uTm9kZS5oICovLAorCQkJCUJDRjE2NDc1MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVz
c2lvbk51bWJlci5jcHAgKi8sCisJCQkJQkNGMTY0NzQyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNF
eHByZXNzaW9uTnVtYmVyLmggKi8sCisJCQkJQkNGMTY0ODUyNjYyQUNBMzAwMDJGN0VGIC8qIENh
bGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcCAqLywKKwkJCQlCQ0YxNjQ4NDI2NjJBQ0EzMDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCAqLywKKwkJCQlCQ0YxNjQ4RDI2NjJBREQ4
MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmNwcCAqLywKKwkJCQlCQ0YxNjQ4QzI2NjJBREQ4MDAw
MkY3RUYgLyogQ2FsY09wZXJhdG9yLmggKi8sCisJCQkJQkNGMTY0NkYyNjYyQUE2RjAwMDJGN0VG
IC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwICovLAorCQkJCUJDRjE2NDZEMjY2MkFBNTAwMDAy
RjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggKi8sCisJCQkJNDlBRTJEOTQxMzRFRTVGOTAw
NzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAorCQkJCTQ5QUUyRDk1MTM0RUU1Rjkw
MDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNhbGM7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCQ0YxQTVCQTA5NzgzMjA5MDA2
MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTQ5RTkxMkE0MEVGQUM4RTYwMDlEMENBRiAvKiBhbmltYXRpb24gKi8sCiAJCQkJ
RkQzMTYwNDAxMkIwMjZBMzAwQzFBMzU5IC8qIGF1ZGlvICovLAorCQkJCUJDRjE2NDZDMjY2MkFB
MEEwMDAyRjdFRiAvKiBjYWxjICovLAogCQkJCTFBRTQyRjY3MEFBNEI4Q0IwMEM4NjEyRCAvKiBj
ZiAqLywKIAkJCQlBNUM5NzRDRTExNDg1RkRBMDA2NkYyQUIgLyogY29jb2EgKi8sCiAJCQkJQ0Q5
NEE1Q0IxRjcxQ0I0NjAwRjUyNUM1IC8qIGVuY3J5cHRlZG1lZGlhICovLApAQCAtMjc5MTIsOCAr
MjgwMTEsNiBAQAogCQkJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAogCQkJ
CUUxRUU4QjZCMjQxMkIyQTcwMEU3OTRENiAvKiB4ciAqLywKIAkJCQlERkRCOTEyQ0Y4RTg4QTZE
QTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmggKi8sCi0JCQkJNDlBRTJEOTQxMzRFRTVG
OTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAotCQkJCTQ5QUUyRDk1MTM0RUU1
RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCiAJCQkJQzMzMEEyMjExM0VDMTk2
QjAwMDBCNDVCIC8qIENvbG9yQ2hvb3Nlci5oICovLAogCQkJCUMzN0NERUJDMTQ5RUYyMDMwMDQy
MDkwRCAvKiBDb2xvckNob29zZXJDbGllbnQuaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5ODZDRDI0MDAx
NDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLApAQCAtMjk3MDcsNiArMjk4MDQsNyBAQAogCQlG
NTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3NzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ0RDI2NjI5RjlBMDAwMkY3RUYgLyogY2FsYyAq
LywKIAkJCQk5NDZEMzcyNzFENkNCMjI1MDA3NzA4NEYgLyogcGFyc2VyICovLAogCQkJCTRCQUZE
MERBMjE5MjFFQUQwMEMwQUI2NCAvKiB0eXBlZG9tICovLAogCQkJCUZCRDZBRjg0MTVFRjIxRDQw
MDhCNzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCAqLywKQEAgLTI5NzIwLDggKzI5ODE4
LDYgQEAKIAkJCQlFMTZBODRGODE0Qzg1Q0NDMDAyOTc3REYgLyogQ1NTQm9yZGVySW1hZ2UuaCAq
LywKIAkJCQlCQzI3NEIzMDE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlLmNwcCAqLywKIAkJCQlCQzI3NEIyRTE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlLmggKi8sCi0JCQkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0Nh
bGN1bGF0aW9uVmFsdWUuY3BwICovLAotCQkJCTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBD
U1NDYWxjdWxhdGlvblZhbHVlLmggKi8sCiAJCQkJQkM2MDRBNDIwREI1NjM0RTAwMjA0NzM5IC8q
IENTU0NhbnZhc1ZhbHVlLmNwcCAqLywKIAkJCQlCQzYwNDlDQjBEQjU2MEMyMDAyMDQ3MzkgLyog
Q1NTQ2FudmFzVmFsdWUuaCAqLywKIAkJCQlCQ0VBNDc3QzA5N0NBQUM4MDA5NEM5RTQgLyogQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCAqLywKQEAgLTMxODExLDYgKzMxOTA3LDE1IEBA
CiAJCQkJNDFEMTI5RDMxRjNEMEYxNjAwRDE1RTQ3IC8qIENhY2hlU3RvcmFnZUNvbm5lY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDEyOUQ1MUYzRDBGNjkwMEQxNUU0NyAvKiBDYWNoZVN0
b3JhZ2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3
MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0OEEyNjYy
QUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCBpbiBIZWFkZXJzICov
LAorCQkJCUJDRjE2NDgyMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0N0EyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNF
eHByZXNzaW9uTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3RTI2NjJBQkU3MDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNG
MTY0NzIyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkNGMTY0NzYyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ4NjI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDhFMjY2MkFERDgw
MDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDZFMjY2
MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUFFMkQ5NzEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0MxRThEMDExRUQwQzJEQTAwQjFEOTgzIC8qIENhbGxiYWNrUmVzdWx0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFRkNDNkM4RjIwRkU5MTQ0MDBBMjMyMUIgLyogQ2FudmFzQWN0
aXZpdHlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApAQCAtMzIwODEsNyArMzIxODYsMTQgQEAKIAkJ
CQlGQkQ2QUY4ODE1RUYyNUM5MDA4QjcxMTAgLyogQ1NTQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxNkE4NEZBMTRDODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMyNzRCMkYxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5
MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDZB
MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQ0YxNjQ1MTI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ2NTI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ1RDI2NjJB
MjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
RjE2NDU5MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkNGMTY0NjEyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ1NTI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlBRTJEOEYxMzRFRTUw
QzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MDQ5Q0Mw
REI1NjBDMjAwMjA0NzM5IC8qIENTU0NhbnZhc1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VBNDc5MDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzBBQUM5QTI1MEVCODQ5MDAxM0RBOUYgLyogQ1NTQ29uZGl0
aW9uUnVsZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nh
bGN1bGF0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTkwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9u
VmFsdWUuaCIKLQotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkNTU1BhcnNlclRv
a2VuUmFuZ2UuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLXN0YXRpYyBjb25zdCBpbnQgbWF4RXhw
cmVzc2lvbkRlcHRoID0gMTAwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOwotY2xhc3MgQ1NTQ2FsY09wZXJhdGlvbk5vZGU7Ci1jbGFzcyBD
U1NDYWxjTmVnYXRlTm9kZTsKLWNsYXNzIENTU0NhbGNJbnZlcnROb2RlOwotfQotCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6
Q3NzQ2FsY1ByaW1pdGl2ZVZhbHVlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQ
UkVTU0lPTl9OT0RFKENTU0NhbGNPcGVyYXRpb25Ob2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjT3BlcmF0aW9uKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNOZWdhdGVOb2RlLCB0eXBl
KCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjTmVnYXRl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNJ
bnZlcnROb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBl
OjpDc3NDYWxjSW52ZXJ0KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2Rl
JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiBjcmVhdGVDU1MoY29uc3QgTGVuZ3RoJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgbm9kZSkKLXsKLSAgICBub2RlLmR1bXAodHMpOwotICAgIHJldHVybiB0
czsKLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY1VuaXRDYXRlZ29yeShDU1NV
bml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfRVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfQ006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1JMSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0NIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TGVuZ3RoOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgot
ICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDsKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RV
Uk46Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTsKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6Ci0gICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOwotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19IWjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfS0haOgotICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihDU1NV
bml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Ci0gICAgICAg
IHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50OwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OkFuZ2xlOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUzoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU7
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19LSFo6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k7Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
RVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0NIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlO
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBD
U1NVbml0VHlwZSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLXsKLSAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NT
X05VTUJFUjsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDogcmV0dXJuIENT
U1VuaXRUeXBlOjpDU1NfUFg7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
OiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOwotICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6QW5nbGU6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX0RFRzsKLSAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX01TOwot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OiByZXR1cm4gQ1NTVW5pdFR5
cGU6OkNTU19IWjsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5L
Tk9XTjsKLX0KLQotc3RhdGljIGJvb2wgaGFzRG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdHlwZSkK
LXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19FTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VYUzoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfQ0hTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Q006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1BDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
TVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0haOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0RJTUVOU0lPTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlO
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19EUFBYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUEk6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0RQQ006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0ZSOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19TVFJJTkc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0ZPTlRfRkFNSUxZOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19VUkk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lERU5U
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19BVFRSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DT1VOVEVSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRUNUOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19SR0JDT0xPUjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEFJ
UjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVU5JQ09ERV9SQU5HRToKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfQ09VTlRFUl9OQU1FOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19T
SEFQRToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVBRDoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUVVJUktZX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQzoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTlVNQkVSOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9MRU5HVEg6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BST1BFUlRZX0lEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19WQUxVRV9JRDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgQ1NTVmFsdWVJ
RCBmdW5jdGlvbkZyb21PcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNoIChv
cCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6
OlN1YnRyYWN0OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKLSAgICBjYXNlIENh
bGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVDYWxjOwotICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZU1pbjsKLSAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVNYXg7Ci0gICAg
Y2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVDbGFtcDsK
LSAgICB9Ci0gICAgcmV0dXJuIENTU1ZhbHVlQ2FsYzsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQK
LXN0YXRpYyBTdHJpbmcgcHJldHR5UHJpbnROb2RlKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9k
ZSYgbm9kZSkKLXsKLSAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKLSAgICBtdWx0aWxp
bmVTdHJlYW0gPDwgbm9kZTsKLSAgICByZXR1cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsK
LX0KLQotc3RhdGljIFN0cmluZyBwcmV0dHlQcmludE5vZGVzKGNvbnN0IFZlY3RvcjxSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzKQotewotICAgIFRleHRTdHJlYW0gbXVsdGlsaW5l
U3RyZWFtOwotICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlczsKLSAgICByZXR1cm4gbXVsdGls
aW5lU3RyZWFtLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgotCi1jbGFzcyBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlPiBjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZShXVEZNb3ZlKHZhbHVlKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZT4gY3JlYXRlKGRvdWJsZSB2YWx1ZSwgQ1NTVW5pdFR5cGUgdHlw
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5cGUpKSk7
Ci0gICAgfQotCi0gICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fdmFsdWUtPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICBDU1NVbml0VHlwZSBw
cmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVl
LT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgfQotCi0gICAgYm9vbCBpc051bWVyaWNWYWx1ZSgpIGNv
bnN0OwotICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBuZWdhdGUoKTsK
LSAgICB2b2lkIGludmVydCgpOwotCi0gICAgZW51bSBjbGFzcyBVbml0Q29udmVyc2lvbiB7Ci0g
ICAgICAgIEludmFsaWQsCi0gICAgICAgIFByZXNlcnZlLAotICAgICAgICBDYW5vbmljYWxpemUK
LSAgICB9OwotICAgIHZvaWQgYWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmLCBV
bml0Q29udmVyc2lvbiA9IFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZSk7Ci0gICAgdm9pZCBtdWx0
aXBseShkb3VibGUpOwotCi0gICAgdm9pZCBjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlwZSk7
Ci0gICAgdm9pZCBjYW5vbmljYWxpemVVbml0KCk7Ci0KLSAgICBjb25zdCBDU1NQcmltaXRpdmVW
YWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuICFt
X3ZhbHVlLT5kb3VibGVWYWx1ZSgpOwotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0IGZpbmFsOwotICAgIFR5cGUgdHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNQcmltaXRpdmVWYWx1ZTsgfQotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBk
b3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7Ci0KLSAgICBkb3VibGUgY29tcHV0
ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8
Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290
Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3Qg
ZmluYWw7Ci0KLSAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoUmVmPENTU1ByaW1p
dGl2ZVZhbHVlPiYmIHZhbHVlKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYWxj
VW5pdENhdGVnb3J5KHZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKQotICAgICAgICAsIG1fdmFsdWUo
V1RGTW92ZSh2YWx1ZSkpCi0gICAgewotICAgIH0KLQotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV92YWx1ZTsKLX07Ci0KLS8vIEZJWE1FOiBVc2UgY2FsY1VuaXRDYXRlZ29yeT8KLWJvb2wg
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOdW1lcmljVmFsdWUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3ZhbHVlLT5pc0xlbmd0aCgpIHx8IG1fdmFsdWUtPmlzTnVtYmVyKCkgfHwgbV92
YWx1ZS0+aXNQZXJjZW50YWdlKCkgfHwgbV92YWx1ZS0+aXNBbmdsZSgpCi0gICAgICAgIHx8IG1f
dmFsdWUtPmlzVGltZSgpIHx8IG1fdmFsdWUtPmlzUmVzb2x1dGlvbigpIHx8IG1fdmFsdWUtPmlz
RmxleCgpIHx8IG1fdmFsdWUtPmlzRnJlcXVlbmN5KCk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6aXNOZWdhdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzTnVtZXJp
Y1ZhbHVlKCkgJiYgbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSA8IDAuMDsKLX0KLQotdm9pZCBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpuZWdhdGUoKQotewotICAgIEFTU0VSVChpc051bWVyaWNW
YWx1ZSgpKTsKLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLjAgLSBt
X3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOwotfQotCi12
b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmludmVydCgpCi17Ci0gICAgQVNTRVJUKGlz
TnVtZXJpY1ZhbHVlKCkpOwotICAgIGlmICghbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSkKLSAgICAg
ICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpLCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOwotCi0gICAg
bV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4wIC8gbV92YWx1ZS0+ZG91Ymxl
VmFsdWUoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjphZGQoY29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSYgbm9k
ZSwgVW5pdENvbnZlcnNpb24gdW5pdENvbnZlcnNpb24pCi17Ci0gICAgYXV0byB2YWx1ZVR5cGUg
PSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0KLSAgICBzd2l0Y2ggKHVuaXRDb252ZXJzaW9u
KSB7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6SW52YWxpZDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5pdENvbnZlcnNpb246OlBy
ZXNlcnZlOgotICAgICAgICBBU1NFUlQobm9kZS5wcmltaXRpdmVUeXBlKCkgPT0gdmFsdWVUeXBl
KTsKLSAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV92YWx1ZS0+
ZG91YmxlVmFsdWUoKSArIG5vZGUuZG91YmxlVmFsdWUodmFsdWVUeXBlKSwgdmFsdWVUeXBlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOiB7
Ci0gICAgICAgIGF1dG8gdmFsdWVDYXRlZ29yeSA9IHVuaXRDYXRlZ29yeSh2YWx1ZVR5cGUpOwot
ICAgICAgICAvLyBGSVhNRTogSXQncyBhd2t3YXJkIHRoYXQgY2Fub25pY2FsVW5pdFR5cGVGb3JD
YXRlZ29yeSgpIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBDU1NVbml0Q2F0ZWdvcnk6OlBlcmNl
bnQuCi0gICAgICAgIGF1dG8gY2Fub25pY2FsVHlwZSA9IHZhbHVlQ2F0ZWdvcnkgPT0gQ1NTVW5p
dENhdGVnb3J5OjpQZXJjZW50ID8gQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFIDogY2Fub25p
Y2FsVW5pdFR5cGVGb3JDYXRlZ29yeSh2YWx1ZUNhdGVnb3J5KTsKLSAgICAgICAgQVNTRVJUKGNh
bm9uaWNhbFR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOKTsKLSAgICAgICAgZG91Ymxl
IGxlZnRWYWx1ZSA9IG1fdmFsdWUtPmRvdWJsZVZhbHVlKGNhbm9uaWNhbFR5cGUpOwotICAgICAg
ICBkb3VibGUgcmlnaHRWYWx1ZSA9IG5vZGUuZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7Ci0g
ICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlZnRWYWx1ZSArIHJp
Z2h0VmFsdWUsIGNhbm9uaWNhbFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQot
fQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6Om11bHRpcGx5KGRvdWJsZSBtdWx0
aXBsaWVyKQotewotICAgIGF1dG8gdmFsdWVUeXBlID0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgp
OwotICAgIEFTU0VSVChoYXNEb3VibGVWYWx1ZSh2YWx1ZVR5cGUpKTsKLSAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3VibGVWYWx1ZSh2YWx1ZVR5cGUp
ICogbXVsdGlwbGllciwgdmFsdWVUeXBlKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlwZSB1bml0VHlwZSkKLXsKLSAgICBB
U1NFUlQodW5pdENhdGVnb3J5KHVuaXRUeXBlKSA9PSB1bml0Q2F0ZWdvcnkobV92YWx1ZS0+cHJp
bWl0aXZlVHlwZSgpKSk7Ci0gICAgZG91YmxlIG5ld1ZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFs
dWUodW5pdFR5cGUpOwotICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5l
d1ZhbHVlLCB1bml0VHlwZSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
Y2Fub25pY2FsaXplVW5pdCgpCi17Ci0gICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0
ZWdvcnlGb3JDb21iaW5hdGlvbihtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOwotICAgIGlmIChj
YXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBjYW5vbmljYWxUeXBlID0gY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlv
bkNhdGVnb3J5KGNhdGVnb3J5KTsKLSAgICBpZiAoY2Fub25pY2FsVHlwZSA9PSBtX3ZhbHVlLT5w
cmltaXRpdmVUeXBlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSBuZXdWYWx1ZSA9
IG1fdmFsdWUtPmRvdWJsZVZhbHVlKGNhbm9uaWNhbFR5cGUpOwotICAgIG1fdmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5ld1ZhbHVlLCBjYW5vbmljYWxUeXBlKTsKLX0KLQotc3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPENhbGNFeHByZXNzaW9uTnVtYmVyPihtX3ZhbHVlLT5mbG9hdFZhbHVlKCkpOwotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgotICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KGNvbnZlcnNpb25EYXRhKSwgTGVuZ3RoVHlwZTo6Rml4ZWQpKTsKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TGVuZ3RoOiB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9u
TGVuZ3RoPihtX3ZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRGbG9hdENvbnZlcnNpb24gfCBQ
ZXJjZW50Q29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpKTsKLSAgICB9Ci0gICAgLy8gT25seSB0
eXBlcyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYSBMZW5ndGggZXhwcmVzc2lvbiBjYW4gYmUgY29u
dmVydGVkCi0gICAgLy8gdG8gYSBDYWxjRXhwcmVzc2lvbk5vZGUuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXIgbWFrZXMgbm8gc2Vuc2UgYXMgYSBMZW5ndGguCi0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgotICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgotICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZG91
YmxlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVu
aXRUeXBlKSBjb25zdAotewotICAgIGlmIChoYXNEb3VibGVWYWx1ZSh1bml0VHlwZSkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIEFTU0VSVCh1bml0Q2F0ZWdvcnkobV92YWx1ZS0+
cHJpbWl0aXZlVHlwZSgpKSA9PSB1bml0Q2F0ZWdvcnkodW5pdFR5cGUpKSwgYnV0IG9ubHkgd2hl
biBhbGwgY2FsbGVycyBhcmUgZml4ZWQgKGUuZy4gd2Via2l0Lm9yZy9iLzIwNDgyNikuCi0gICAg
ICAgIGlmICh1bml0Q2F0ZWdvcnkobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSAhPSB1bml0Q2F0
ZWdvcnkodW5pdFR5cGUpKSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3Ry
ZWFtIDw8ICJDYWxsaW5nIGRvdWJsZVZhbHVlKCkgd2l0aCB1bml0ICIgPDwgdW5pdFR5cGUgPDwg
IiBvbiBhIG5vZGUgb2YgdW5pdCB0eXBlICIgPDwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpIDw8
ICIgd2hpY2ggaXMgaW5jb21wYXRpYmxlIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7Ci0g
ICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1kb3Vi
bGUgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHN3aXRj
aCAoY2F0ZWdvcnkoKSkgewotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgot
ICAgICAgICByZXR1cm4gbV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxkb3VibGU+KGNvbnZlcnNpb25E
YXRhKTsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6Ci0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlRpbWU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6Ci0gICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0
RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2
YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
Ojpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fdmFsdWUtPmNvbGxlY3REaXJlY3RS
b290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwotfQotCi1ib29sIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90
aGVyKSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fdmFsdWUsIHN0YXRp
Y19jYXN0PGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmPihvdGhlcikubV92YWx1ZSk7
Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKLXsKLSAgICB0cyA8PCAidmFsdWUgIiA8PCBtX3ZhbHVlLT5jdXN0b21DU1NUZXh0
KCkgPDwgIiAoY2F0ZWdvcnk6ICIgPDwgY2F0ZWdvcnkoKSA8PCAiLCB0eXBlOiAiIDw8IHByaW1p
dGl2ZVR5cGUoKSA8PCAiKSI7Ci19Ci0KLWNsYXNzIENTU0NhbGNOZWdhdGVOb2RlIGZpbmFsIDog
cHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxD
U1NDYWxjTmVnYXRlTm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hp
bGQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjTmVnYXRlTm9k
ZShXVEZNb3ZlKGNoaWxkKSkpOwotICAgIH0KLQotICAgIGNvbnN0IENTU0NhbGNFeHByZXNzaW9u
Tm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0gICAgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQotICAg
IHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkgeyBtX2No
aWxkID0gV1RGTW92ZShjaGlsZCk7IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxjTmVnYXRlTm9k
ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQotICAgICAgICA6IENTU0NhbGNF
eHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKLSAgICAgICAgLCBtX2NoaWxkKFdURk1v
dmUoY2hpbGQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1Vu
aXRUeXBlIHVuaXRUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGlsZC0+ZG91YmxlVmFs
dWUodW5pdFR5cGUpOyB9Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QgZmluYWwgeyByZXR1cm4g
LW1fY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7IH0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDc3NDYWxjTmVnYXRlOyB9Ci0gICAgQ1NT
VW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPnBy
aW1pdGl2ZVR5cGUoKTsgfQotCi0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERl
cGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5h
bCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3Bl
cnRpZXMpOyB9Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBt
X2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVy
dGllcyk7IH0KLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLSAg
ICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotc3RkOjp1bmlxdWVf
cHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBj
b25zdAotewotICAgIGF1dG8gY2hpbGROb2RlID0gbV9jaGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Np
b24oY29udmVyc2lvbkRhdGEpOwotICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9u
TmVnYXRpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY05lZ2F0ZU5v
ZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIi0iIDw8IG1fY2hp
bGQuZ2V0KCk7Ci19Ci0KLWNsYXNzIENTU0NhbGNJbnZlcnROb2RlIGZpbmFsIDogcHVibGljIENT
U0NhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjSW52
ZXJ0Tm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjSW52ZXJ0Tm9kZShXVEZNb3Zl
KGNoaWxkKSkpOwotICAgIH0KLQotICAgIGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hp
bGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0gICAgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0
Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkgeyBtX2NoaWxkID0gV1RG
TW92ZShjaGlsZCk7IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxjSW52ZXJ0Tm9kZShSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9u
Tm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKLSAgICAgICAgLCBtX2NoaWxkKFdURk1vdmUoY2hpbGQp
KQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2Rl
PiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikg
Y29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y2hpbGQtPmlzWmVybygpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBj
b25zdCBmaW5hbDsKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBUeXBlOjpDc3NDYWxjSW52ZXJ0OyB9Ci0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0
aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPnByaW1pdGl2ZVR5cGUoKTsg
fQotCi0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNv
bGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9Ci0gICAg
dm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0
RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLQotICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNz
aW9uTm9kZT4gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIGF1
dG8gY2hpbGROb2RlID0gbV9jaGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRh
dGEpOwotICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihXVEZN
b3ZlKGNoaWxkTm9kZSkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY0ludmVydE5vZGU6OmRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAotewotICAgIGF1dG8gY2hpbGRWYWx1ZSA9
IG1fY2hpbGQtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKLSAgICBpZiAoIWNoaWxkVmFsdWUpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0g
ICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9k
ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhKSBjb25zdAotewotICAgIGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmNvbXB1
dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7Ci0gICAgaWYgKCFjaGlsZFZhbHVlKQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgIHJl
dHVybiAxLjAgLyBjaGlsZFZhbHVlOwotfQotCi12b2lkIENTU0NhbGNJbnZlcnROb2RlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICIxLyIgPDwgbV9jaGlsZC5nZXQo
KTsKLX0KLQotLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIHRoZSAiVG8gYWRkIHR3byB0eXBlcyB0
eXBlMSBhbmQgdHlwZTIsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoiIHJ1bGVzLgotCi1z
dGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRlZ29yeSBhZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpXVtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpXSA9IHsKLS8vICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlciAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCAg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQgICAgICAgIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnROdW1iZXIgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgK
LSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIs
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyCi0gICAgeyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpM
ZW5ndGgsICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aAotICAgIHsgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExl
bmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgICAgICAgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCB9
LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50Ci0gICAgeyBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9LCAvLyAgICAgICAgIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAotfTsKLQotc3RhdGljIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBs
ZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUsIENhbGNPcGVy
YXRvciBvcCkKLXsKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGxlZnRDYXRlZ29yeSA9IGxlZnRT
aWRlLmNhdGVnb3J5KCk7Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSByaWdodENhdGVnb3J5ID0g
cmlnaHRTaWRlLmNhdGVnb3J5KCk7Ci0gICAgQVNTRVJUKGxlZnRDYXRlZ29yeSA8IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLSAgICBBU1NFUlQocmlnaHRDYXRlZ29yeSA8IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLQotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNP
cGVyYXRvcjo6QWRkOgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAgICAgICAg
aWYgKGxlZnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlICYmIHJpZ2h0Q2F0
ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKLSAgICAgICAgICAgIHJldHVybiBh
ZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVmdENhdGVnb3J5KV1bc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJpZ2h0Q2F0ZWdvcnkpXTsKLSAgICAgICAgaWYgKGxlZnRDYXRl
Z29yeSA9PSByaWdodENhdGVnb3J5KQotICAgICAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeTsK
LSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseToKLSAgICAgICAgaWYgKGxlZnRDYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXI7Ci0gICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyID8gcmlnaHRDYXRlZ29yeSA6IGxlZnRDYXRlZ29yeTsKLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6RGl2aWRlOgotICAgICAgICBpZiAocmlnaHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXIgfHwgcmlnaHRTaWRlLmlzWmVybygpKQotICAgICAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5
OwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1h
eDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyOwotfQotCi0vLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgY29ycmVjdCBj
YXRlZ29yeSBjb21wdXRhdGlvbiBwZXI6Ci0vLyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhvdWRpbmku
b3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtaW52ZXJ0LWEtdHlwZT4KLS8vIFRv
IGludmVydCBhIHR5cGUgdHlwZSwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgotLy8gTGV0
IHJlc3VsdCBiZSBhIG5ldyB0eXBlIHdpdGggYW4gaW5pdGlhbGx5IGVtcHR5IG9yZGVyZWQgbWFw
IGFuZCBhbiBpbml0aWFsbHkgbnVsbCBwZXJjZW50IGhpbnQKLS8vIEZvciBlYWNoIHVuaXQg4oaS
IGV4cG9uZW50IG9mIHR5cGUsIHNldCByZXN1bHRbdW5pdF0gdG8gKC0xICogZXhwb25lbnQpLgot
c3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnlGb3JJbnZlcnQoQ2FsY3VsYXRpb25D
YXRlZ29yeSBjYXRlZ29yeSkKLXsKLSAgICByZXR1cm4gY2F0ZWdvcnk7Ci19Ci0KLXN0YXRpYyBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IFZlY3RvcjxSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzLCBDYWxjT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYg
KG5vZGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOwotCi0gICAgYXV0byBjdXJyZW50Q2F0ZWdvcnkgPSBub2Rlc1swXS0+Y2F0ZWdvcnkoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBhdXRvJiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0gICAgICAgIAotICAgICAg
ICBhdXRvIHVzZWRPcGVyYXRvciA9IG9wOwotICAgICAgICBpZiAobm9kZS50eXBlKCkgPT0gQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0KQotICAgICAgICAgICAgdXNl
ZE9wZXJhdG9yID0gQ2FsY09wZXJhdG9yOjpEaXZpZGU7Ci0KLSAgICAgICAgYXV0byBuZXh0Q2F0
ZWdvcnkgPSBub2RlLmNhdGVnb3J5KCk7Ci0KLSAgICAgICAgc3dpdGNoICh1c2VkT3BlcmF0b3Ip
IHsKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKLSAgICAgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OlN1YnRyYWN0OgotICAgICAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3Vk
aW5pLm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLWFkZC10d28tdHlwZXM+Ci0g
ICAgICAgICAgICAvLyBBdCBhICsgb3IgLSBzdWItZXhwcmVzc2lvbiwgYXR0ZW1wdCB0byBhZGQg
dGhlIHR5cGVzIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVudHMuCi0gICAgICAgICAgICAv
LyBJZiB0aGlzIHJldHVybnMgZmFpbHVyZSwgdGhlIGVudGlyZSBjYWxjdWxhdGlvbuKAmXMgdHlw
ZSBpcyBmYWlsdXJlLiBPdGhlcndpc2UsIHRoZSBzdWItZXhwcmVzc2lvbuKAmXMgdHlwZSBpcyB0
aGUgcmV0dXJuZWQgdHlwZS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkgPCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiBuZXh0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpBbmdsZSkKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnkgPSBhZGRTdWJ0cmFj
dFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY3VycmVudENhdGVnb3J5KV1bc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG5leHRDYXRlZ29yeSldOwotICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVu
dENhdGVnb3J5ICE9IG5leHRDYXRlZ29yeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6Ci0gICAgICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMu
Y3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtbXVsdGlwbHkt
dHdvLXR5cGVzPgotICAgICAgICAgICAgLy8gQXQgYSAqIHN1Yi1leHByZXNzaW9uLCBtdWx0aXBs
eSB0aGUgdHlwZXMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZ3VtZW50cy4gVGhlIHN1Yi1leHBy
ZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1cm5lZCByZXN1bHQuCi0gICAgICAgICAgICBpZiAo
Y3VycmVudENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAmJiBuZXh0Q2F0
ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLQotICAgICAgICAgICAgY3VycmVudENh
dGVnb3J5ID0gY3VycmVudENhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciA/
IG5leHRDYXRlZ29yeSA6IGN1cnJlbnRDYXRlZ29yeTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAgICAgICAgICAgIGF1dG8gaW52
ZXJ0Q2F0ZWdvcnkgPSBjYXRlZ29yeUZvckludmVydChuZXh0Q2F0ZWdvcnkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBBdCBhIC8gc3ViLWV4cHJlc3Npb24sIGxldCBsZWZ0IHR5cGUg
YmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgbGVmdCBhcmd1bWVudCwK
LSAgICAgICAgICAgIC8vIGFuZCByaWdodCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgZmluZGluZyB0
aGUgdHlwZXMgb2YgaXRzIHJpZ2h0IGFyZ3VtZW50IGFuZCB0aGVuIGludmVydGluZyBpdC4KLSAg
ICAgICAgICAgIC8vIFRoZSBzdWItZXhwcmVzc2lvbuKAmXMgdHlwZSBpcyB0aGUgcmVzdWx0IG9m
IG11bHRpcGx5aW5nIHRoZSBsZWZ0IHR5cGUgYW5kIHJpZ2h0IHR5cGUuCi0gICAgICAgICAgICBp
ZiAoaW52ZXJ0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyIHx8IG5vZGUu
aXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWluOgotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgICAgICBj
YXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6Ci0gICAgICAgICAgICAvLyBUaGUgdHlwZSBvZiBhIG1p
bigpLCBtYXgoKSwgb3IgY2xhbXAoKSBleHByZXNzaW9uIGlzIHRoZSByZXN1bHQgb2YgYWRkaW5n
IHRoZSB0eXBlcyBvZiBpdHMgY29tbWEtc2VwYXJhdGVkIGNhbGN1bGF0aW9ucwotICAgICAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGN1cnJlbnRDYXRlZ29yeTsKLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgcmVzb2x2ZWRUeXBlRm9yTWluT3JNYXhPckNsYW1wKENhbGN1bGF0aW9uQ2F0ZWdvcnkg
Y2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKLXsKLSAg
ICBzd2l0Y2ggKGNhdGVnb3J5KSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Ci0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudExlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xl
OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOgotICAgICAgICByZXR1cm4gY2F0ZWdvcnk7Ci0KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbkNhdGVnb3J5ID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TGVuZ3RoOwotICAgICAgICBpZiAoZGVzdGluYXRpb25DYXRlZ29yeSA9
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjsKLSAgICAgICAgcmV0dXJuIGNhdGVnb3J5Owot
ICAgIH0KLQotICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLX0KLQotc3Rh
dGljIGJvb2wgaXNTYW1lUGFpcihDYWxjdWxhdGlvbkNhdGVnb3J5IGEsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgYiwgQ2FsY3VsYXRpb25DYXRlZ29yeSB4LCBDYWxjdWxhdGlvbkNhdGVnb3J5IHkpCi17
Ci0gICAgcmV0dXJuIChhID09IHggJiYgYiA9PSB5KSB8fCAoYSA9PSB5ICYmIGIgPT0geCk7Ci19
Ci0KLWNsYXNzIENTU0NhbGNPcGVyYXRpb25Ob2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlKENhbGNPcGVyYXRvciwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+IGNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
JiYgdmFsdWVzKTsKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVh
dGVQcm9kdWN0KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpOwot
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZU1pbk9yTWF4T3JD
bGFtcChDYWxjT3BlcmF0b3IsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2
YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0KLSAgICBz
dGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnkoUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJik7Ci0KLSAgICBzdGF0aWMgdm9pZCBidWlsZENTU1RleHQoY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRlciYpOwotCi0gICAgQ2FsY09wZXJhdG9y
IGNhbGNPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3I7IH0KLSAgICBib29sIGlz
Q2FsY1N1bU5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6
QWRkOyB9Ci0gICAgYm9vbCBpc0NhbGNQcm9kdWN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
cmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsgfQotICAgIGJvb2wgaXNNaW5Pck1heE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1f
b3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXg7IH0KLSAgICBib29sIHNob3VsZFNvcnRDaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzQ2FsY1N1bU5vZGUoKSB8fCBpc0NhbGNQcm9kdWN0Tm9k
ZSgpOyB9Ci0KLSAgICB2b2lkIGhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9y
KTsKLSAgICB2b2lkIGNvbWJpbmVDaGlsZHJlbigpOwotICAgIAotICAgIGJvb2wgY2FuQ29tYmlu
ZUFsbENoaWxkcmVuKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLSAg
ICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIHsgcmV0dXJu
IG1fY2hpbGRyZW47IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxj
dWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmln
aHRTaWRlKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKLSAgICAg
ICAgLCBtX29wZXJhdG9yKG9wKQotICAgIHsKLSAgICAgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDIpOwotICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGxlZnRTaWRlKSk7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocmlnaHRTaWRlKSk7Ci0gICAgfQotCi0gICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4pCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNhdGVnb3J5KQotICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCi0gICAgICAgICwgbV9j
aGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKLSAgICB7Ci0gICAgfQotCi0gICAgVHlwZSB0eXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3NzQ2FsY09wZXJhdGlvbjsgfQotCi0gICAgYm9vbCBp
c1plcm8oKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZShw
cmltaXRpdmVUeXBlKCkpOwotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotCi0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlw
ZSgpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29u
c3QgZmluYWw7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5h
bDsKLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhI
YXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgc3RhdGljIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSogZ2V0TnVtYmVyU2lkZShDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSkKLSAgICB7Ci0gICAgICAgIGlmIChsZWZ0U2lkZS5j
YXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAgICAgIHJl
dHVybiAmbGVmdFNpZGU7Ci0gICAgICAgIGlmIChyaWdodFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gJnJpZ2h0U2lkZTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgZG91YmxlIGV2YWx1YXRlKGNv
bnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBldmFsdWF0ZU9wZXJhdG9yKG1fb3BlcmF0b3IsIGNoaWxkcmVuKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yLCBjb25zdCBWZWN0b3I8
ZG91YmxlPiYpOwotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlm
eU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKLSAgICBzdGF0
aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlSZWN1cnNpdmUoUmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIEdy
b3VwaW5nUGFyZW5zIHsKLSAgICAgICAgT21pdCwKLSAgICAgICAgSW5jbHVkZQotICAgIH07Ci0g
ICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0IENTU0NhbGNFeHByZXNz
aW9uTm9kZSYsIFN0cmluZ0J1aWxkZXImLCBHcm91cGluZ1BhcmVucyA9IEdyb3VwaW5nUGFyZW5z
OjpJbmNsdWRlKTsKLQotICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOwotICAgIFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKLX07Ci0KLVJlZlB0cjxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0
b3Igb3AsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQotewotICAgIGlmICghbGVmdFNpZGUg
fHwgIXJpZ2h0U2lkZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQob3Ag
PT0gQ2FsY09wZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7Ci0K
LSAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcik7Ci0gICAgQVNTRVJUKHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyKTsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29y
eSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKLSAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMs
IHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9w
IDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8
IHByZXR0eVByaW50Tm9kZSgqbGVmdFNpZGUpIDw8ICIgYW5kICIgPDwgKnJpZ2h0U2lkZSk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIG9wLCBsZWZ0U2lkZS5yZWxlYXNlTm9u
TnVsbCgpLCByaWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSkpOwotfQotCi1SZWZQdHI8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oVmVjdG9yPFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKLXsKLSAgICBpZiAodmFsdWVzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIG5ld0NhdGVnb3J5
ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6OkFkZCk7Ci0gICAgaWYg
KG5ld0NhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Ci0gICAgICAgIExP
R19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgc3VtIG5vZGUg
YmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmlu
dE5vZGVzKHZhbHVlcykpOwotICAgICAgICBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5
KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpBZGQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKG5ld0Nh
dGVnb3J5LCBDYWxjT3BlcmF0b3I6OkFkZCwgV1RGTW92ZSh2YWx1ZXMpKSk7Ci19Ci0KLVJlZlB0
cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1
Y3QoVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKLXsKLSAgICBp
ZiAodmFsdWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
IG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6Ok11
bHRpcGx5KTsKLSAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRv
IGNyZWF0ZSBwcm9kdWN0IG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5
IGZyb20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25O
b2RlKG5ld0NhdGVnb3J5LCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBXVEZNb3ZlKHZhbHVlcykp
KTsKLX0KLQotUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciBvcCwgVmVjdG9yPFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5h
dGlvbkNhdGVnb3J5KQotewotICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBv
cCA9PSBDYWxjT3BlcmF0b3I6Ok1heCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wKTsKLSAg
ICBBU1NFUlRfSU1QTElFUyhvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wLCB2YWx1ZXMuc2l6ZSgp
ID09IDMpOwotCi0gICAgT3B0aW9uYWw8Q2FsY3VsYXRpb25DYXRlZ29yeT4gY2F0ZWdvcnkgPSBz
dGQ6Om51bGxvcHQ7Ci0gICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgewotICAgICAgICBh
dXRvIHZhbHVlQ2F0ZWdvcnkgPSByZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xhbXAodmFsdWUt
PmNhdGVnb3J5KCksIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotCi0gICAgICAgIEFTU0VSVCh2YWx1
ZUNhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwotICAgICAgICBpZiAoIWNh
dGVnb3J5KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcikgewotICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBz
dHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgIiA8PCBvcCA8
PCAiIG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBw
cmV0dHlQcmludE5vZGVzKHZhbHVlcykpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0ZWdvcnkgPSB2YWx1ZUNhdGVnb3J5Owot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHZhbHVlQ2F0ZWdvcnkpIHsKLSAg
ICAgICAgICAgIGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnks
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgpLCB2YWx1ZUNh
dGVnb3J5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXIpKSB7Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKGNhdGVnb3J5
LnZhbHVlKCksIG9wLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0
aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCi17Ci0g
ICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6QWRkIHx8IG9wID09IENhbGNPcGVyYXRvcjo6
TXVsdGlwbHkpOwotCi0gICAgYXV0byBoYXNDaGlsZFdpdGhPcGVyYXRvciA9IFsmXSAoQ2FsY09w
ZXJhdG9yIG9wKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0g
ICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBk
b3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigp
ID09IG9wKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgaWYgKCFoYXNDaGlsZFdpdGhPcGVyYXRvcihv
cCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsK
LSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkgJiYgZG93
bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9
PSBvcCkgewotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNoaWxkVG9Nb3ZlIDogY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4u
YXBwZW5kKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwotICAgIH0KLSAgICAKLSAgICBu
ZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwotICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0No
aWxkcmVuKTsKLX0KLQotZW51bSBjbGFzcyBTb3J0aW5nQ2F0ZWdvcnkgewotICAgIE51bWJlciwK
LSAgICBQZXJjZW50LAotICAgIERpbWVuc2lvbiwKLSAgICBPdGhlcgotfTsKLQotc3RhdGljIFNv
cnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnlGb3JUeXBlKENTU1VuaXRUeXBlIHVuaXRUeXBl
KQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGluZ0NhdGVnb3J5IHNvcnRPcmRlcltdID0g
ewotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlciwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsCi0gICAgICAgIFNvcnRpbmdDYXRlZ29y
eTo6UGVyY2VudCwgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwKLSAgICAg
ICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyLAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAg
IC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsCi0gICAgICAgIFNvcnRpbmdD
YXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsCi0g
ICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6VGltZSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3ksCi0gICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6
T3RoZXIsICAgICAgICAgLy8gVU90aGVyCi0gICAgfTsKLQotICAgIENPTVBJTEVfQVNTRVJUKEFS
UkFZX1NJWkUoc29ydE9yZGVyKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpICsgMSwgc29ydE9yZGVyX3NpemVfc2hvdWxkX21hdGNoX1VuaXRDYXRl
Z29yeSk7Ci0gICAgcmV0dXJuIHNvcnRPcmRlcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FsY1Vu
aXRDYXRlZ29yeSh1bml0VHlwZSkpXTsKLX0KLQotc3RhdGljIFNvcnRpbmdDYXRlZ29yeSBzb3J0
aW5nQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQotewotICAgIGlm
IChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKLSAgICAgICAgcmV0dXJuIHNv
cnRpbmdDYXRlZ29yeUZvclR5cGUobm9kZS5wcmltaXRpdmVUeXBlKCkpOwotCi0gICAgcmV0dXJu
IFNvcnRpbmdDYXRlZ29yeTo6T3RoZXI7Ci19Ci0KLXN0YXRpYyBDU1NVbml0VHlwZSBwcmltaXRp
dmVUeXBlRm9yQ29tYmluYXRpb24oY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQot
ewotICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKLSAgICAgICAg
cmV0dXJuIG5vZGUucHJpbWl0aXZlVHlwZSgpOwotICAgIAotICAgIHJldHVybiBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047Ci19Ci0KLXN0YXRpYyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpV
bml0Q29udmVyc2lvbiBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlwZXMoQ1NTVW5pdFR5cGUg
Zmlyc3RUeXBlLCBDU1NVbml0VHlwZSBzZWNvbmRUeXBlKQotewotICAgIGlmIChmaXJzdFR5cGUg
PT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOIHx8IHNlY29uZFR5cGUgPT0gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOKQotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
VW5pdENvbnZlcnNpb246OkludmFsaWQ7Ci0KLSAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxj
dWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oZmlyc3RUeXBlKTsKLQotICAgIC8vIENvbXBh
dGlibGUgdHlwZXMuCi0gICAgaWYgKGZpcnN0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIgJiYgZmlyc3RDYXRlZ29yeSA9PSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmlu
YXRpb24oc2Vjb25kVHlwZSkpCi0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOwotCi0gICAgLy8gTWF0Y2hpbmcgdHlw
ZXMuCi0gICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlICYmIGhhc0RvdWJsZVZhbHVlKGZp
cnN0VHlwZSkpCi0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0
Q29udmVyc2lvbjo6UHJlc2VydmU7Ci0KLSAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7Ci19Ci0KLWJvb2wgQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY2hpbGRy
ZW4uc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpczxDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlPihtX2NoaWxkcmVuWzBdKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBmaXJzdFVuaXRUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZl
VHlwZSgpOwotICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JD
b21iaW5hdGlvbihtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCkpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0
byYgbm9kZSA9IG1fY2hpbGRyZW5baV07Ci0KLSAgICAgICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlPihub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBhdXRvIG5vZGVVbml0VHlwZSA9IG5vZGUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgYXV0
byBub2RlQ2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24obm9kZVVu
aXRUeXBlKTsKLQotICAgICAgICBpZiAobm9kZUNhdGVnb3J5ICE9IGZpcnN0Q2F0ZWdvcnkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG5vZGVDYXRlZ29yeSA9PSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBub2RlVW5pdFR5cGUgIT0gZmlyc3RVbml0VHlw
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaGFz
RG91YmxlVmFsdWUobm9kZVVuaXRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
Y29tYmluZUNoaWxkcmVuKCkKLXsKLSAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPCAyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2hvdWxkU29ydENoaWxkcmVuKCkpIHsKLSAgICAgICAg
Ly8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NvcnQtYS1jYWxjdWxh
dGlvbnMtY2hpbGRyZW4+Ci0gICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9jaGlsZHJlbi5iZWdp
bigpLCBtX2NoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBhdXRvJiBmaXJzdCwgY29uc3QgYXV0byYg
c2Vjb25kKSB7Ci0gICAgICAgICAgICAvLyBTb3J0IG9yZGVyOiBudW1iZXIsIHBlcmNlbnRhZ2Us
IGRpbWVuc2lvbiwgb3RoZXIuCi0gICAgICAgICAgICBTb3J0aW5nQ2F0ZWdvcnkgZmlyc3RDYXRl
Z29yeSA9IHNvcnRpbmdDYXRlZ29yeShmaXJzdC5nZXQoKSk7Ci0gICAgICAgICAgICBTb3J0aW5n
Q2F0ZWdvcnkgc2Vjb25kQ2F0ZWdvcnkgPSBzb3J0aW5nQ2F0ZWdvcnkoc2Vjb25kLmdldCgpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpcnN0Q2F0ZWdvcnkgPT0gU29ydGluZ0Nh
dGVnb3J5OjpEaW1lbnNpb24gJiYgc2Vjb25kQ2F0ZWdvcnkgPT0gU29ydGluZ0NhdGVnb3J5OjpE
aW1lbnNpb24pIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBub2RlcyBjb250YWlucyBhbnkgZGlt
ZW5zaW9ucywgcmVtb3ZlIHRoZW0gZnJvbSBub2Rlcywgc29ydCB0aGVtIGJ5IHRoZWlyIHVuaXRz
LCBhbmQgYXBwZW5kIHRoZW0gdG8gcmV0LgotICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RVbml0
U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBlU3RyaW5nKGZpcnN0LT5wcmltaXRp
dmVUeXBlKCkpOwotICAgICAgICAgICAgICAgIGF1dG8gc2Vjb25kVW5pdFN0cmluZyA9IENTU1By
aW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyhzZWNvbmQtPnByaW1pdGl2ZVR5cGUoKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihmaXJzdFVuaXRT
dHJpbmcsIHNlY29uZFVuaXRTdHJpbmcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZpcnN0Q2F0ZWdvcnkpIDwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHNlY29uZENhdGVnb3J5KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAicG9zdC1zb3J0OiAiIDw8ICp0aGlzKTsKLSAgICB9
Ci0KLSAgICBpZiAoY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpBZGQpIHsKLSAgICAg
ICAgLy8gRm9yIGVhY2ggc2V0IG9mIHJvb3TigJlzIGNoaWxkcmVuIHRoYXQgYXJlIG51bWVyaWMg
dmFsdWVzIHdpdGggaWRlbnRpY2FsIHVuaXRzLAotICAgICAgICAvLyByZW1vdmUgdGhvc2UgY2hp
bGRyZW4gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUgY29udGFp
bmluZwotICAgICAgICAvLyB0aGUgc3VtIG9mIHRoZSByZW1vdmVkIG5vZGVzLCBhbmQgd2l0aCB0
aGUgc2FtZSB1bml0LgotICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
IG5ld0NoaWxkcmVuOwotICAgICAgICBuZXdDaGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5k
KG1fY2hpbGRyZW5bMF0uY29weVJlZigpKTsKLQotICAgICAgICBDU1NVbml0VHlwZSBwcmV2aW91
c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obmV3Q2hpbGRyZW5bMF0uZ2V0KCkp
OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBjdXJyZW50Tm9kZSA9IG1fY2hpbGRyZW5baV07Ci0g
ICAgICAgICAgICBDU1NVbml0VHlwZSBjdXJyZW50VHlwZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21i
aW5hdGlvbihjdXJyZW50Tm9kZS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gY29udmVyc2lv
blR5cGUgPSBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlwZXMocHJldmlvdXNUeXBlLCBjdXJy
ZW50VHlwZSk7Ci0gICAgICAgICAgICBpZiAoY29udmVyc2lvblR5cGUgIT0gQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQpIHsKLSAgICAgICAgICAgICAg
ICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdDaGlsZHJlbi5sYXN0KCku
Z2V0KCkpLmFkZChkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjdXJyZW50Tm9k
ZS5nZXQoKSksIGNvbnZlcnNpb25UeXBlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJldmlvdXNUeXBlID0gcHJpbWl0aXZlVHlwZUZv
ckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlKTsKLSAgICAgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChjdXJyZW50Tm9kZS5jb3B5UmVmKCkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2NoaWxkcmVuID0g
V1RGTW92ZShuZXdDaGlsZHJlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
Y2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSkgewotICAgICAgICAvLyBJ
ZiByb290IGhhcyBtdWx0aXBsZSBjaGlsZHJlbiB0aGF0IGFyZSBudW1iZXJzIChub3QgcGVyY2Vu
dGFnZXMgb3IgZGltZW5zaW9ucyksCi0gICAgICAgIC8vIHJlbW92ZSB0aGVtIGFuZCByZXBsYWNl
IHRoZW0gd2l0aCBhIHNpbmdsZSBudW1iZXIgY29udGFpbmluZyB0aGUgcHJvZHVjdCBvZiB0aGUg
cmVtb3ZlZCBub2Rlcy4KLSAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSAxOwotCi0gICAgICAg
IC8vIFNvcnRpbmcgd2lsbCBoYXZlIHB1dCB0aGUgbnVtYmVyIG5vZGVzIGZpcnN0LgotICAgICAg
ICB1bnNpZ25lZCBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID0gMDsKLSAgICAgICAgZm9yIChhdXRv
JiBub2RlIDogbV9jaGlsZHJlbikgewotICAgICAgICAgICAgYXV0byBub2RlVHlwZSA9IHByaW1p
dGl2ZVR5cGVGb3JDb21iaW5hdGlvbihub2RlLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChub2Rl
VHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbXVsdGlwbGllciAqPSBub2RlLT5kb3VibGVWYWx1
ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgICAgICArK2xlYWRpbmdOdW1iZXJO
b2RlQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgICAgIG5ld0NoaWxkcmVuLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgcm9vdCBjb250YWlucyBvbmx5IHR3byBjaGlsZHJlbiwgb25lIG9mIHdoaWNoIGlzIGEg
bnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9yIGRpbWVuc2lvbikgYW5kIHRoZSBvdGhlciBvZgot
ICAgICAgICAvLyB3aGljaCBpcyBhIFN1bSB3aG9zZSBjaGlsZHJlbiBhcmUgYWxsIG51bWVyaWMg
dmFsdWVzLCBtdWx0aXBseSBhbGwgb2YgdGhlIFN1beKAmXMgY2hpbGRyZW4gYnkgdGhlIG51bWJl
ciwgdGhlbgotICAgICAgICAvLyByZXR1cm4gdGhlIFN1bS4KLSAgICAgICAgLy8gVGhlIFN1bSdz
IGNoaWxkcmVuIHNpbXBsaWZpY2F0aW9uIHdpbGwgaGF2ZSBoYXBwZW5lZCBhbHJlYWR5LgotICAg
ICAgICBib29sIGRpZE11bHRpcGx5ID0gZmFsc2U7Ci0gICAgICAgIGlmIChsZWFkaW5nTnVtYmVy
Tm9kZUNvdW50ICYmIG1fY2hpbGRyZW4uc2l6ZSgpIC0gbGVhZGluZ051bWJlck5vZGVDb3VudCA9
PSAxKSB7Ci0gICAgICAgICAgICBhdXRvIG11bHRpcGxpY2FuZENhdGVnb3J5ID0gY2FsY1VuaXRD
YXRlZ29yeShwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obV9jaGlsZHJlbi5sYXN0KCkuZ2V0
KCkpKTsKLSAgICAgICAgICAgIGlmIChtdWx0aXBsaWNhbmRDYXRlZ29yeSAhPSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tl
ZEFwcGVuZChtX2NoaWxkcmVuLmxhc3QoKS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgICAgIGRv
d25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuWzBdLmdldCgpKS5t
dWx0aXBseShtdWx0aXBsaWVyKTsKLSAgICAgICAgICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihtX2NoaWxk
cmVuLmxhc3QoKS5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hp
bGRyZW4ubGFzdCgpLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6OkFkZCkg
ewotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG11bHRpcGx5aW5nIHdpdGggYW5vdGhlciBv
cGVyYXRpb24gdGhhdCBpcyBhbiBhZGRpdGlvbiBhbmQgYWxsIHRoZSBhZGRlZCBjaGlsZHJlbgot
ICAgICAgICAgICAgICAgIC8vIGFyZSBwZXJjZW50YWdlcyBvciBkaW1lbnNpb25zLCB3ZSBzaG91
bGQgbXVsdGlwbHkgZWFjaCBjaGlsZCBhbmQgbWFrZSB0aGlzIGV4cHJlc3Npb24gYW4KLSAgICAg
ICAgICAgICAgICAvLyBhZGRpdGlvbi4KLSAgICAgICAgICAgICAgICBhdXRvIGFsbENoaWxkcmVu
QXJlUHJpbWl0aXZlVmFsdWVzID0gW10oY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiYgY2hpbGRyZW4pIC0+IGJvb2wKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZC5nZXQoKSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0Nh
bGNPcGVyYXRpb25Ob2RlPihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuY2hpbGRyZW4oKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYWxsQ2hpbGRyZW5BcmVQcmltaXRpdmVWYWx1ZXMoY2hpbGRyZW4p
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKGNoaWxkLmNvcHlSZWYo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlPihuZXdDaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLm11bHRpcGx5KG11bHRpcGxpZXIpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1fb3BlcmF0b3IgPSBD
YWxjT3BlcmF0b3I6OkFkZDsKLSAgICAgICAgICAgICAgICAgICAgZGlkTXVsdGlwbHkgPSB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghZGlkTXVsdGlwbHkpIHsKLSAgICAgICAgICAgIGlmIChsZWFkaW5nTnVtYmVyTm9kZUNv
dW50KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBtdWx0aXBsaWVyTm9kZSA9IENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG11bHRpcGxp
ZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgICAgICAgICAgbmV3Q2hpbGRy
ZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobXVsdGlwbGllck5vZGUpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVhZGluZ051bWJlck5vZGVDb3Vu
dDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRy
ZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW5baV0uY29weVJlZigpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fY2hpbGRyZW4g
PSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNNaW5Pck1heE5vZGUo
KSAmJiBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSkgewotICAgICAgICBhdXRvIGNvbWJpbmVkVW5p
dFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIGF1dG8gY2F0
ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oY29tYmluZWRVbml0VHlw
ZSk7Ci0gICAgICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikK
LSAgICAgICAgICAgIGNvbWJpbmVkVW5pdFR5cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1
bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOwotCi0gICAgICAgIGRvdWJsZSByZXNvbHZlZFZhbHVl
ID0gZG91YmxlVmFsdWUoY29tYmluZWRVbml0VHlwZSk7Ci0gICAgICAgIGF1dG8gbmV3Q2hpbGQg
PSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShyZXNvbHZlZFZhbHVlLCBjb21iaW5lZFVuaXRUeXBlKSk7Ci0KLSAgICAgICAgbV9jaGls
ZHJlbi5jbGVhcigpOwotICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKG5ld0NoaWxk
KSk7Ci0gICAgfQotfQotCi0vLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00
LyNzaW1wbGlmeS1hLWNhbGN1bGF0aW9uLXRyZWUKLQotUmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+JiYgcm9vdE5vZGUpCi17Ci0gICAgcmV0dXJuIHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1vdmUo
cm9vdE5vZGUpLCAwKTsKLX0KLQotUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OnNpbXBsaWZ5UmVjdXJzaXZlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiYgcm9vdE5vZGUsIGludCBkZXB0aCkKLXsKLSAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlLmdldCgpKTsKLSAgICAgICAgCi0gICAgICAg
IGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGF1dG8gY2hpbGQgPSBjaGlsZHJlbltpXS5jb3B5UmVmKCk7Ci0gICAgICAgICAgICBhdXRvIG5l
d05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGggKyAxKTsKLSAg
ICAgICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9IGNoaWxkcmVuW2ldLnB0cigpKQotICAgICAg
ICAgICAgICAgIGNoaWxkcmVuW2ldID0gV1RGTW92ZShuZXdOb2RlKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBh
dXRvJiBuZWdhdGVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlLmdl
dCgpKTsKLSAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hpbGQgPSBuZWdhdGVO
b2RlLmNoaWxkKCk7Ci0gICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdU
Rk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSAm
bmVnYXRlTm9kZS5jaGlsZCgpKQotICAgICAgICAgICAgbmVnYXRlTm9kZS5zZXRDaGlsZChXVEZN
b3ZlKG5ld05vZGUpKTsKLSAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290
Tm9kZSkpIHsKLSAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9IGRvd25jYXN0PENTU0NhbGNJbnZl
cnROb2RlPihyb290Tm9kZS5nZXQoKSk7Ci0gICAgICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IGNoaWxkID0gaW52ZXJ0Tm9kZS5jaGlsZCgpOwotICAgICAgICBhdXRvIG5ld05vZGUgPSBz
aW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGggKyAxKTsKLSAgICAgICAgaWYg
KG5ld05vZGUucHRyKCkgIT0gJmludmVydE5vZGUuY2hpbGQoKSkKLSAgICAgICAgICAgIGludmVy
dE5vZGUuc2V0Q2hpbGQoV1RGTW92ZShuZXdOb2RlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNp
bXBsaWZ5Tm9kZShXVEZNb3ZlKHJvb3ROb2RlKSwgZGVwdGgpOwotfQotCi1SZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnlOb2RlKFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUsIGludCBkZXB0aCkKLXsKLSAgICBpZiAoaXM8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIC8vIElmIHJv
b3QgaXMgYSBwZXJjZW50YWdlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBhZ2FpbnN0IGFub3RoZXIg
dmFsdWUsIGFuZCB0aGVyZSBpcyBlbm91Z2ggaW5mb3JtYXRpb24KLSAgICAgICAgLy8gYXZhaWxh
YmxlIHRvIHJlc29sdmUgaXQsIGRvIHNvLCBhbmQgZXhwcmVzcyB0aGUgcmVzdWx0aW5nIG51bWVy
aWMgdmFsdWUgaW4gdGhlIGFwcHJvcHJpYXRlIGNhbm9uaWNhbAotICAgICAgICAvLyB1bml0LiBS
ZXR1cm4gdGhlIHZhbHVlLgotCi0gICAgICAgIC8vIElmIHJvb3QgaXMgYSBkaW1lbnNpb24gdGhh
dCBpcyBub3QgZXhwcmVzc2VkIGluIGl0cyBjYW5vbmljYWwgdW5pdCwgYW5kIHRoZXJlIGlzIGVu
b3VnaCBpbmZvcm1hdGlvbgotICAgICAgICAvLyBhdmFpbGFibGUgdG8gY29udmVydCBpdCB0byB0
aGUgY2Fub25pY2FsIHVuaXQsIGRvIHNvLCBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4KLSAgICAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICBwcmltaXRpdmVWYWx1ZU5vZGUuY2Fub25p
Y2FsaXplVW5pdCgpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQot
Ci0gICAgLy8gSWYgcm9vdCBpcyBhbiBvcGVyYXRvciBub2RlIHRoYXTigJlzIG5vdCBvbmUgb2Yg
dGhlIGNhbGMtb3BlcmF0b3Igbm9kZXMsIGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBudW1l
cmljIHZhbHVlcwotICAgIC8vIHdpdGggZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNvbXB1dGVkIHRo
ZSBvcGVyYXRpb24gcm9vdCByZXByZXNlbnRzLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5n
IHJvb3TigJlzIG9wZXJhdGlvbgotICAgIC8vIHVzaW5nIGl0cyBjaGlsZHJlbiwgZXhwcmVzc2Vk
IGluIHRoZSByZXN1bHTigJlzIGNhbm9uaWNhbCB1bml0LgotICAgIGlmIChpczxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNhbGNPcGVyYXRpb25Ob2Rl
ID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlLmdldCgpKTsKLSAgICAg
ICAgLy8gRG9uJ3Qgc2ltcGxpZnkgYXQgdGhlIHJvb3QsIG90aGVyd2lzZSB3ZSBsb3NlIHRyYWNr
IG9mIHRoZSBvcGVyYXRpb24gZm9yIHNlcmlhbGl6YXRpb24uCi0gICAgICAgIGlmIChjYWxjT3Bl
cmF0aW9uTm9kZS5jaGlsZHJlbigpLnNpemUoKSA9PSAxICYmIGRlcHRoKQotICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKVswXSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9kZSgpKSB7Ci0gICAg
ICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5ob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNP
cGVyYXRvcjo6QWRkKTsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJpbmVDaGls
ZHJlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzQ2Fs
Y1Byb2R1Y3ROb2RlKCkpIHsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmhvaXN0Q2hp
bGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7Ci0gICAgICAgICAgICBj
YWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4oKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzTWluT3JNYXhOb2RlKCkpCi0gICAgICAg
ICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4oKTsKLQotICAgICAgICAvLyBJ
ZiBvbmx5IG9uZSBjaGlsZCByZW1haW5zLCByZXR1cm4gdGhlIGNoaWxkIChleGNlcHQgYXQgdGhl
IHJvb3QpLgotICAgICAgICBhdXRvIHNob3VsZENvbWJpbmVQYXJlbnRXaXRoT25seUNoaWxkID0g
W10oY29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUmIHBhcmVudCwgaW50IGRlcHRoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKCkuc2l6ZSgpICE9IDEpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBBbHdheXMgc2ltcGxp
ZnkgYmVsb3cgdGhlIHJvb3QuCi0gICAgICAgICAgICBpZiAoZGVwdGgpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIC8vIEF0IHRoZSByb290LCBwcmVzZXJ2ZSB0
aGUgcm9vdCBmdW5jdGlvbiBieSBvbmx5IG1lcmdpbmcgbm9kZXMgd2l0aCB0aGUgc2FtZSBmdW5j
dGlvbi4KLSAgICAgICAgICAgIGF1dG8mIGNoaWxkID0gcGFyZW50LmNoaWxkcmVuKCkuZmlyc3Qo
KTsKLSAgICAgICAgICAgIGlmICghaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGF1dG8gcGFyZW50RnVu
Y3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihwYXJlbnQuY2FsY09wZXJhdG9yKCkpOwotICAg
ICAgICAgICAgYXV0byBjaGlsZEZ1bmN0aW9uID0gZnVuY3Rpb25Gcm9tT3BlcmF0b3IoZG93bmNh
c3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2hpbGRGdW5jdGlvbiA9PSBwYXJlbnRGdW5jdGlvbjsKLSAgICAg
ICAgfTsKLQotICAgICAgICBpZiAoc2hvdWxkQ29tYmluZVBhcmVudFdpdGhPbmx5Q2hpbGQoY2Fs
Y09wZXJhdGlvbk5vZGUsIGRlcHRoKSkKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNhbGNP
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCkuZmlyc3QoKSk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1v
dmUocm9vdE5vZGUpOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4ocm9v
dE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9IGRvd25jYXN0PENTU0NhbGNOZWdh
dGVOb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKLSAgICAgICAgLy8gSWYgcm9vdOKAmXMg
Y2hpbGQgaXMgYSBudW1lcmljIHZhbHVlLCByZXR1cm4gYW4gZXF1aXZhbGVudCBudW1lcmljIHZh
bHVlLCBidXQgd2l0aCB0aGUgdmFsdWUgbmVnYXRlZCAoMCAtIHZhbHVlKS4KLSAgICAgICAgaWYg
KGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkgJiYgZG93bmNhc3Q8Q1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pc051bWVyaWNWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUp
Lm5lZ2F0ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYSBOZWdhdGUgbm9kZSwgcmV0
dXJuIHRoZSBjaGlsZOKAmXMgY2hpbGQuCi0gICAgICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9k
ZT4oY2hpbGROb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYWxjTmVnYXRl
Tm9kZT4oY2hpbGROb2RlKS5jaGlsZCgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFdURk1v
dmUocm9vdE5vZGUpOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4ocm9v
dE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9IGRvd25jYXN0PENTU0NhbGNJbnZl
cnROb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKLSAgICAgICAgLy8gSWYgcm9vdOKAmXMg
Y2hpbGQgaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRhZ2Ugb3IgZGltZW5zaW9uKSByZXR1cm4g
dGhlIHJlY2lwcm9jYWwgb2YgdGhlIGNoaWxk4oCZcyB2YWx1ZS4KLSAgICAgICAgaWYgKGlzPENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pc051bWVyaWNWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpLmludmVy
dCgpOwotICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGFuIEludmVydCBub2RlLCByZXR1cm4gdGhlIGNoaWxk
4oCZcyBjaGlsZC4KLSAgICAgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihjaGlsZE5vZGUp
KQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihjaGlsZE5v
ZGUpLmNoaWxkKCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOwotICAgIH0K
LQotICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKLX0KLQotQ1NTVW5pdFR5cGUgQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OnByaW1pdGl2ZVR5cGUoKSBjb25zdAotewotICAgIGF1dG8gdW5pdENh
dGVnb3J5ID0gY2F0ZWdvcnkoKTsKLSAgICBzd2l0Y2ggKHVuaXRDYXRlZ29yeSkgewotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgQVNTRVJUKGNo
aWxkLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcik7Ci0jZW5kaWYK
LSAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOwotCi0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OiB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Ci0KLSAg
ICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpIHsKLSAgICAgICAgICAgIGlmIChtX2No
aWxkcmVuWzBdLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlblsxXS0+cHJpbWl0aXZlVHlwZSgpOwotICAg
ICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMV0tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuWzBdLT5wcmlt
aXRpdmVUeXBlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ1NTVW5pdFR5cGUgZmlyc3RUeXBlID0g
bV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogbV9jaGlsZHJlbikgewotICAgICAgICAgICAgaWYgKGZpcnN0VHlwZSAhPSBjaGlsZC0+cHJp
bWl0aXZlVHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV047Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZpcnN0VHlwZTsKLSAgICB9Ci0KLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OkFuZ2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICAgICAgaWYgKG1fY2hp
bGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlbi5maXJzdCgp
LT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIHJldHVybiBjYW5vbmljYWxVbml0VHlwZUZvckNh
bGN1bGF0aW9uQ2F0ZWdvcnkodW5pdENhdGVnb3J5KTsKLQotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudExlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAgICAg
ICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLSAgICB9Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLX0KLQot
c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0gICAgbm9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2NoaWxkcmVuLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikg
ewotICAgICAgICBhdXRvIG5vZGUgPSBjaGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVy
c2lvbkRhdGEpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobm9kZSkpOwotICAgIH0K
LQotICAgIC8vIFJldmVyc2UgdGhlIG9wZXJhdGlvbiB3ZSBkaWQgd2hlbiBjcmVhdGluZyB0aGlz
IG5vZGUsIHJlY292ZXJpbmcgYSBzdWl0YWJsZSBkZXN0aW5hdGlvbiBjYXRlZ29yeSBmb3Igb3Ro
ZXJ3aXNlLWFtYmlndW91cyBtaW4vbWF4L2NsYW1wIG5vZGVzLgotICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGNhdGVnb3J5IGlzIHJlYWxseSBvbmx5IGdvb2QgZW5vdWdoIGZvciB0aGF0IHB1cnBvc2Ug
YW5kIGlzIG5vdCBhY2N1cmF0ZSBmb3Igb3RoZXIgbm9kZSB0eXBlczsgd2UgY291bGQgdXNlIGEg
Ym9vbGVhbiBpbnN0ZWFkLgotICAgIGF1dG8gZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnRMZW5ndGgpCi0gICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0gICAgZWxzZSBpZiAoY2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyKQotICAgICAgICBkZXN0aW5hdGlvbkNhdGVn
b3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOwotCi0gICAgcmV0dXJuIG1ha2VVbmlx
dWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUobm9kZXMpLCBtX29wZXJhdG9yLCBk
ZXN0aW5hdGlvbkNhdGVnb3J5KTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpk
b3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QKLXsKLSAgICBib29sIGFsbG93
TnVtYmVycyA9IGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk7Ci0KLSAg
ICByZXR1cm4gZXZhbHVhdGUobV9jaGlsZHJlbi5tYXAoWyZdIChhdXRvJiBjaGlsZCkgewotICAg
ICAgICBDU1NVbml0VHlwZSBjaGlsZFR5cGUgPSB1bml0VHlwZTsKLSAgICAgICAgaWYgKGFsbG93
TnVtYmVycyAmJiB1bml0VHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUiAmJiBjaGlsZC0+
cHJpbWl0aXZlVHlwZSgpID09IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAg
Y2hpbGRUeXBlID0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7Ci0gICAgICAgIHJldHVybiBjaGls
ZC0+ZG91YmxlVmFsdWUoY2hpbGRUeXBlKTsKLSAgICB9KSk7Ci19Ci0KLWRvdWJsZSBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHJldHVybiBldmFsdWF0ZShtX2No
aWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7Ci0gICAgICAgIHJldHVybiBjaGlsZC0+Y29t
cHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKLSAgICB9KSk7Ci19Ci0KLXZvaWQgQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGNo
aWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlv
bmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1By
b3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hp
bGRyZW4pCi0gICAgICAgIGNoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXModmFsdWVzKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRD
U1NUZXh0KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgU3RyaW5nQnVpbGRlciYg
YnVpbGRlcikKLXsKLSAgICBhdXRvIHNob3VsZE91dHB1dEVuY2xvc2luZ0NhbGMgPSBbXShjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJvb3ROb2RlKSB7Ci0gICAgICAgIGlmIChpczxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgICAgICBhdXRvJiBvcGVyYXRp
b25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKTsKLSAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5vZGUoKSB8fCBvcGVyYXRpb25O
b2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICFpczxD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZSk7Ci0gICAgfTsKLSAgICAKLSAgICBi
b29sIG91dHB1dENhbGMgPSBzaG91bGRPdXRwdXRFbmNsb3NpbmdDYWxjKG5vZGUpOwotICAgIGlm
IChvdXRwdXRDYWxjKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiY2FsYygiKTsKLQotICAgIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShub2RlLCBidWlsZGVyLCBHcm91cGluZ1BhcmVuczo6T21pdCk7
Ci0KLSAgICBpZiAob3V0cHV0Q2FsYykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKLX0K
LQotc3RhdGljIGNvbnN0IGNoYXIqIGZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3IoQ2FsY09wZXJh
dG9yIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRk
OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6TXVsdGlwbHk6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6TWluOiByZXR1cm4gIm1pbigiOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6IHJl
dHVybiAibWF4KCI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiByZXR1cm4gImNsYW1w
KCI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAiIjsKLX0KLQotLy8gPGh0dHBzOi8vZHJhZnRz
LmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NlcmlhbGl6ZS1hLWNhbGN1bGF0aW9uLXRyZWU+Ci12
b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHRSZWN1cnNpdmUoY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBHcm91cGlu
Z1BhcmVucyBwYXJlbnMpCi17Ci0gICAgLy8gSWYgcm9vdCBpcyBhIG51bWVyaWMgdmFsdWUsIG9y
IGEgbm9uLW1hdGggZnVuY3Rpb24sIHNlcmlhbGl6ZSByb290IHBlciB0aGUgbm9ybWFsIHJ1bGVz
IGZvciBpdCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgaWYgKGlzPENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU+KG5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIHZhbHVlTm9kZSA9IGRvd25jYXN0
PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZCh2YWx1ZU5vZGUuY3VzdG9tQ1NTVGV4dCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obm9kZSkpIHsKLSAgICAgICAgYXV0byYg
b3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihub2RlKTsKLQot
ICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkpIHsKLSAgICAgICAgICAg
IC8vIElmIHJvb3QgaXMgYSBTdW0gbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNv
bnRhaW5pbmcgIigiLgotICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6
SW5jbHVkZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKCcpOwotCi0gICAgICAg
ICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBjaGlsZHJlbi4KLSAgICAgICAg
ICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwotICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAvLyBTZXJpYWxpemUgcm9v
dOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4KLSAgICAgICAgICAgIGJ1aWxk
Q1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyKTsKLQotICAgICAgICAg
ICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhlIGZpcnN0OgotICAgICAgICAg
ICAgLy8gSWYgY2hpbGQgaXMgYSBOZWdhdGUgbm9kZSwgYXBwZW5kICIgLSAiIHRvIHMsIHRoZW4g
c2VyaWFsaXplIHRoZSBOZWdhdGXigJlzIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBz
LgotICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBuZWdhdGl2ZSBudW1lcmljIHZhbHVlLCBh
cHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIG5lZ2F0aW9uIG9mIGNoaWxkIGFz
IG5vcm1hbCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIC8vIE90aGVy
d2lzZSwgYXBwZW5kICIgKyAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIGNoaWxkIGFuZCBhcHBlbmQg
dGhlIHJlc3VsdCB0byBzLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNo
aWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBjaGls
ZHJlbltpXTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KGNoaWxk
KSkgewotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC0gIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShkb3duY2FzdDxDU1NDYWxjTmVnYXRl
Tm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkKCksIGJ1aWxkZXIpOwotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkKSkgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZU5vZGUgPSBkb3duY2FzdDxDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZU5vZGUuaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC0gIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBTZXJpYWxpemUgdGhlIG5lZ2F0aW9uIG9mIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB1bml0VHlwZSA9IHByaW1pdGl2ZVZhbHVlTm9kZS52YWx1ZSgpLnByaW1pdGl2ZVR5
cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKDAgLSBwcmltaXRp
dmVWYWx1ZU5vZGUudmFsdWUoKS5kb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6dW5p
dFR5cGVTdHJpbmcodW5pdFR5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgKyAiKTsKLSAgICAgICAgICAg
ICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGQsIGJ1aWxkZXIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQot
ICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvcGVyYXRpb25Ob2RlLmlzQ2FsY1By
b2R1Y3ROb2RlKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHJvb3QgaXMgYSBQcm9kdWN0IG5vZGUs
IGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWluaW5nICIoIi4KLSAgICAgICAgICAg
IGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJygnKTsKLQotICAgICAgICAgICAgLy8gU2ltcGxpZmljYXRpb24gYWxy
ZWFkeSBzb3J0ZWQgY2hpbGRyZW4uCi0gICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJh
dGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkp
OwotICAgICAgICAgICAgLy8gU2VyaWFsaXplIHJvb3TigJlzIGZpcnN0IGNoaWxkLCBhbmQgYXBw
ZW5kIGl0IHRvIHMuCi0gICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW4u
Zmlyc3QoKSwgYnVpbGRlcik7Ci0KLSAgICAgICAgICAgIC8vIEZvciBlYWNoIGNoaWxkIG9mIHJv
b3QgYmV5b25kIHRoZSBmaXJzdDoKLSAgICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGFuIEludmVy
dCBub2RlLCBhcHBlbmQgIiAvICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIEludmVydOKAmXMg
Y2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAgICAgICAgICAvLyBPdGhlcndp
c2UsIGFwcGVuZCAiICogIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSBjaGlsZCBhbmQgYXBwZW5kIHRo
ZSByZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjaGls
ZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkID0gY2hpbGRy
ZW5baV07Ci0gICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihjaGlsZCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAvICIpOwotICAgICAgICAg
ICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5v
ZGU+KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiAqICIpOwotICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGls
ZCwgYnVpbGRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwYXJlbnMgPT0g
R3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyknKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHJv
b3QgaXMgYW55dGhpbmcgYnV0IGEgU3VtLCBOZWdhdGUsIFByb2R1Y3QsIG9yIEludmVydCBub2Rl
LCBzZXJpYWxpemUgYSBtYXRoIGZ1bmN0aW9uIGZvciB0aGUKLSAgICAgICAgLy8gZnVuY3Rpb24g
Y29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSB0eXBlLCB0cmVhdGluZyB0aGUgbm9kZeKAmXMgY2hp
bGRyZW4gYXMgdGhlIGZ1bmN0aW9u4oCZcwotICAgICAgICAvLyBjb21tYS1zZXBhcmF0ZWQgY2Fs
Y3VsYXRpb24gYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3Iob3BlcmF0aW9uTm9kZS5jYWxjT3Bl
cmF0b3IoKSkpOwotCi0gICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGls
ZHJlbigpOwotICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgYnVpbGRD
U1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0KCksIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5z
OjpPbWl0KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICAg
ICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuW2ldLCBidWlsZGVyLCBHcm91cGluZ1Bh
cmVuczo6T21pdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcpJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzPENTU0NhbGNO
ZWdhdGVOb2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiBuZWdhdGVOb2RlID0gZG93bmNhc3Q8
Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpOwotICAgICAgICAvLyBJZiByb290IGlzIGEgTmVnYXRl
IG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWluaW5nICIoLTEgKiAiLgot
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiLTEgKiIpOwotICAgICAgICBidWlsZENTU1RleHRSZWN1
cnNpdmUobmVnYXRlTm9kZS5jaGlsZCgpLCBidWlsZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KG5vZGUpKSB7Ci0gICAgICAg
IGF1dG8mIGludmVydE5vZGUgPSBkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4obm9kZSk7Ci0g
ICAgICAgIC8vIElmIHJvb3QgaXMgYW4gSW52ZXJ0IG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGlu
aXRpYWxseSBjb250YWluaW5nICIoMSAvICIuCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIxIC8g
Iik7Ci0gICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShpbnZlcnROb2RlLmNoaWxkKCksIGJ1
aWxkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJjYWxjIG9w
ZXJhdGlvbiAiIDw8IG1fb3BlcmF0b3IgPDwgIiAoY2F0ZWdvcnk6ICIgPDwgY2F0ZWdvcnkoKSA8
PCAiLCB0eXBlICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsKLQotICAgIFRleHRTdHJlYW06
Okdyb3VwU2NvcGUgc2NvcGUodHMpOwotICAgIHRzIDw8IG1fY2hpbGRyZW4uc2l6ZSgpIDw8ICIg
Y2hpbGRyZW4iOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm5vZGUiLCBjaGlsZCk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGV4cCkgY29uc3QKLXsK
LSAgICBpZiAodHlwZSgpICE9IGV4cC50eXBlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0
IENTU0NhbGNPcGVyYXRpb25Ob2RlJj4oZXhwKTsKLQotICAgIGlmIChtX2NoaWxkcmVuLnNpemUo
KSAhPSBvdGhlci5tX2NoaWxkcmVuLnNpemUoKSB8fCBtX29wZXJhdG9yICE9IG90aGVyLm1fb3Bl
cmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWNvbXBhcmVDU1NWYWx1
ZShtX2NoaWxkcmVuW2ldLCBvdGhlci5tX2NoaWxkcmVuW2ldKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3AsIGNvbnN0IFZlY3Rv
cjxkb3VibGU+JiBjaGlsZHJlbikKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkFkZDogewotICAgICAgICBkb3VibGUgc3VtID0gMDsKLSAgICAgICAgZm9yIChh
dXRvJiBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAgICAgc3VtICs9IGNoaWxkOwotICAgICAg
ICByZXR1cm4gc3VtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0g
ICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIHJldHVybiBjaGls
ZHJlblswXSAtIGNoaWxkcmVuWzFdOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTog
ewotICAgICAgICBkb3VibGUgcHJvZHVjdCA9IDE7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbikKLSAgICAgICAgICAgIHByb2R1Y3QgKj0gY2hpbGQ7Ci0gICAgICAgIHJldHVy
biBwcm9kdWN0OwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAg
ICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwgY2hpbGRyZW4uc2l6ZSgpID09IDIpOwot
ICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgcmV0dXJuIGNo
aWxkcmVuWzBdIC8gY2hpbGRyZW5bMV07Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogewot
ICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGRvdWJsZSBtaW5p
bXVtID0gY2hpbGRyZW5bMF07Ci0gICAgICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKQot
ICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmltdW0sIGNoaWxkKTsKLSAgICAgICAg
cmV0dXJuIG1pbmltdW07Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6IHsKLSAg
ICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICBkb3VibGUgbWF4aW11
bSA9IGNoaWxkcmVuWzBdOwotICAgICAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJlbikKLSAg
ICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBjaGlsZCk7Ci0gICAgICAgIHJl
dHVybiBtYXhpbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHsKLSAg
ICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSAhPSAzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGRvdWJsZSBtaW4g
PSBjaGlsZHJlblswXTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gY2hpbGRyZW5bMV07Ci0gICAg
ICAgIGRvdWJsZSBtYXggPSBjaGlsZHJlblsyXTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KG1p
biwgc3RkOjptaW4odmFsdWUsIG1heCkpOwotICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotY2xhc3MgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotICAgICAgICA6
IG1fZGVzdGluYXRpb25DYXRlZ29yeShkZXN0aW5hdGlvbkNhdGVnb3J5KQotICAgIHsgfQotCi0g
ICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcGFyc2VDYWxjKENTU1BhcnNlclRva2Vu
UmFuZ2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24pOwotICAgIAotcHJpdmF0ZToKLSAgICBjaGFyIG9w
ZXJhdG9yVmFsdWUoY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuKQotICAgIHsKLSAgICAgICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbikKLSAgICAgICAgICAgIHJldHVybiB0
b2tlbi5kZWxpbWl0ZXIoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCBw
YXJzZVZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYpOwotICAgIGJvb2wgcGFyc2VWYWx1ZVRlcm0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGlu
dCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKLSAgICBib29sIHBhcnNl
Q2FsY0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlELCBpbnQgZGVwdGgs
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0gICAgYm9vbCBwYXJzZUNhbGNTdW0o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mKTsKLSAgICBib29sIHBhcnNlQ2FsY1Byb2R1Y3QoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKLSAgICBib29sIHBh
cnNlQ2FsY1ZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0KLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1fZGVzdGlu
YXRpb25DYXRlZ29yeTsKLX07Ci0KLS8vIDxodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZh
bHVlcy00LyNjYWxjLXN5bnRheD46Ci0vLyA8Y2FsYygpPiAgPSBjYWxjKCA8Y2FsYy1zdW0+ICkK
LS8vIDxtaW4oKT4gICA9IG1pbiggPGNhbGMtc3VtPiMgKQotLy8gPG1heCgpPiAgID0gbWF4KCA8
Y2FsYy1zdW0+IyApCi0vLyA8Y2xhbXAoKT4gPSBjbGFtcCggPGNhbGMtc3VtPiN7M30gKQotLy8g
PHNpbigpPiAgID0gc2luKCA8Y2FsYy1zdW0+ICkKLS8vIDxjb3MoKT4gICA9IGNvcyggPGNhbGMt
c3VtPiApCi0vLyA8dGFuKCk+ICAgPSB0YW4oIDxjYWxjLXN1bT4gKQotLy8gPGFzaW4oKT4gID0g
YXNpbiggPGNhbGMtc3VtPiApCi0vLyA8YWNvcygpPiAgPSBhY29zKCA8Y2FsYy1zdW0+ICkKLS8v
IDxhdGFuKCk+ICA9IGF0YW4oIDxjYWxjLXN1bT4gKQotLy8gPGF0YW4yKCk+ID0gYXRhbjIoIDxj
YWxjLXN1bT4sIDxjYWxjLXN1bT4gKQotLy8gPHBvdygpPiAgID0gcG93KCA8Y2FsYy1zdW0+LCA8
Y2FsYy1zdW0+ICkKLS8vIDxzcXJ0KCk+ICA9IHNxcnQoIDxjYWxjLXN1bT4gKQotLy8gPGh5cG90
KCk+ID0gaHlwb3QoIDxjYWxjLXN1bT4jICkKLS8vIDxjYWxjLXN1bT4gPSA8Y2FsYy1wcm9kdWN0
PiBbIFsgJysnIHwgJy0nIF0gPGNhbGMtcHJvZHVjdD4gXSoKLS8vIDxjYWxjLXByb2R1Y3Q+ID0g
PGNhbGMtdmFsdWU+IFsgWyAnKicgfCAnLycgXSA8Y2FsYy12YWx1ZT4gXSoKLS8vIDxjYWxjLXZh
bHVlPiA9IDxudW1iZXI+IHwgPGRpbWVuc2lvbj4gfCA8cGVyY2VudGFnZT4gfCAoIDxjYWxjLXN1
bT4gKQotUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
UGFyc2VyOjpwYXJzZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tlbnMsIENTU1ZhbHVlSUQg
ZnVuY3Rpb24pCi17Ci0gICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0KLSAgICBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByZXN1bHQ7Ci0gICAgYm9vbCBvayA9IHBhcnNlQ2Fs
Y0Z1bmN0aW9uKHRva2VucywgZnVuY3Rpb24sIDAsIHJlc3VsdCk7Ci0gICAgaWYgKCFvayB8fCAh
dG9rZW5zLmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKENhbGMs
IHN0cmVhbSA8PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgIiA8PCBw
cmV0dHlQcmludE5vZGUoKnJlc3VsdCkpOwotCi0gICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OnNpbXBsaWZ5KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VDYWxjIC0gYWZ0ZXIgc2ltcGxpZmljYXRpb24gIiA8PCBwcmV0dHlQcmludE5vZGUoKnJlc3Vs
dCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZW51bSBQYXJzZVN0YXRlIHsKLSAgICBP
SywKLSAgICBUb29EZWVwLAotICAgIE5vTW9yZVRva2VucwotfTsKLQotc3RhdGljIFBhcnNlU3Rh
dGUgY2hlY2tEZXB0aEFuZEluZGV4KGludCBkZXB0aCwgQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tl
bnMpCi17Ci0gICAgaWYgKHRva2Vucy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gTm9Nb3JlVG9r
ZW5zOwotICAgIGlmIChkZXB0aCA+IG1heEV4cHJlc3Npb25EZXB0aCkgewotICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJEZXB0aCAiIDw8IGRlcHRoIDw8ICIgZXhjZWVk
ZWQgbWF4RXhwcmVzc2lvbkRlcHRoICIgPDwgbWF4RXhwcmVzc2lvbkRlcHRoKTsKLSAgICAgICAg
cmV0dXJuIFRvb0RlZXA7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotYm9vbCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlvbklELCBpbnQgZGVwdGgsIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRl
eChkZXB0aCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
ImFyZ3VtZW50cyIgcmVmZXJzIHRvIHRoaW5ncyBiZXR3ZWVuIGNvbW1hcy4KLSAgICB1bnNpZ25l
ZCBtaW5Bcmd1bWVudENvdW50ID0gMTsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gbWF4QXJndW1l
bnRDb3VudDsKLQotICAgIHN3aXRjaCAoZnVuY3Rpb25JRCkgewotICAgIGNhc2UgQ1NTVmFsdWVN
aW46Ci0gICAgY2FzZSBDU1NWYWx1ZU1heDoKLSAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IHN0
ZDo6bnVsbG9wdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgotICAg
ICAgICBtaW5Bcmd1bWVudENvdW50ID0gMzsKLSAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IDM7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgotICAgICAgICBtYXhBcmd1
bWVudENvdW50ID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgLy8gVE9ETzogY2xhbXAsIHNpbiwg
Y29zLCB0YW4sIGFzaW4sIGFjb3MsIGF0YW4sIGF0YW4yLCBwb3csIHNxcnQsIGh5cG90LgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAgICBib29sIHJlcXVpcmVDb21tYSA9IGZhbHNl
OwotICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQgPSAwOwotICAgIHdoaWxlICghdG9rZW5zLmF0
RW5kKCkpIHsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIGlm
IChyZXF1aXJlQ29tbWEpIHsKLSAgICAgICAgICAgIGlmICh0b2tlbnMuY29uc3VtZSgpLnR5cGUo
KSAhPSBDb21tYVRva2VuKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVm
UHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbm9kZTsKLSAgICAgICAgaWYgKCFwYXJzZUNhbGNT
dW0odG9rZW5zLCBkZXB0aCwgbm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgKythcmd1bWVudENvdW50OwotICAgICAgICBpZiAobWF4QXJndW1lbnRDb3VudCAmJiBh
cmd1bWVudENvdW50ID4gbWF4QXJndW1lbnRDb3VudC52YWx1ZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIG5vZGVzLmFwcGVuZChub2RlLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgICAgICByZXF1aXJlQ29tbWEgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IG1pbkFyZ3VtZW50Q291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN3aXRjaCAoZnVuY3Rpb25JRCkgewotICAgIGNhc2UgQ1NTVmFsdWVNaW46Ci0gICAgICAg
IHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2Fs
Y09wZXJhdG9yOjpNaW4sIFdURk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTWF4OgotICAgICAgICByZXN1bHQgPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6
TWF4LCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgotICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6Q2xhbXAsIFdU
Rk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoKLSAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKLSAgICAg
ICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKG5vZGVz
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIC8vIFRPRE86IGNsYW1wLCBzaW4sIGNvcywgdGFuLCBh
c2luLCBhY29zLCBhdGFuLCBhdGFuMiwgcG93LCBzcXJ0LCBoeXBvdAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAhIXJlc3VsdDsKLX0KLQotYm9vbCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgdG9rZW5zLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQotewotICAg
IENTU1BhcnNlclRva2VuIHRva2VuID0gdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7Ci0gICAgaWYgKCEodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8IHRva2VuLnR5cGUo
KSA9PSBQZXJjZW50YWdlVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGF1dG8gdHlwZSA9IHRva2VuLnVuaXRU
eXBlKCk7Ci0gICAgaWYgKGNhbGNVbml0Q2F0ZWdvcnkodHlwZSkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXN1bHQgPSBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgdHlwZSkpOwotICAgIAotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjVmFsdWUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwg
dG9rZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmaW5kRnVu
Y3Rpb25JZCA9IFsmXShDU1NWYWx1ZUlEJiBmdW5jdGlvbklkKSB7Ci0gICAgICAgIGlmICh0b2tl
bnMucGVlaygpLnR5cGUoKSA9PSBMZWZ0UGFyZW50aGVzaXNUb2tlbikgewotICAgICAgICAgICAg
ZnVuY3Rpb25JZCA9IENTU1ZhbHVlQ2FsYzsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb25JZCA9IHRva2Vucy5wZWVrKCkuZnVuY3Rpb25JZCgp
OwotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihmdW5jdGlvbklk
KTsKLSAgICB9OwotCi0gICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklkOwotICAgIGlmIChmaW5kRnVu
Y3Rpb25JZChmdW5jdGlvbklkKSkgewotICAgICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGlubmVy
UmFuZ2UgPSB0b2tlbnMuY29uc3VtZUJsb2NrKCk7Ci0gICAgICAgIHRva2Vucy5jb25zdW1lV2hp
dGVzcGFjZSgpOwotICAgICAgICBpbm5lclJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAg
ICAgIHJldHVybiBwYXJzZUNhbGNGdW5jdGlvbihpbm5lclJhbmdlLCBmdW5jdGlvbklkLCBkZXB0
aCArIDEsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnNlVmFsdWUodG9rZW5zLCBy
ZXN1bHQpOwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxj
UHJvZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFuZElu
ZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVlOwotICAgIGlmICghcGFyc2VD
YWxjVmFsdWUodG9rZW5zLCBkZXB0aCwgZmlyc3RWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAg
ICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7Ci0gICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0
ZXIgPSBvcGVyYXRvclZhbHVlKHRva2Vucy5wZWVrKCkpOwotICAgICAgICBpZiAob3BlcmF0b3JD
aGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpNdWx0aXBseSkgJiYg
b3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpEaXZp
ZGUpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRva2Vucy5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4gbmV4dFZhbHVlOwotICAgICAgICBpZiAoIXBhcnNlQ2FsY1ZhbHVlKHRva2VucywgZGVw
dGgsIG5leHRWYWx1ZSkgfHwgIW5leHRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2Fs
Y09wZXJhdG9yOjpEaXZpZGUpKQotICAgICAgICAgICAgbmV4dFZhbHVlID0gQ1NTQ2FsY0ludmVy
dE5vZGU6OmNyZWF0ZShuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAgICAgaWYg
KGZpcnN0VmFsdWUpCi0gICAgICAgICAgICBub2Rlcy5hcHBlbmQoZmlyc3RWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKLQotICAgICAgICBub2Rlcy5hcHBlbmQobmV4dFZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIH0KLQotICAgIGlmIChub2Rlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVz
dWx0ID0gV1RGTW92ZShmaXJzdFZhbHVlKTsKLSAgICAgICAgcmV0dXJuICEhcmVzdWx0OwotICAg
IH0KLQotICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdU
Rk1vdmUobm9kZXMpKTsKLSAgICByZXR1cm4gISFyZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNTdW0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9r
ZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17
Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAhPSBPSykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZmly
c3RWYWx1ZTsKLSAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwgZmlyc3RW
YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7Ci0g
ICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0ZXIgPSBvcGVyYXRvclZhbHVlKHRva2Vucy5wZWVr
KCkpOwotICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4o
Q2FsY09wZXJhdG9yOjpBZGQpICYmIG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNo
YXI+KENhbGNPcGVyYXRvcjo6U3VidHJhY3QpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgaWYgKCgmdG9rZW5zLnBlZWsoKSAtIDEpLT50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCsgMnB4KSBpcyBpbnZhbGlkCi0K
LSAgICAgICAgdG9rZW5zLmNvbnN1bWUoKTsKLSAgICAgICAgaWYgKHRva2Vucy5wZWVrKCkudHlw
ZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2Fs
YygxcHggKzJweCkgaXMgaW52YWxpZAotCi0gICAgICAgIHRva2Vucy5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwotCi0gICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5l
eHRWYWx1ZTsKLSAgICAgICAgaWYgKCFwYXJzZUNhbGNQcm9kdWN0KHRva2VucywgZGVwdGgsIG5l
eHRWYWx1ZSkgfHwgIW5leHRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJh
dG9yOjpTdWJ0cmFjdCkpCi0gICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjTmVnYXRlTm9k
ZTo6Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgICAgICBpZiAoZmly
c3RWYWx1ZSkKLSAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpOwotCi0gICAgICAgIG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHQg
PSBXVEZNb3ZlKGZpcnN0VmFsdWUpOwotICAgICAgICByZXR1cm4gISFyZXN1bHQ7Ci0gICAgfQot
Ci0gICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKG5v
ZGVzKSk7Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlQmxlbmRIYWxmKGNvbnN0IExlbmd0aCYgbGVuZ3Ro
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0IHByb2dyZXNzKQotewotICAgIHJldHVy
biBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvcjo6TXVsdGlwbHksIGNy
ZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKSwKLSAgICAgICAgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3MsIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKSkpOwotfQotCi1zdGF0aWMgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiBjcmVhdGVDU1MoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+PiYgbm9kZXMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBWZWN0
b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKLSAgICB2YWx1ZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShub2Rlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZSA6IG5v
ZGVzKSB7Ci0gICAgICAgIGF1dG8gY3NzTm9kZSA9IGNyZWF0ZUNTUygqbm9kZSwgc3R5bGUpOwot
ICAgICAgICBpZiAoIWNzc05vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdmFs
dWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gdmFsdWVzOwotfQotCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gY3JlYXRlQ1NTKGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQotewotICAgIHN3aXRjaCAobm9kZS50eXBlKCkpIHsKLSAgICBjYXNlIENh
bGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcjogewotICAgICAgICBmbG9hdCB2YWx1ZSA9IGRv
d25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihub2RlKS52YWx1ZSgpOyAvLyBkb3VibGU/Ci0g
ICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKTsKLSAgICB9
Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGg6IHsKLSAgICAgICAgYXV0
byYgbGVuZ3RoID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG5vZGUpLmxlbmd0aCgp
OwotICAgICAgICBpZiAoIWxlbmd0aC5pc1BlcmNlbnQoKSAmJiBsZW5ndGguaXNaZXJvKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5n
dGgsIHN0eWxlKTsKLSAgICB9Ci0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5l
Z2F0aW9uOiB7Ci0gICAgICAgIGF1dG8gY2hpbGROb2RlID0gY3JlYXRlQ1NTKCpkb3duY2FzdDxD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihub2RlKS5jaGlsZCgpLCBzdHlsZSk7Ci0gICAgICAgIGlm
ICghY2hpbGROb2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVy
biBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZlcnNpb246IHsKLSAg
ICAgICAgYXV0byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRvd25jYXN0PENhbGNFeHByZXNzaW9u
SW52ZXJzaW9uPihub2RlKS5jaGlsZCgpLCBzdHlsZSk7Ci0gICAgICAgIGlmICghY2hpbGROb2Rl
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBDU1NDYWxjSW52
ZXJ0Tm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0gICAg
Y2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb246IHsKLSAgICAgICAgYXV0byYg
b3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihub2RlKTsK
LSAgICAgICAgYXV0byYgb3BlcmF0aW9uQ2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVu
KCk7Ci0gICAgICAgIENhbGNPcGVyYXRvciBvcCA9IG9wZXJhdGlvbk5vZGUuZ2V0T3BlcmF0b3Io
KTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkFkZDogewotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVy
YXRpb25DaGlsZHJlbiwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChjaGls
ZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjaGlsZHJl
blswXSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1
bShXVEZNb3ZlKGNoaWxkcmVuKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6OlN1YnRyYWN0OiB7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6
ZSgpID09IDIpOwotCi0gICAgICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4+IHZhbHVlczsKLSAgICAgICAgICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9w
ZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8g
Zmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKLSAg
ICAgICAgICAgIGF1dG8gc2Vjb25kQ2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVu
WzFdLCBzdHlsZSk7Ci0KLSAgICAgICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7Ci0KLSAgICAgICAgICAgIGF1dG8gbmVnYXRlTm9kZSA9
IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUoc2Vjb25kQ2hpbGQucmVsZWFzZU5vbk51bGwoKSk7
Ci0gICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5l
Z2F0ZU5vZGU7Ci0KLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoZmlyc3RDaGlsZC5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoV1RGTW92ZShuZWdhdGVOb2Rl
KSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3Vt
KFdURk1vdmUodmFsdWVzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5OiB7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJh
dGlvbkNoaWxkcmVuLCBzdHlsZSk7Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdURk1vdmUoY2hpbGRyZW4pKTsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7Ci0gICAgICAgICAg
ICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09IDIpOwotCi0gICAgICAgICAgICBW
ZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKLSAgICAgICAgICAgIHZh
bHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gZmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3Bl
cmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKLSAgICAgICAgICAgIGlmICghZmlyc3RDaGlsZCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgYXV0byBzZWNv
bmRDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMV0sIHN0eWxlKTsKLSAgICAg
ICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBhdXRvIGludmVydE5vZGUgPSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRl
KHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAgICAgICB2YWx1ZXMuYXBw
ZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBw
ZW5kKFdURk1vdmUoaW52ZXJ0Tm9kZSkpOwotCi0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBz
dHlsZSkpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAg
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpD
bGFtcDogewotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25D
aGlsZHJlbiwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKG9wLCBXVEZNb3ZlKGNoaWxkcmVu
KSwgb3BlcmF0aW9uTm9kZS5kZXN0aW5hdGlvbkNhdGVnb3J5KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGNhc2UgQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGg6IHsKLSAgICAgICAgLy8gRklYTUU6IChodHRwOi8v
d2Via2l0Lm9yZy9iLzEyMjAzNikgQ3JlYXRlIGEgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIGVxdWl2
YWxlbnQgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC4KLSAgICAgICAgYXV0byYgYmxlbmQg
PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihub2RlKTsKLSAgICAgICAgZmxv
YXQgcHJvZ3Jlc3MgPSBibGVuZC5wcm9ncmVzcygpOwotICAgICAgICByZXR1cm4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6OkFkZCwgY3JlYXRlQmxlbmRIYWxmKGJs
ZW5kLmZyb20oKSwgc3R5bGUsIDEgLSBwcm9ncmVzcyksIGNyZWF0ZUJsZW5kSGFsZihibGVuZC50
bygpLCBzdHlsZSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpVbmRlZmluZWQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0K
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKQotewotICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUoKSkgewotICAgIGNhc2UgTGVuZ3Ro
VHlwZTo6UGVyY2VudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6OkZpeGVkOgotICAgICAgICByZXR1
cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUobGVuZ3RoLCBzdHlsZSkpOwotICAgIGNhc2UgTGVuZ3RoVHlwZTo6Q2FsY3VsYXRlZDoK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGguY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJl
c3Npb24oKSwgc3R5bGUpOwotICAgIGNhc2UgTGVuZ3RoVHlwZTo6QXV0bzoKLSAgICBjYXNlIExl
bmd0aFR5cGU6OkludHJpbnNpYzoKLSAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkludHJpbnNpYzoK
LSAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkNvbnRlbnQ6Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpN
YXhDb250ZW50OgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6RmlsbEF2YWlsYWJsZToKLSAgICBjYXNl
IExlbmd0aFR5cGU6OkZpdENvbnRlbnQ6Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpSZWxhdGl2ZToK
LSAgICBjYXNlIExlbmd0aFR5cGU6OlVuZGVmaW5lZDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1TdHJpbmcgQ1NTQ2FsY1Zh
bHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dChtX2V4cHJlc3Npb24uZ2V0
KCksIGJ1aWxkZXIpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWJvb2wg
Q1NTQ2FsY1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJiBvdGhlcikgY29uc3QKLXsK
LSAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fZXhwcmVzc2lvbiwgb3RoZXIubV9leHByZXNz
aW9uKTsKLX0KLQotaW5saW5lIGRvdWJsZSBDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRS
YW5nZShkb3VibGUgdmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlICYmIHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNW
YWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVk
UmFuZ2UobV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZShwcmltaXRpdmVUeXBlKCkpKTsKLX0KLQot
ZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHJldHVybiBjbGFtcFRv
UGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRh
dGEpKTsKLX0KLQotYm9vbCBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKENTU1ZhbHVlSUQg
ZnVuY3Rpb25JZCkKLXsKLSAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQpIHsKLSAgICBjYXNlIENTU1Zh
bHVlQ2FsYzoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoKLSAgICBjYXNlIENTU1ZhbHVl
TWluOgotICAgIGNhc2UgQ1NTVmFsdWVNYXg6Ci0gICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NDYWxjVmFsdWU6OmR1bXAoVGV4
dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgaW5kZW50IDw8ICIoIiA8PCAiQ1NTQ2Fs
Y1ZhbHVlIjsKLQotICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOwotICAgIG11bHRpbGlu
ZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5kZW50KCkgKyAyKTsKLQotICAgIG11bHRpbGluZVN0cmVh
bS5kdW1wUHJvcGVydHkoInNob3VsZCBjbGFtcCBub24tbmVnYXRpdmUiLCBtX3Nob3VsZENsYW1w
VG9Ob25OZWdhdGl2ZSk7Ci0gICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgiZXhwcmVz
c2lvbiIsIG1fZXhwcmVzc2lvbi5nZXQoKSk7Ci0KLSAgICB0cyA8PCBtdWx0aWxpbmVTdHJlYW0u
cmVsZWFzZSgpOwotICAgIHRzIDw8ICIpXG4iOwotfQotCi1SZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBD
U1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJU
b2tlblJhbmdlJiB0b2tlbnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29y
eSwgVmFsdWVSYW5nZSByYW5nZSkKLXsKLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIg
cGFyc2VyKGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNl
ci5wYXJzZUNhbGModG9rZW5zLCBmdW5jdGlvbik7Ci0gICAgaWYgKCFleHByZXNzaW9uKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1ND
YWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgpLCByYW5nZSAhPSBWYWx1ZVJhbmdl
OjpBbGwpKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjVmFs
dWU6OmNyZWF0ZSAiIDw8ICpyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gICAgCi1S
ZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShjb25zdCBDYWxjdWxhdGlv
blZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGF1dG8gZXhw
cmVzc2lvbiA9IGNyZWF0ZUNTUyh2YWx1ZS5leHByZXNzaW9uKCksIHN0eWxlKTsKLSAgICBpZiAo
IWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzaW1wbGlm
aWVkRXhwcmVzc2lvbiA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShleHByZXNzaW9u
LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZihuZXcgQ1NT
Q2FsY1ZhbHVlKFdURk1vdmUoc2ltcGxpZmllZEV4cHJlc3Npb24pLCB2YWx1ZS5zaG91bGRDbGFt
cFRvTm9uTmVnYXRpdmUoKSkpOwotICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwg
IkNTU0NhbGNWYWx1ZTo6Y3JlYXRlIGZyb20gQ2FsY3VsYXRpb25WYWx1ZTogIiA8PCAqcmVzdWx0
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotewotICAgIHN3aXRjaCAo
Y2F0ZWdvcnkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjogdHMgPDwg
Im51bWJlciI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiB0
cyA8PCAibGVuZ3RoIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50OiB0cyA8PCAicGVyY2VudCI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudE51bWJlcjogdHMgPDwgInBlcmNlbnQtbnVtYmVyIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOiB0cyA8PCAicGVyY2VudC1sZW5n
dGgiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOiB0cyA8PCAi
YW5nbGUiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6IHRzIDw8
ICJ0aW1lIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6
IHRzIDw8ICJmcmVxdWVuY3kiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOiB0cyA8PCAib3RoZXIiOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENTU0NhbGNW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgdmFsdWUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDYWxjdWxhdGlvblZhbHVlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgotCi1u
YW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQ1NTUGFyc2VyVG9rZW5SYW5nZTsKLWNsYXNzIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotY2xhc3MgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlID0gMSwKLSAg
ICAgICAgQ3NzQ2FsY09wZXJhdGlvbiwKLSAgICAgICAgQ3NzQ2FsY05lZ2F0ZSwKLSAgICAgICAg
Q3NzQ2FsY0ludmVydCwKLSAgICB9OwotCi0gICAgdmlydHVhbCB+Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlKCkgPSBkZWZhdWx0OwotICAgIHZpcnR1YWwgYm9vbCBpc1plcm8oKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxj
RXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5ID09IG90
aGVyLm1fY2F0ZWdvcnk7IH0KLSAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNl
dDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdERp
cmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4m
KSBjb25zdCA9IDA7Ci0KLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9jYXRlZ29yeTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZShD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotICAgICAgICA6IG1fY2F0ZWdvcnkoY2F0ZWdv
cnkpCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1f
Y2F0ZWdvcnk7Ci19OwotCi1jbGFzcyBDU1NDYWxjVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFs
dWUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NT
VmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSk7Ci0KLSAgICBzdGF0aWMg
UmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmLCBjb25z
dCBSZW5kZXJTdHlsZSYpOwotCi0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbi0+Y2F0ZWdvcnkoKTsgfQotICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZSgpIGNvbnN0OwotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OwotICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb24tPnByaW1pdGl2ZVR5cGUoKTsgfQotCi0g
ICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc2V0UGVybWl0dGVkVmFs
dWVSYW5nZShWYWx1ZVJhbmdlKTsKLQotICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OwotICAgIHZvaWQg
Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD4mKSBjb25zdDsKLQotICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7Ci0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7Ci0gICAgCi0gICAgc3Rh
dGljIGJvb2wgaXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCk7Ci0KLSAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENTU0NhbGNWYWx1ZShSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmLCBib29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7Ci0KLSAg
ICBkb3VibGUgY2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSkgY29uc3Q7Ci0KLSAgICBjb25z
dCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247Ci0gICAgYm9vbCBtX3No
b3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKLX07Ci0KLWlubGluZSBDU1NDYWxjVmFsdWU6OkNTU0Nh
bGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGV4cHJlc3Npb24sIGJvb2wgc2hv
dWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQotICAgIDogQ1NTVmFsdWUoQ2FsY3VsYXRpb25DbGFzcykK
LSAgICAsIG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQotICAgICwgbV9zaG91bGRD
bGFtcFRvTm9uTmVnYXRpdmUoc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQotewotfQotCi1pbmxp
bmUgUmVmPENhbGN1bGF0aW9uVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlQ2FsY3VsYXRpb25W
YWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29u
c3QKLXsKLSAgICByZXR1cm4gQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKG1fZXhwcmVzc2lvbi0+
Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpLAotICAgICAgICBtX3Nob3VsZENs
YW1wVG9Ob25OZWdhdGl2ZSA/IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlIDogVmFsdWVSYW5nZTo6
QWxsKTsKLX0KLQotaW5saW5lIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpzZXRQZXJtaXR0ZWRWYWx1ZVJh
bmdlKFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUg
PSByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGw7Ci19Ci0KLWlubGluZSB2b2lkIENTU0NhbGNWYWx1
ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fZXhwcmVzc2lvbi0+Y29sbGVjdERpcmVj
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotaW5saW5lIHZvaWQgQ1NT
Q2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFz
aFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fZXhwcmVzc2lvbi0+
Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Ci19Ci0K
LVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDYWxjdWxhdGlv
bkNhdGVnb3J5KTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBDU1NDYWxjVmFsdWUmKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDYWxjVmFsdWUsIGlzQ2FsY1ZhbHVlKCkp
Ci0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RF
KFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUu
cHJlZGljYXRlOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKIAogI2luY2x1ZGUg
IkFuaW1hdGlvblV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIK
KyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9y
QmxlbmRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIkNTU1By
aW1pdGl2ZVZhbHVlLmgiCiAKICNpbmNsdWRlICJDU1NCYXNpY1NoYXBlcy5oIgotI2luY2x1ZGUg
IkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAi
Q1NTTWFya3VwLmgiCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgogI2lu
Y2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUg
IkNvbG9yU2VyaWFsaXphdGlvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlTWFwcGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1p
bHkuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkocmV2aXNp
b24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0aW9WYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NDYW52YXNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgiCisKKyNpbmNsdWRl
ICJDU1NVbml0cy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGNVbml0Q2F0ZWdvcnkoQ1NT
VW5pdFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0VYUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFg6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0NNOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfSU46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19STEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19DSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19WSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToK
KyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19U
VVJOOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgorICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfSFo6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKKyAgICAgICAgcmV0
dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgfQorfQorCitDYWxjdWxh
dGlvbkNhdGVnb3J5IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihDU1NVbml0VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVI6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI7Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19D
TToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0lOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUEM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6CisgICAgICAgIHJldHVy
biBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1BFUkNFTlRBR0U6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
OworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfVFVSTjoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUzoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU7CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6
CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k7CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1JFTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0NIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICB9Cit9CisKK0NTU1VuaXRUeXBlIGNh
bm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5KQoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlcjogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOworICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19QWDsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHJldHVybiBDU1NV
bml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpB
bmdsZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfREVHOworICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6VGltZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTVM7CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX0haOwor
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6CisgICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudExlbmd0aDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOworfQorCiti
b29sIGhhc0RvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NI
UzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUFg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19NTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1BUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1RVUk46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19IWjoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfS0haOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ESU1FTlNJT046
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19WSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVk1BWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFBQWDoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfRFBJOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUENNOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19GUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19STEhTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVU5LTk9XTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1RSSU5HOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19GT05UX0ZBTUlMWToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
VVJJOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JREVOVDoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfQVRUUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ09VTlRFUjoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUkVDVDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkdC
Q09MT1I6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BBSVI6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1VOSUNPREVfUkFOR0U6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NPVU5U
RVJfTkFNRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU0hBUEU6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1FVQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NBTEM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX05VTUJFUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTEVOR1RIOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19QUk9QRVJUWV9JRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NT
Q2FsY0NhdGVnb3J5TWFwcGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gY2xhc3MgQ1NTVW5pdFR5cGUgOiB1aW50OF90OworZW51bSBjbGFzcyBD
YWxjdWxhdGlvbkNhdGVnb3J5IDogdWludDhfdDsKKworQ2FsY3VsYXRpb25DYXRlZ29yeSBjYWxj
VW5pdENhdGVnb3J5KENTU1VuaXRUeXBlKTsKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY3VsYXRp
b25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlKTsKK0NTU1VuaXRUeXBlIGNhbm9u
aWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5KTsK
K2Jvb2wgaGFzRG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpOworCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlJiBub2RlKQoreworICAgIG5vZGUuZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOwor
fQorCisjaWYgIUxPR19ESVNBQkxFRAorU3RyaW5nIHByZXR0eVByaW50Tm9kZShjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJl
YW07CisgICAgbXVsdGlsaW5lU3RyZWFtIDw8IG5vZGU7CisgICAgcmV0dXJuIG11bHRpbGluZVN0
cmVhbS5yZWxlYXNlKCk7Cit9CisKK1N0cmluZyBwcmV0dHlQcmludE5vZGVzKGNvbnN0IFZlY3Rv
cjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzKQoreworICAgIFRleHRTdHJlYW0g
bXVsdGlsaW5lU3RyZWFtOworICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlczsKKyAgICByZXR1
cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKK30KKyNlbmRpZgorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKyNpbmNsdWRlICJD
YWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGE7CisKK2VudW0gQ1NTUHJvcGVydHlJRCA6IHVpbnQxNl90OworCitl
bnVtIGNsYXNzIENTU1VuaXRUeXBlIDogdWludDhfdDsKKworY2xhc3MgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiB7CitwdWJs
aWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlID0gMSwK
KyAgICAgICAgQ3NzQ2FsY09wZXJhdGlvbiwKKyAgICAgICAgQ3NzQ2FsY05lZ2F0ZSwKKyAgICAg
ICAgQ3NzQ2FsY0ludmVydCwKKyAgICB9OworCisgICAgdmlydHVhbCB+Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBpc1plcm8oKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVD
YWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5ID09
IG90aGVyLm1fY2F0ZWdvcnk7IH0KKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFz
aFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVj
dERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mKSBjb25zdCA9IDA7CisKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29u
c3QgeyByZXR1cm4gbV9jYXRlZ29yeTsgfQorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIENTU0NhbGNFeHByZXNzaW9uTm9k
ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQorICAgICAgICA6IG1fY2F0ZWdvcnkoY2F0
ZWdvcnkpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
IG1fY2F0ZWdvcnk7Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKTsKKworI2lmICFMT0dfRElTQUJMRUQKK1N0cmlu
ZyBwcmV0dHlQcmludE5vZGUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJik7CitTdHJpbmcg
cHJldHR5UHJpbnROb2Rlcyhjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
Jik7CisjZW5kaWYKKworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FM
Q0VYUFJFU1NJT05fTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2Rl
KSB7IHJldHVybiBub2RlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCIKKworI2luY2x1ZGUgIkNTU0NhbGND
YXRlZ29yeU1hcHBpbmcuaCIKKyNpbmNsdWRlICJDU1NDYWxjSW52ZXJ0Tm9kZS5oIgorI2luY2x1
ZGUgIkNTU0NhbGNOZWdhdGVOb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY09wZXJhdGlvbk5vZGUu
aCIKKyNpbmNsdWRlICJDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgiCisjaW5jbHVkZSAiQ1NT
Q2FsY1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW4uaCIKKyNpbmNsdWRlICJDU1NQ
YXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heEV4cHJlc3Npb25EZXB0aCA9IDEwMDsK
KworLy8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI2NhbGMtc3ludGF4
PjoKKy8vIDxjYWxjKCk+ICA9IGNhbGMoIDxjYWxjLXN1bT4gKQorLy8gPG1pbigpPiAgID0gbWlu
KCA8Y2FsYy1zdW0+IyApCisvLyA8bWF4KCk+ICAgPSBtYXgoIDxjYWxjLXN1bT4jICkKKy8vIDxj
bGFtcCgpPiA9IGNsYW1wKCA8Y2FsYy1zdW0+I3szfSApCisvLyA8c2luKCk+ICAgPSBzaW4oIDxj
YWxjLXN1bT4gKQorLy8gPGNvcygpPiAgID0gY29zKCA8Y2FsYy1zdW0+ICkKKy8vIDx0YW4oKT4g
ICA9IHRhbiggPGNhbGMtc3VtPiApCisvLyA8YXNpbigpPiAgPSBhc2luKCA8Y2FsYy1zdW0+ICkK
Ky8vIDxhY29zKCk+ICA9IGFjb3MoIDxjYWxjLXN1bT4gKQorLy8gPGF0YW4oKT4gID0gYXRhbigg
PGNhbGMtc3VtPiApCisvLyA8YXRhbjIoKT4gPSBhdGFuMiggPGNhbGMtc3VtPiwgPGNhbGMtc3Vt
PiApCisvLyA8cG93KCk+ICAgPSBwb3coIDxjYWxjLXN1bT4sIDxjYWxjLXN1bT4gKQorLy8gPHNx
cnQoKT4gID0gc3FydCggPGNhbGMtc3VtPiApCisvLyA8aHlwb3QoKT4gPSBoeXBvdCggPGNhbGMt
c3VtPiMgKQorLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+IFsgWyAnKycgfCAnLScgXSA8
Y2FsYy1wcm9kdWN0PiBdKgorLy8gPGNhbGMtcHJvZHVjdD4gPSA8Y2FsYy12YWx1ZT4gWyBbICcq
JyB8ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgorLy8gPGNhbGMtdmFsdWU+ID0gPG51bWJlcj4gfCA8
ZGltZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3VtPiApCitSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyhD
U1NQYXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlvbikKK3sKKyAgICB0
b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKworICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IHJlc3VsdDsKKyAgICBib29sIG9rID0gcGFyc2VDYWxjRnVuY3Rpb24odG9rZW5zLCBm
dW5jdGlvbiwgMCwgcmVzdWx0KTsKKyAgICBpZiAoIW9rIHx8ICF0b2tlbnMuYXRFbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVz
dWx0KSk7CisKKyAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkocmVz
dWx0LnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVh
bSA8PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgLSBhZnRlciBzaW1w
bGlmaWNhdGlvbiAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0KSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitjaGFyIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6b3BlcmF0b3JW
YWx1ZShjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKHRva2VuLnR5cGUo
KSA9PSBEZWxpbWl0ZXJUb2tlbikKKyAgICAgICAgcmV0dXJuIHRva2VuLmRlbGltaXRlcigpOwor
ICAgIHJldHVybiAwOworfQorCitlbnVtIFBhcnNlU3RhdGUgeworICAgIE9LLAorICAgIFRvb0Rl
ZXAsCisgICAgTm9Nb3JlVG9rZW5zCit9OworCitzdGF0aWMgUGFyc2VTdGF0ZSBjaGVja0RlcHRo
QW5kSW5kZXgoaW50IGRlcHRoLCBDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucykKK3sKKyAgICBp
ZiAodG9rZW5zLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBOb01vcmVUb2tlbnM7CisgICAgaWYg
KGRlcHRoID4gbWF4RXhwcmVzc2lvbkRlcHRoKSB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShD
YWxjLCBzdHJlYW0gPDwgIkRlcHRoICIgPDwgZGVwdGggPDwgIiBleGNlZWRlZCBtYXhFeHByZXNz
aW9uRGVwdGggIiA8PCBtYXhFeHByZXNzaW9uRGVwdGgpOworICAgICAgICByZXR1cm4gVG9vRGVl
cDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitib29sIENTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBD
U1NWYWx1ZUlEIGZ1bmN0aW9uSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tl
bnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiYXJndW1lbnRzIiBy
ZWZlcnMgdG8gdGhpbmdzIGJldHdlZW4gY29tbWFzLgorICAgIHVuc2lnbmVkIG1pbkFyZ3VtZW50
Q291bnQgPSAxOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtYXhBcmd1bWVudENvdW50OworCisg
ICAgc3dpdGNoIChmdW5jdGlvbklEKSB7CisgICAgY2FzZSBDU1NWYWx1ZU1pbjoKKyAgICBjYXNl
IENTU1ZhbHVlTWF4OgorICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gc3RkOjpudWxsb3B0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6CisgICAgICAgIG1pbkFyZ3Vt
ZW50Q291bnQgPSAzOworICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gMzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDU1NWYWx1ZUNhbGM6CisgICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSAx
OworICAgICAgICBicmVhazsKKyAgICAvLyBUT0RPOiBjbGFtcCwgc2luLCBjb3MsIHRhbiwgYXNp
biwgYWNvcywgYXRhbiwgYXRhbjIsIHBvdywgc3FydCwgaHlwb3QuCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiBub2RlczsKKworICAgIGJvb2wgcmVxdWlyZUNvbW1hID0gZmFsc2U7CisgICAgdW5zaWdu
ZWQgYXJndW1lbnRDb3VudCA9IDA7CisgICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgeworICAg
ICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKHJlcXVpcmVDb21t
YSkgeworICAgICAgICAgICAgaWYgKHRva2Vucy5jb25zdW1lKCkudHlwZSgpICE9IENvbW1hVG9r
ZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdG9rZW5zLmNv
bnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBub2RlOworICAgICAgICBpZiAoIXBhcnNlQ2FsY1N1bSh0b2tlbnMsIGRl
cHRoLCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICArK2FyZ3Vt
ZW50Q291bnQ7CisgICAgICAgIGlmIChtYXhBcmd1bWVudENvdW50ICYmIGFyZ3VtZW50Q291bnQg
PiBtYXhBcmd1bWVudENvdW50LnZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgbm9kZXMuYXBwZW5kKG5vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJl
cXVpcmVDb21tYSA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChhcmd1bWVudENvdW50IDwg
bWluQXJndW1lbnRDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChm
dW5jdGlvbklEKSB7CisgICAgY2FzZSBDU1NWYWx1ZU1pbjoKKyAgICAgICAgcmVzdWx0ID0gQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1p
biwgV1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTVmFsdWVNYXg6CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpNYXgsIFdURk1vdmUo
bm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1ZhbHVlQ2xhbXA6CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpDbGFtcCwgV1RGTW92ZShub2Rlcyks
IG1fZGVzdGluYXRpb25DYXRlZ29yeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRDYWxjOgorICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgorICAgICAgICByZXN1bHQgPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgLy8gVE9ETzogY2xhbXAsIHNpbiwgY29zLCB0YW4sIGFzaW4sIGFjb3MsIGF0
YW4sIGF0YW4yLCBwb3csIHNxcnQsIGh5cG90CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuICEhcmVzdWx0OworfQorCitib29sIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEFk
ZCBjb2RlIGhlcmUgdG8gcGFyc2UgQ1NTVmFsaWRJRCBmb3IgbmFtZWQgY29uc3RhbnRzLgorCisg
ICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4gPSB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKTsKKyAgICBpZiAoISh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4udHlw
ZSgpID09IFBlcmNlbnRhZ2VUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byB0eXBlID0gdG9rZW4udW5p
dFR5cGUoKTsKKyAgICBpZiAoY2FsY1VuaXRDYXRlZ29yeSh0eXBlKSA9PSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJlc3VsdCA9
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCB0eXBlKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRo
LCB0b2tlbnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZpbmRG
dW5jdGlvbklkID0gWyZdKENTU1ZhbHVlSUQmIGZ1bmN0aW9uSWQpIHsKKyAgICAgICAgaWYgKHRv
a2Vucy5wZWVrKCkudHlwZSgpID09IExlZnRQYXJlbnRoZXNpc1Rva2VuKSB7CisgICAgICAgICAg
ICBmdW5jdGlvbklkID0gQ1NTVmFsdWVDYWxjOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbklkID0gdG9rZW5zLnBlZWsoKS5mdW5jdGlvbklk
KCk7CisgICAgICAgIHJldHVybiBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9u
SWQpOworICAgIH07CisKKyAgICBDU1NWYWx1ZUlEIGZ1bmN0aW9uSWQ7CisgICAgaWYgKGZpbmRG
dW5jdGlvbklkKGZ1bmN0aW9uSWQpKSB7CisgICAgICAgIENTU1BhcnNlclRva2VuUmFuZ2UgaW5u
ZXJSYW5nZSA9IHRva2Vucy5jb25zdW1lQmxvY2soKTsKKyAgICAgICAgdG9rZW5zLmNvbnN1bWVX
aGl0ZXNwYWNlKCk7CisgICAgICAgIGlubmVyUmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAg
ICAgICAgcmV0dXJuIHBhcnNlQ2FsY0Z1bmN0aW9uKGlubmVyUmFuZ2UsIGZ1bmN0aW9uSWQsIGRl
cHRoICsgMSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyc2VWYWx1ZSh0b2tlbnMs
IHJlc3VsdCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNh
bGNQcm9kdWN0KENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAgIGlmIChjaGVja0RlcHRoQW5k
SW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFsdWU7CisgICAgaWYgKCFwYXJz
ZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKwor
ICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKKyAgICAgICAgY2hhciBvcGVyYXRvckNoYXJh
Y3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7CisgICAgICAgIGlmIChvcGVyYXRv
ckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KSAm
JiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRp
dmlkZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBuZXh0VmFsdWU7CisgICAgICAgIGlmICghcGFyc2VDYWxjVmFsdWUodG9rZW5zLCBk
ZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihD
YWxjT3BlcmF0b3I6OkRpdmlkZSkpCisgICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjSW52
ZXJ0Tm9kZTo6Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICBp
ZiAoZmlyc3RWYWx1ZSkKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpOworCisgICAgICAgIG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgfQorCisgICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkgeworICAgICAgICBy
ZXN1bHQgPSBXVEZNb3ZlKGZpcnN0VmFsdWUpOworICAgICAgICByZXR1cm4gISFyZXN1bHQ7Cisg
ICAgfQorCisgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3Qo
V1RGTW92ZShub2RlcykpOworICAgIHJldHVybiAhIXJlc3VsdDsKK30KKworYm9vbCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiB0
b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkK
K3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBm
aXJzdFZhbHVlOworICAgIGlmICghcGFyc2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBmaXJz
dFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKworICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsK
KyAgICAgICAgY2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBl
ZWsoKSk7CisgICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFy
PihDYWxjT3BlcmF0b3I6OkFkZCkgJiYgb3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8
Y2hhcj4oQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAoKCZ0b2tlbnMucGVlaygpIC0gMSktPnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4KyAycHgpIGlzIGludmFsaWQK
KworICAgICAgICB0b2tlbnMuY29uc3VtZSgpOworICAgICAgICBpZiAodG9rZW5zLnBlZWsoKS50
eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBj
YWxjKDFweCArMnB4KSBpcyBpbnZhbGlkCisKKyAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCk7CisKKyAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
bmV4dFZhbHVlOworICAgICAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwg
bmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3Bl
cmF0b3I6OlN1YnRyYWN0KSkKKyAgICAgICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNOZWdhdGVO
b2RlOjpjcmVhdGUobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgICAgIGlmIChm
aXJzdFZhbHVlKQorICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CisKKyAgICAgICAgbm9kZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICB9CisKKyAgICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3Vs
dCA9IFdURk1vdmUoZmlyc3RWYWx1ZSk7CisgICAgICAgIHJldHVybiAhIXJlc3VsdDsKKyAgICB9
CisKKyAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUo
bm9kZXMpKTsKKyAgICByZXR1cm4gISFyZXN1bHQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRl
ICJDYWxjT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlOworY2xhc3Mg
Q1NTUGFyc2VyVG9rZW47CitjbGFzcyBDU1NQYXJzZXJUb2tlblJhbmdlOworCitjbGFzcyBDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IENTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcihDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdv
cnkpCisgICAgICAgIDogbV9kZXN0aW5hdGlvbkNhdGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkp
CisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHBhcnNl
Q2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKTsKKyAgICAKK3By
aXZhdGU6CisgICAgY2hhciBvcGVyYXRvclZhbHVlKGNvbnN0IENTU1BhcnNlclRva2VuJik7CisK
KyAgICBib29sIHBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFJlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZVZhbHVlVGVybShDU1NQYXJzZXJUb2tl
blJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOworICAg
IGJvb2wgcGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQs
IGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKyAgICBib29sIHBh
cnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxjUHJvZHVjdChDU1NQYXJzZXJU
b2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwor
ICAgIGJvb2wgcGFyc2VDYWxjVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKworICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDU1NDYWxjSW52ZXJ0Tm9kZS5oIgorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25JbnZl
cnNpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0lu
dmVydE5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAgIGF1dG8gY2hpbGROb2RlID0gbV9j
aGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpOworICAgIHJldHVybiBt
YWtlVW5pcXVlPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihXVEZNb3ZlKGNoaWxkTm9kZSkpOwor
fQorCitkb3VibGUgQ1NTQ2FsY0ludmVydE5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVu
aXRUeXBlKSBjb25zdAoreworICAgIGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmRvdWJsZVZh
bHVlKHVuaXRUeXBlKTsKKyAgICBpZiAoIWNoaWxkVmFsdWUpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgcmV0dXJuIDEuMCAvIGNo
aWxkVmFsdWU7Cit9CisKK2RvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y29tcHV0ZUxlbmd0aFB4
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAor
eworICAgIGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJz
aW9uRGF0YSk7CisgICAgaWYgKCFjaGlsZFZhbHVlKQorICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIHJldHVybiAxLjAgLyBjaGlsZFZh
bHVlOworfQorCit2b2lkIENTU0NhbGNJbnZlcnROb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBj
b25zdAoreworICAgIHRzIDw8ICIxLyIgPDwgbV9jaGlsZC5nZXQoKTsKK30KKworCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDU1NDYWxjSW52ZXJ0Tm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0ludmVydE5vZGU+IGNy
ZWF0ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY0ludmVydE5vZGUoV1RGTW92ZShjaGlsZCkpKTsK
KyAgICB9CisKKyAgICBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hp
bGQoKSB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9CisKKyAgICB2b2lkIHNldENoaWxkKFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpIHsgbV9jaGlsZCA9IFdURk1vdmUoY2hpbGQp
OyB9CisKK3ByaXZhdGU6CisgICAgQ1NTQ2FsY0ludmVydE5vZGUoUmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4mJiBjaGlsZCkKKyAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2hpbGQt
PmNhdGVnb3J5KCkpCisgICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKGNoaWxkKSkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2Fs
Y0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFs
OworCisgICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5pc1pl
cm8oKTsgfQorICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7
CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJikgY29uc3QgZmluYWw7CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
VHlwZTo6Q3NzQ2FsY0ludmVydDsgfQorICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5wcmltaXRpdmVUeXBlKCk7IH0KKworICAgIHZv
aWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0
Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQorICAgIHZvaWQgY29sbGVj
dERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RD
b21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9CisKKyAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gbV9jaGlsZDsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQ
UkVTU0lPTl9OT0RFKENTU0NhbGNJbnZlcnROb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDU1NDYWxjTmVnYXRlTm9kZS5oIgorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25O
ZWdhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxj
TmVnYXRlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgYXV0byBjaGlsZE5vZGUgPSBt
X2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7CisgICAgcmV0dXJu
IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4oV1RGTW92ZShjaGlsZE5vZGUpKTsK
K30KKwordm9pZCBDU1NDYWxjTmVnYXRlTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QK
K3sKKyAgICB0cyA8PCAiLSIgPDwgbV9jaGlsZC5nZXQoKTsKK30KKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ1NTQ2FsY05lZ2F0ZU5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNOZWdhdGVOb2RlPiBjcmVhdGUoUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENTU0NhbGNOZWdhdGVOb2RlKFdURk1vdmUoY2hpbGQpKSk7CisgICAgfQor
CisgICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hpbGQuZ2V0KCk7IH0KKyAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkgeyBy
ZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRDaGlsZChSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNoaWxkKTsgfQorCitw
cml2YXRlOgorICAgIENTU0NhbGNOZWdhdGVOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiYgY2hpbGQpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNoaWxkLT5jYXRlZ29y
eSgpKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCisgICAgeworICAgIH0KKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNz
aW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKworICAg
IGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+aXNaZXJvKCk7IH0K
KyAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIC1tX2NoaWxkLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7IH0KKyAgICBkb3VibGUg
Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNp
b25EYXRhKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNv
bnZlcnNpb25EYXRhKTsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5
cGU6OkNzc0NhbGNOZWdhdGU7IH0KKyAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9CisKKyAgICB2b2lk
IGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdENv
bXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KKyAgICB2b2lkIGNvbGxlY3RE
aXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29t
cHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQorCisgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IG1fY2hpbGQ7Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJF
U1NJT05fTk9ERShDU1NDYWxjTmVnYXRlTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY05lZ2F0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIgorCisjaW5jbHVkZSAiQ1NT
Q2FsY0NhdGVnb3J5TWFwcGluZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNJbnZlcnROb2RlLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgdGhlICJUbyBhZGQg
dHdvIHR5cGVzIHR5cGUxIGFuZCB0eXBlMiwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOiIg
cnVsZXMuCisKK3N0YXRpYyBjb25zdCBDYWxjdWxhdGlvbkNhdGVnb3J5IGFkZFN1YnRyYWN0UmVz
dWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSldW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSldID0geworLy8g
ICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TGVuZ3RoICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aAorICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIKKyAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCwgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5n
dGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoCisgICAg
eyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCAgICAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQKKyAgICB7IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVy
LCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyIH0sIC8v
ICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcgorICAgIHsgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0
aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoCit9OworCitzdGF0aWMg
Q2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lk
ZSwgQ2FsY09wZXJhdG9yIG9wKQoreworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbGVmdENhdGVn
b3J5ID0gbGVmdFNpZGUuY2F0ZWdvcnkoKTsKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IHJpZ2h0
Q2F0ZWdvcnkgPSByaWdodFNpZGUuY2F0ZWdvcnkoKTsKKyAgICBBU1NFUlQobGVmdENhdGVnb3J5
IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworICAgIEFTU0VSVChyaWdodENhdGVnb3J5
IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworCisgICAgc3dpdGNoIChvcCkgeworICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0
OgorICAgICAgICBpZiAobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUg
JiYgcmlnaHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQorICAgICAgICAg
ICAgcmV0dXJuIGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihsZWZ0Q2F0
ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHRDYXRlZ29yeSldOworICAgICAgICBp
ZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0Q2F0ZWdvcnkpCisgICAgICAgICAgICByZXR1cm4gbGVm
dENhdGVnb3J5OworICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cisg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgorICAgICAgICBpZiAobGVmdENhdGVnb3J5
ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAmJiByaWdodENhdGVnb3J5ICE9IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpOdW1iZXIgPyByaWdodENhdGVnb3J5IDogbGVmdENhdGVnb3J5OworICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIGlmIChyaWdodENhdGVnb3J5ICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCByaWdodFNpZGUuaXNaZXJvKCkpCisgICAgICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgICAgIHJldHVybiBs
ZWZ0Q2F0ZWdvcnk7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoKKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWF4OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cit9CisKKy8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVu
dCBjb3JyZWN0IGNhdGVnb3J5IGNvbXB1dGF0aW9uIHBlcjoKKy8vIDxodHRwczovL2RyYWZ0cy5j
c3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1pbnZlcnQtYS10
eXBlPgorLy8gVG8gaW52ZXJ0IGEgdHlwZSB0eXBlLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Rl
cHM6CisvLyBMZXQgcmVzdWx0IGJlIGEgbmV3IHR5cGUgd2l0aCBhbiBpbml0aWFsbHkgZW1wdHkg
b3JkZXJlZCBtYXAgYW5kIGFuIGluaXRpYWxseSBudWxsIHBlcmNlbnQgaGludAorLy8gRm9yIGVh
Y2ggdW5pdCDihpIgZXhwb25lbnQgb2YgdHlwZSwgc2V0IHJlc3VsdFt1bml0XSB0byAoLTEgKiBl
eHBvbmVudCkuCitzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeUZvckludmVydChD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQoreworICAgIHJldHVybiBjYXRlZ29yeTsKK30K
Kworc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgVmVj
dG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMsIENhbGNPcGVyYXRvciBvcCkK
K3sKKyAgICBpZiAobm9kZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI7CisKKyAgICBhdXRvIGN1cnJlbnRDYXRlZ29yeSA9IG5vZGVzWzBdLT5j
YXRlZ29yeSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG5vZGVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIGF1dG8gdXNlZE9wZXJhdG9yID0gb3A7CisgICAgICAgIGlmIChub2RlLnR5
cGUoKSA9PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNJbnZlcnQpCisgICAg
ICAgICAgICB1c2VkT3BlcmF0b3IgPSBDYWxjT3BlcmF0b3I6OkRpdmlkZTsKKworICAgICAgICBh
dXRvIG5leHRDYXRlZ29yeSA9IG5vZGUuY2F0ZWdvcnkoKTsKKworICAgICAgICBzd2l0Y2ggKHVz
ZWRPcGVyYXRvcikgeworICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgorICAgICAgICBj
YXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAgICAgICAgICAvLyA8aHR0cHM6Ly9kcmFm
dHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtYWRkLXR3
by10eXBlcz4KKyAgICAgICAgICAgIC8vIEF0IGEgKyBvciAtIHN1Yi1leHByZXNzaW9uLCBhdHRl
bXB0IHRvIGFkZCB0aGUgdHlwZXMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZ3VtZW50cy4KKyAg
ICAgICAgICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWlsdXJlLCB0aGUgZW50aXJlIGNhbGN1bGF0
aW9u4oCZcyB0eXBlIGlzIGZhaWx1cmUuIE90aGVyd2lzZSwgdGhlIHN1Yi1leHByZXNzaW9u4oCZ
cyB0eXBlIGlzIHRoZSByZXR1cm5lZCB0eXBlLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRDYXRl
Z29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlICYmIG5leHRDYXRlZ29yeSA8IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQorICAgICAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9
IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihjdXJyZW50Q2F0ZWdvcnkp
XVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obmV4dENhdGVnb3J5KV07CisgICAgICAgICAgICBlbHNl
IGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gbmV4dENhdGVnb3J5KQorICAgICAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKKyAgICAgICAgICAgIC8vIDxodHRw
czovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1
ZS1tdWx0aXBseS10d28tdHlwZXM+CisgICAgICAgICAgICAvLyBBdCBhICogc3ViLWV4cHJlc3Np
b24sIG11bHRpcGx5IHRoZSB0eXBlcyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYXJndW1lbnRzLiBU
aGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJldHVybmVkIHJlc3VsdC4KKyAgICAg
ICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
ICYmIG5leHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworCisgICAgICAgICAg
ICBjdXJyZW50Q2F0ZWdvcnkgPSBjdXJyZW50Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyID8gbmV4dENhdGVnb3J5IDogY3VycmVudENhdGVnb3J5OworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogeworICAgICAgICAg
ICAgYXV0byBpbnZlcnRDYXRlZ29yeSA9IGNhdGVnb3J5Rm9ySW52ZXJ0KG5leHRDYXRlZ29yeSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEF0IGEgLyBzdWItZXhwcmVzc2lvbiwgbGV0
IGxlZnQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRpbmcgdGhlIHR5cGVzIG9mIGl0cyBsZWZ0
IGFyZ3VtZW50LAorICAgICAgICAgICAgLy8gYW5kIHJpZ2h0IHR5cGUgYmUgdGhlIHJlc3VsdCBv
ZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgcmlnaHQgYXJndW1lbnQgYW5kIHRoZW4gaW52ZXJ0
aW5nIGl0LgorICAgICAgICAgICAgLy8gVGhlIHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRo
ZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGxlZnQgdHlwZSBhbmQgcmlnaHQgdHlwZS4KKyAg
ICAgICAgICAgIGlmIChpbnZlcnRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIgfHwgbm9kZS5pc1plcm8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6
CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAgICAgICAgICAgIC8vIFRoZSB0
eXBlIG9mIGEgbWluKCksIG1heCgpLCBvciBjbGFtcCgpIGV4cHJlc3Npb24gaXMgdGhlIHJlc3Vs
dCBvZiBhZGRpbmcgdGhlIHR5cGVzIG9mIGl0cyBjb21tYS1zZXBhcmF0ZWQgY2FsY3VsYXRpb25z
CisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudENhdGVnb3J5OworfQorCitzdGF0aWMgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSByZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xhbXAoQ2FsY3VsYXRp
b25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVn
b3J5KQoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgorICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI6CisgICAgICAgIHJldHVybiBjYXRlZ29yeTsKKworICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdv
cnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg7CisgICAgICAgIGlmIChkZXN0aW5hdGlv
bkNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOworICAgICAgICByZXR1cm4g
Y2F0ZWdvcnk7CisgICAgfQorCisgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVy
OworfQorCitzdGF0aWMgYm9vbCBpc1NhbWVQYWlyKENhbGN1bGF0aW9uQ2F0ZWdvcnkgYSwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBiLCBDYWxjdWxhdGlvbkNhdGVnb3J5IHgsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgeSkKK3sKKyAgICByZXR1cm4gKGEgPT0geCAmJiBiID09IHkpIHx8IChhID09IHkgJiYg
YiA9PSB4KTsKK30KKworZW51bSBjbGFzcyBTb3J0aW5nQ2F0ZWdvcnkgeworICAgIE51bWJlciwK
KyAgICBQZXJjZW50LAorICAgIERpbWVuc2lvbiwKKyAgICBPdGhlcgorfTsKKworc3RhdGljIFNv
cnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnlGb3JUeXBlKENTU1VuaXRUeXBlIHVuaXRUeXBl
KQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGluZ0NhdGVnb3J5IHNvcnRPcmRlcltdID0g
eworICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlciwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsCisgICAgICAgIFNvcnRpbmdDYXRlZ29y
eTo6UGVyY2VudCwgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwKKyAgICAg
ICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyLAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAg
IC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsCisgICAgICAgIFNvcnRpbmdD
YXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsCisg
ICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6VGltZSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3ksCisgICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6
T3RoZXIsICAgICAgICAgLy8gVU90aGVyCisgICAgfTsKKworICAgIENPTVBJTEVfQVNTRVJUKEFS
UkFZX1NJWkUoc29ydE9yZGVyKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpICsgMSwgc29ydE9yZGVyX3NpemVfc2hvdWxkX21hdGNoX1VuaXRDYXRl
Z29yeSk7CisgICAgcmV0dXJuIHNvcnRPcmRlcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FsY1Vu
aXRDYXRlZ29yeSh1bml0VHlwZSkpXTsKK30KKworc3RhdGljIFNvcnRpbmdDYXRlZ29yeSBzb3J0
aW5nQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQoreworICAgIGlm
IChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKKyAgICAgICAgcmV0dXJuIHNv
cnRpbmdDYXRlZ29yeUZvclR5cGUobm9kZS5wcmltaXRpdmVUeXBlKCkpOworCisgICAgcmV0dXJu
IFNvcnRpbmdDYXRlZ29yeTo6T3RoZXI7Cit9CisKK3N0YXRpYyBDU1NVbml0VHlwZSBwcmltaXRp
dmVUeXBlRm9yQ29tYmluYXRpb24oY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQor
eworICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKKyAgICAgICAg
cmV0dXJuIG5vZGUucHJpbWl0aXZlVHlwZSgpOworICAgIAorICAgIHJldHVybiBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047Cit9CisKK3N0YXRpYyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpV
bml0Q29udmVyc2lvbiBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlwZXMoQ1NTVW5pdFR5cGUg
Zmlyc3RUeXBlLCBDU1NVbml0VHlwZSBzZWNvbmRUeXBlKQoreworICAgIGlmIChmaXJzdFR5cGUg
PT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOIHx8IHNlY29uZFR5cGUgPT0gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOKQorICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
VW5pdENvbnZlcnNpb246OkludmFsaWQ7CisKKyAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxj
dWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oZmlyc3RUeXBlKTsKKworICAgIC8vIENvbXBh
dGlibGUgdHlwZXMuCisgICAgaWYgKGZpcnN0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIgJiYgZmlyc3RDYXRlZ29yeSA9PSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmlu
YXRpb24oc2Vjb25kVHlwZSkpCisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOworCisgICAgLy8gTWF0Y2hpbmcgdHlw
ZXMuCisgICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlICYmIGhhc0RvdWJsZVZhbHVlKGZp
cnN0VHlwZSkpCisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0
Q29udmVyc2lvbjo6UHJlc2VydmU7CisKKyAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7Cit9CisKKworc3RhdGljIENTU1ZhbHVlSUQg
ZnVuY3Rpb25Gcm9tT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3Ap
IHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpT
dWJ0cmFjdDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkRpdmlkZToKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2FsYzsKKyAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TWluOgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVNaW47CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDoKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlTWF4OworICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2xhbXA7Cisg
ICAgfQorICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7Cit9CisKK1JlZlB0cjxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3Igb3AsIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZlB0cjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQoreworICAgIGlmICghbGVmdFNpZGUgfHwgIXJpZ2h0
U2lkZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQob3AgPT0gQ2FsY09w
ZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7CisKKyAgICBBU1NF
UlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7Cisg
ICAgQVNTRVJUKHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyKTsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNp
ZGUsICpyaWdodFNpZGUsIG9wKTsKKyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8
PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9k
ZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVBy
aW50Tm9kZSgqbGVmdFNpZGUpIDw8ICIgYW5kICIgPDwgKnJpZ2h0U2lkZSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIG9wLCBsZWZ0U2lkZS5yZWxlYXNlTm9uTnVsbCgpLCBy
aWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSkpOworfQorCitSZWZQdHI8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oVmVjdG9yPFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKK3sKKyAgICBpZiAodmFsdWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJt
aW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6OkFkZCk7CisgICAgaWYgKG5ld0NhdGVn
b3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7CisgICAgICAgIExPR19XSVRIX1NU
UkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgc3VtIG5vZGUgYmVjYXVzZSB1
bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZh
bHVlcykpOworICAgICAgICBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KHZhbHVlcywg
Q2FsY09wZXJhdG9yOjpBZGQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKG5ld0NhdGVnb3J5LCBD
YWxjT3BlcmF0b3I6OkFkZCwgV1RGTW92ZSh2YWx1ZXMpKSk7Cit9CisKK1JlZlB0cjxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKK3sKKyAgICBpZiAodmFsdWVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5ld0NhdGVn
b3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsK
KyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBw
cm9kdWN0IG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8
PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKG5ld0Nh
dGVnb3J5LCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBXVEZNb3ZlKHZhbHVlcykpKTsKK30KKwor
UmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRl
TWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciBvcCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVn
b3J5KQoreworICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBvcCA9PSBDYWxj
T3BlcmF0b3I6Ok1heCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wKTsKKyAgICBBU1NFUlRf
SU1QTElFUyhvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wLCB2YWx1ZXMuc2l6ZSgpID09IDMpOwor
CisgICAgT3B0aW9uYWw8Q2FsY3VsYXRpb25DYXRlZ29yeT4gY2F0ZWdvcnkgPSBzdGQ6Om51bGxv
cHQ7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBhdXRvIHZhbHVl
Q2F0ZWdvcnkgPSByZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xhbXAodmFsdWUtPmNhdGVnb3J5
KCksIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworCisgICAgICAgIEFTU0VSVCh2YWx1ZUNhdGVnb3J5
IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworICAgICAgICBpZiAoIWNhdGVnb3J5KSB7
CisgICAgICAgICAgICBpZiAodmFsdWVDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcikgeworICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwg
IkZhaWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgIiA8PCBvcCA8PCAiIG5vZGUg
YmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmlu
dE5vZGVzKHZhbHVlcykpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2F0ZWdvcnkgPSB2YWx1ZUNhdGVnb3J5OworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHZhbHVlQ2F0ZWdvcnkpIHsKKyAgICAgICAgICAg
IGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgpLCB2YWx1ZUNhdGVnb3J5LCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRO
dW1iZXIpKSB7CisgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKGNhdGVnb3J5LnZhbHVlKCks
IG9wLCBXVEZNb3ZlKHZhbHVlcykpKTsKK30KKwordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCit7CisgICAgQVNTRVJU
KG9wID09IENhbGNPcGVyYXRvcjo6QWRkIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkp
OworCisgICAgYXV0byBoYXNDaGlsZFdpdGhPcGVyYXRvciA9IFsmXSAoQ2FsY09wZXJhdG9yIG9w
KSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworCisgICAgaWYgKCFoYXNDaGlsZFdpdGhPcGVyYXRvcihvcCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3
Q2hpbGRyZW47CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAg
aWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewor
ICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9k
ZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
VG9Nb3ZlIDogY2hpbGRyZW4pCisgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdU
Rk1vdmUoY2hpbGRUb01vdmUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXdDaGls
ZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOworICAgIH0KKyAgICAKKyAgICBuZXdDaGlsZHJl
bi5zaHJpbmtUb0ZpdCgpOworICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsK
K30KKworYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29tYmluZUFsbENoaWxkcmVuKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG1fY2hpbGRy
ZW5bMF0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZpcnN0VW5pdFR5cGUg
PSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7CisgICAgYXV0byBmaXJzdENhdGVnb3J5
ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1fY2hpbGRyZW5bMF0tPnByaW1p
dGl2ZVR5cGUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jaGlsZHJlbi5z
aXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBub2RlID0gbV9jaGlsZHJlbltpXTsKKworICAg
ICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbm9kZVVuaXRUeXBlID0gbm9kZS0+cHJp
bWl0aXZlVHlwZSgpOworICAgICAgICBhdXRvIG5vZGVDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0
ZWdvcnlGb3JDb21iaW5hdGlvbihub2RlVW5pdFR5cGUpOworCisgICAgICAgIGlmIChub2RlQ2F0
ZWdvcnkgIT0gZmlyc3RDYXRlZ29yeSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAobm9kZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyICYmIG5v
ZGVVbml0VHlwZSAhPSBmaXJzdFVuaXRUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFoYXNEb3VibGVWYWx1ZShub2RlVW5pdFR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5lQ2hpbGRyZW4oKQoreworICAgIGlmICht
X2NoaWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzaG91bGRT
b3J0Q2hpbGRyZW4oKSkgeworICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy12YWx1ZXMtNC8jc29ydC1hLWNhbGN1bGF0aW9ucy1jaGlsZHJlbj4KKyAgICAgICAgc3RkOjpz
dGFibGVfc29ydChtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4uZW5kKCksIFtdKGNvbnN0
IGF1dG8mIGZpcnN0LCBjb25zdCBhdXRvJiBzZWNvbmQpIHsKKyAgICAgICAgICAgIC8vIFNvcnQg
b3JkZXI6IG51bWJlciwgcGVyY2VudGFnZSwgZGltZW5zaW9uLCBvdGhlci4KKyAgICAgICAgICAg
IFNvcnRpbmdDYXRlZ29yeSBmaXJzdENhdGVnb3J5ID0gc29ydGluZ0NhdGVnb3J5KGZpcnN0Lmdl
dCgpKTsKKyAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBzZWNvbmRDYXRlZ29yeSA9IHNvcnRp
bmdDYXRlZ29yeShzZWNvbmQuZ2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
Zmlyc3RDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiAmJiBzZWNvbmRDYXRl
Z29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbikgeworICAgICAgICAgICAgICAgIC8v
IElmIG5vZGVzIGNvbnRhaW5zIGFueSBkaW1lbnNpb25zLCByZW1vdmUgdGhlbSBmcm9tIG5vZGVz
LCBzb3J0IHRoZW0gYnkgdGhlaXIgdW5pdHMsIGFuZCBhcHBlbmQgdGhlbSB0byByZXQuCisgICAg
ICAgICAgICAgICAgYXV0byBmaXJzdFVuaXRTdHJpbmcgPSBDU1NQcmltaXRpdmVWYWx1ZTo6dW5p
dFR5cGVTdHJpbmcoZmlyc3QtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0
byBzZWNvbmRVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBlU3RyaW5nKHNl
Y29uZC0+cHJpbWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29kZVBvaW50
Q29tcGFyZUxlc3NUaGFuKGZpcnN0VW5pdFN0cmluZywgc2Vjb25kVW5pdFN0cmluZyk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmly
c3RDYXRlZ29yeSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2Vjb25kQ2F0ZWdvcnkpOworICAg
ICAgICB9KTsKKworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJwb3N0
LXNvcnQ6ICIgPDwgKnRoaXMpOworICAgIH0KKworICAgIGlmIChjYWxjT3BlcmF0b3IoKSA9PSBD
YWxjT3BlcmF0b3I6OkFkZCkgeworICAgICAgICAvLyBGb3IgZWFjaCBzZXQgb2Ygcm9vdOKAmXMg
Y2hpbGRyZW4gdGhhdCBhcmUgbnVtZXJpYyB2YWx1ZXMgd2l0aCBpZGVudGljYWwgdW5pdHMsCisg
ICAgICAgIC8vIHJlbW92ZSB0aG9zZSBjaGlsZHJlbiBhbmQgcmVwbGFjZSB0aGVtIHdpdGggYSBz
aW5nbGUgbnVtZXJpYyB2YWx1ZSBjb250YWluaW5nCisgICAgICAgIC8vIHRoZSBzdW0gb2YgdGhl
IHJlbW92ZWQgbm9kZXMsIGFuZCB3aXRoIHRoZSBzYW1lIHVuaXQuCisgICAgICAgIFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47CisgICAgICAgIG5ld0NoaWxk
cmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOworICAgICAgICBu
ZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlblswXS5jb3B5UmVmKCkpOworCisg
ICAgICAgIENTU1VuaXRUeXBlIHByZXZpb3VzVHlwZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21iaW5h
dGlvbihuZXdDaGlsZHJlblswXS5nZXQoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGN1cnJl
bnROb2RlID0gbV9jaGlsZHJlbltpXTsKKyAgICAgICAgICAgIENTU1VuaXRUeXBlIGN1cnJlbnRU
eXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlLmdldCgpKTsKKwor
ICAgICAgICAgICAgYXV0byBjb252ZXJzaW9uVHlwZSA9IGNvbnZlcnNpb25Ub0FkZFZhbHVlc1dp
dGhUeXBlcyhwcmV2aW91c1R5cGUsIGN1cnJlbnRUeXBlKTsKKyAgICAgICAgICAgIGlmIChjb252
ZXJzaW9uVHlwZSAhPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6
SW52YWxpZCkgeworICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuYWRkKGRvd25jYXN0PENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KGN1cnJlbnROb2RlLmdldCgpKSwgY29udmVyc2lvblR5cGUpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcmV2
aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24oY3VycmVudE5vZGUpOworICAg
ICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKGN1cnJlbnROb2RlLmNvcHlSZWYo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0
KCk7CisgICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChjYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5KSB7CisgICAgICAgIC8vIElmIHJvb3QgaGFzIG11bHRpcGxlIGNoaWxkcmVuIHRo
YXQgYXJlIG51bWJlcnMgKG5vdCBwZXJjZW50YWdlcyBvciBkaW1lbnNpb25zKSwKKyAgICAgICAg
Ly8gcmVtb3ZlIHRoZW0gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xlIG51bWJlciBjb250
YWluaW5nIHRoZSBwcm9kdWN0IG9mIHRoZSByZW1vdmVkIG5vZGVzLgorICAgICAgICBkb3VibGUg
bXVsdGlwbGllciA9IDE7CisKKyAgICAgICAgLy8gU29ydGluZyB3aWxsIGhhdmUgcHV0IHRoZSBu
dW1iZXIgbm9kZXMgZmlyc3QuCisgICAgICAgIHVuc2lnbmVkIGxlYWRpbmdOdW1iZXJOb2RlQ291
bnQgPSAwOworICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2NoaWxkcmVuKSB7CisgICAgICAg
ICAgICBhdXRvIG5vZGVUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG5vZGUuZ2V0
KCkpOworICAgICAgICAgICAgaWYgKG5vZGVUeXBlICE9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBtdWx0
aXBsaWVyICo9IG5vZGUtPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgICAgICsrbGVhZGluZ051bWJlck5vZGVDb3VudDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsK
KyAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuLnNp
emUoKSk7CisgICAgICAgIAorICAgICAgICAvLyBJZiByb290IGNvbnRhaW5zIG9ubHkgdHdvIGNo
aWxkcmVuLCBvbmUgb2Ygd2hpY2ggaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRhZ2Ugb3IgZGlt
ZW5zaW9uKSBhbmQgdGhlIG90aGVyIG9mCisgICAgICAgIC8vIHdoaWNoIGlzIGEgU3VtIHdob3Nl
IGNoaWxkcmVuIGFyZSBhbGwgbnVtZXJpYyB2YWx1ZXMsIG11bHRpcGx5IGFsbCBvZiB0aGUgU3Vt
4oCZcyBjaGlsZHJlbiBieSB0aGUgbnVtYmVyLCB0aGVuCisgICAgICAgIC8vIHJldHVybiB0aGUg
U3VtLgorICAgICAgICAvLyBUaGUgU3VtJ3MgY2hpbGRyZW4gc2ltcGxpZmljYXRpb24gd2lsbCBo
YXZlIGhhcHBlbmVkIGFscmVhZHkuCisgICAgICAgIGJvb2wgZGlkTXVsdGlwbHkgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQgJiYgbV9jaGlsZHJlbi5zaXplKCkg
LSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID09IDEpIHsKKyAgICAgICAgICAgIGF1dG8gbXVsdGlw
bGljYW5kQ2F0ZWdvcnkgPSBjYWxjVW5pdENhdGVnb3J5KHByaW1pdGl2ZVR5cGVGb3JDb21iaW5h
dGlvbihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkpOworICAgICAgICAgICAgaWYgKG11bHRpcGxp
Y2FuZENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7CisgICAgICAgICAg
ICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW4ubGFzdCgpLmNvcHlS
ZWYoKSk7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZT4obmV3Q2hpbGRyZW5bMF0uZ2V0KCkpLm11bHRpcGx5KG11bHRpcGxpZXIpOworICAgICAgICAg
ICAgICAgIGRpZE11bHRpcGx5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKSAmJiBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmNhbGNPcGVyYXRv
cigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg
bXVsdGlwbHlpbmcgd2l0aCBhbm90aGVyIG9wZXJhdGlvbiB0aGF0IGlzIGFuIGFkZGl0aW9uIGFu
ZCBhbGwgdGhlIGFkZGVkIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgLy8gYXJlIHBlcmNlbnRh
Z2VzIG9yIGRpbWVuc2lvbnMsIHdlIHNob3VsZCBtdWx0aXBseSBlYWNoIGNoaWxkIGFuZCBtYWtl
IHRoaXMgZXhwcmVzc2lvbiBhbgorICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uLgorICAgICAg
ICAgICAgICAgIGF1dG8gYWxsQ2hpbGRyZW5BcmVQcmltaXRpdmVWYWx1ZXMgPSBbXShjb25zdCBW
ZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbikgLT4gYm9vbAorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU+KGNoaWxkLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8m
IGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFz
dCgpLmdldCgpKS5jaGlsZHJlbigpOworICAgICAgICAgICAgICAgIGlmIChhbGxDaGlsZHJlbkFy
ZVByaW1pdGl2ZVZhbHVlcyhjaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGls
ZHJlbi5hcHBlbmQoY2hpbGQuY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRv
d25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQo
KSkubXVsdGlwbHkobXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgbV9vcGVyYXRvciA9IENhbGNPcGVyYXRvcjo6QWRkOworICAgICAgICAgICAg
ICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkaWRNdWx0aXBseSkgeworICAgICAgICAg
ICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG11
bHRpcGxpZXJOb2RlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUobXVsdGlwbGllciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKTsK
KyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtdWx0
aXBsaWVyTm9kZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50OyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlbltp
XS5jb3B5UmVmKCkpOworICAgICAgICB9CisKKyAgICAgICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9G
aXQoKTsKKyAgICAgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworICAgIH0K
KworICAgIGlmIChpc01pbk9yTWF4Tm9kZSgpICYmIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigpKSB7
CisgICAgICAgIGF1dG8gY29tYmluZWRVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2
ZVR5cGUoKTsKKyAgICAgICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JD
b21iaW5hdGlvbihjb21iaW5lZFVuaXRUeXBlKTsKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQorICAgICAgICAgICAgY29tYmluZWRVbml0VHlwZSA9
IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRlZ29yeSk7CisKKyAg
ICAgICAgZG91YmxlIHJlc29sdmVkVmFsdWUgPSBkb3VibGVWYWx1ZShjb21iaW5lZFVuaXRUeXBl
KTsKKyAgICAgICAgYXV0byBuZXdDaGlsZCA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNy
ZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc29sdmVkVmFsdWUsIGNvbWJpbmVkVW5p
dFR5cGUpKTsKKworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGRy
ZW4uYXBwZW5kKFdURk1vdmUobmV3Q2hpbGQpKTsKKyAgICB9Cit9CisKKy8vIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBsaWZ5LWEtY2FsY3VsYXRpb24tdHJlZQor
CitSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxp
ZnkoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSkKK3sKKyAgICByZXR1cm4g
c2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShyb290Tm9kZSksIDApOworfQorCitSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnlSZWN1cnNpdmUo
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSwgaW50IGRlcHRoKQoreworICAg
IGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8m
IG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUu
Z2V0KCkpOworICAgICAgICAKKyAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2Rl
LmNoaWxkcmVuKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlbi5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBjaGlsZCA9IGNoaWxkcmVuW2ldLmNvcHlS
ZWYoKTsKKyAgICAgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1v
dmUoY2hpbGQpLCBkZXB0aCArIDEpOworICAgICAgICAgICAgaWYgKG5ld05vZGUucHRyKCkgIT0g
Y2hpbGRyZW5baV0ucHRyKCkpCisgICAgICAgICAgICAgICAgY2hpbGRyZW5baV0gPSBXVEZNb3Zl
KG5ld05vZGUpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjTmVnYXRlTm9k
ZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1ND
YWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICBSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBjaGlsZCA9IG5lZ2F0ZU5vZGUuY2hpbGQoKTsKKyAgICAgICAgYXV0byBuZXdO
b2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7CisgICAg
ICAgIGlmIChuZXdOb2RlLnB0cigpICE9ICZuZWdhdGVOb2RlLmNoaWxkKCkpCisgICAgICAgICAg
ICBuZWdhdGVOb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOworICAgIH0gZWxzZSBpZiAo
aXM8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBpbnZlcnRO
b2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgpKTsKKyAgICAg
ICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hpbGQgPSBpbnZlcnROb2RlLmNoaWxkKCk7
CisgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1vdmUoY2hpbGQp
LCBkZXB0aCArIDEpOworICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSAmaW52ZXJ0Tm9kZS5j
aGlsZCgpKQorICAgICAgICAgICAgaW52ZXJ0Tm9kZS5zZXRDaGlsZChXVEZNb3ZlKG5ld05vZGUp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2ltcGxpZnlOb2RlKFdURk1vdmUocm9vdE5vZGUpLCBk
ZXB0aCk7Cit9CisKK1JlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25O
b2RlOjpzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSwg
aW50IGRlcHRoKQoreworICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290
Tm9kZSkpIHsKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhIHBlcmNlbnRhZ2UgdGhhdCB3aWxsIGJl
IHJlc29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSwgYW5kIHRoZXJlIGlzIGVub3VnaCBpbmZv
cm1hdGlvbgorICAgICAgICAvLyBhdmFpbGFibGUgdG8gcmVzb2x2ZSBpdCwgZG8gc28sIGFuZCBl
eHByZXNzIHRoZSByZXN1bHRpbmcgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgYXBwcm9wcmlhdGUgY2Fu
b25pY2FsCisgICAgICAgIC8vIHVuaXQuIFJldHVybiB0aGUgdmFsdWUuCisKKyAgICAgICAgLy8g
SWYgcm9vdCBpcyBhIGRpbWVuc2lvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgaW4gaXRzIGNhbm9u
aWNhbCB1bml0LCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uCisgICAgICAgIC8vIGF2
YWlsYWJsZSB0byBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgdW5pdCwgZG8gc28sIGFuZCBy
ZXR1cm4gdGhlIHZhbHVlLgorICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZU5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZS5nZXQoKSk7CisgICAgICAg
IHByaW1pdGl2ZVZhbHVlTm9kZS5jYW5vbmljYWxpemVVbml0KCk7CisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICAvLyBJZiByb290IGlzIGFuIG9wZXJhdG9y
IG5vZGUgdGhhdOKAmXMgbm90IG9uZSBvZiB0aGUgY2FsYy1vcGVyYXRvciBub2RlcywgYW5kIGFs
bCBvZiBpdHMgY2hpbGRyZW4gYXJlIG51bWVyaWMgdmFsdWVzCisgICAgLy8gd2l0aCBlbm91Z2gg
aW5mb3JtYXRpb24gdG8gY29tcHV0ZWQgdGhlIG9wZXJhdGlvbiByb290IHJlcHJlc2VudHMsIHJl
dHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgcm9vdOKAmXMgb3BlcmF0aW9uCisgICAgLy8gdXNp
bmcgaXRzIGNoaWxkcmVuLCBleHByZXNzZWQgaW4gdGhlIHJlc3VsdOKAmXMgY2Fub25pY2FsIHVu
aXQuCisgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSkpIHsKKyAgICAg
ICAgYXV0byYgY2FsY09wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9k
ZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICAvLyBEb24ndCBzaW1wbGlmeSBhdCB0aGUgcm9v
dCwgb3RoZXJ3aXNlIHdlIGxvc2UgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbiBmb3Igc2VyaWFsaXph
dGlvbi4KKyAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCkuc2l6ZSgpID09
IDEgJiYgZGVwdGgpCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjYWxjT3BlcmF0aW9uTm9k
ZS5jaGlsZHJlbigpWzBdKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9k
ZS5pc0NhbGNTdW1Ob2RlKCkpIHsKKyAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmhvaXN0
Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpBZGQpOworICAgICAgICAgICAgY2Fs
Y09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgeworICAgICAgICAgICAg
Y2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5KTsKKyAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJpbmVDaGlsZHJl
bigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUu
aXNNaW5Pck1heE5vZGUoKSkKKyAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJpbmVD
aGlsZHJlbigpOworCisgICAgICAgIC8vIElmIG9ubHkgb25lIGNoaWxkIHJlbWFpbnMsIHJldHVy
biB0aGUgY2hpbGQgKGV4Y2VwdCBhdCB0aGUgcm9vdCkuCisgICAgICAgIGF1dG8gc2hvdWxkQ29t
YmluZVBhcmVudFdpdGhPbmx5Q2hpbGQgPSBbXShjb25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSYg
cGFyZW50LCBpbnQgZGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnQuY2hp
bGRyZW4oKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIC8vIEFsd2F5cyBzaW1wbGlmeSBiZWxvdyB0aGUgcm9vdC4KKyAgICAgICAgICAg
IGlmIChkZXB0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAg
Ly8gQXQgdGhlIHJvb3QsIHByZXNlcnZlIHRoZSByb290IGZ1bmN0aW9uIGJ5IG9ubHkgbWVyZ2lu
ZyBub2RlcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLgorICAgICAgICAgICAgYXV0byYgY2hpbGQg
PSBwYXJlbnQuY2hpbGRyZW4oKS5maXJzdCgpOworICAgICAgICAgICAgaWYgKCFpczxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oY2hpbGQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgYXV0byBwYXJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRnJvbU9wZXJhdG9yKHBh
cmVudC5jYWxjT3BlcmF0b3IoKSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkRnVuY3Rpb24gPSBm
dW5jdGlvbkZyb21PcGVyYXRvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQu
Z2V0KCkpLmNhbGNPcGVyYXRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZEZ1bmN0aW9u
ID09IHBhcmVudEZ1bmN0aW9uOworICAgICAgICB9OworCisgICAgICAgIGlmIChzaG91bGRDb21i
aW5lUGFyZW50V2l0aE9ubHlDaGlsZChjYWxjT3BlcmF0aW9uTm9kZSwgZGVwdGgpKQorICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKS5maXJzdCgp
KTsKKworICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgaWYg
KGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgY2hpbGRO
b2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlLmdldCgpKS5jaGlsZCgp
OworICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWVyaWMgdmFsdWUsIHJldHVy
biBhbiBlcXVpdmFsZW50IG51bWVyaWMgdmFsdWUsIGJ1dCB3aXRoIHRoZSB2YWx1ZSBuZWdhdGVk
ICgwIC0gdmFsdWUpLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4o
Y2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5v
ZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkubmVnYXRlKCk7CisgICAgICAgICAgICByZXR1cm4g
Y2hpbGROb2RlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiByb2904oCZcyBj
aGlsZCBpcyBhIE5lZ2F0ZSBub2RlLCByZXR1cm4gdGhlIGNoaWxk4oCZcyBjaGlsZC4KKyAgICAg
ICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpLmNoaWxkKCk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgaWYg
KGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgY2hpbGRO
b2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgpKS5jaGlsZCgp
OworICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWJlciAobm90IGEgcGVyY2Vu
dGFnZSBvciBkaW1lbnNpb24pIHJldHVybiB0aGUgcmVjaXByb2NhbCBvZiB0aGUgY2hpbGTigJlz
IHZhbHVlLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGRO
b2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpLmlz
TnVtZXJpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KGNoaWxkTm9kZSkuaW52ZXJ0KCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGRO
b2RlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYW4gSW52
ZXJ0IG5vZGUsIHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgorICAgICAgICBpZiAoaXM8Q1NT
Q2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsKKworICAgICAgICByZXR1cm4g
V1RGTW92ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUp
OworfQorCitDU1NVbml0VHlwZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6cHJpbWl0aXZlVHlwZSgp
IGNvbnN0Cit7CisgICAgYXV0byB1bml0Q2F0ZWdvcnkgPSBjYXRlZ29yeSgpOworICAgIHN3aXRj
aCAodW5pdENhdGVnb3J5KSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRy
ZW4pCisgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TnVtYmVyKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVI7CisKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHsKKyAg
ICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIENTU1Vu
aXRUeXBlOjpDU1NfVU5LTk9XTjsKKworICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0g
MikgeworICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMF0tPmNhdGVnb3J5KCkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVu
WzFdLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBpZiAobV9jaGlsZHJlblsxXS0+Y2F0
ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgfQorICAgICAg
ICBDU1NVbml0VHlwZSBmaXJzdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7
CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgICAgICBp
ZiAoZmlyc3RUeXBlICE9IGNoaWxkLT5wcmltaXRpdmVUeXBlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmlyc3RUeXBlOworICAgIH0KKworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJl
cXVlbmN5OgorICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBtX2NoaWxkcmVuLmZpcnN0KCktPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgcmV0
dXJuIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeSh1bml0Q2F0ZWdvcnkp
OworCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktO
T1dOOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ1NTVW5p
dFR5cGU6OkNTU19VTktOT1dOOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKyAgICBub2Rl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIGZvciAo
YXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIGF1dG8gbm9kZSA9IGNoaWxkLT5j
cmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7CisgICAgICAgIGlmICghbm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShub2RlKSk7CisgICAgfQorCisgICAgLy8gUmV2ZXJzZSB0aGUgb3BlcmF0aW9u
IHdlIGRpZCB3aGVuIGNyZWF0aW5nIHRoaXMgbm9kZSwgcmVjb3ZlcmluZyBhIHN1aXRhYmxlIGRl
c3RpbmF0aW9uIGNhdGVnb3J5IGZvciBvdGhlcndpc2UtYW1iaWd1b3VzIG1pbi9tYXgvY2xhbXAg
bm9kZXMuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2F0ZWdvcnkgaXMgcmVhbGx5IG9ubHkgZ29v
ZCBlbm91Z2ggZm9yIHRoYXQgcHVycG9zZSBhbmQgaXMgbm90IGFjY3VyYXRlIGZvciBvdGhlciBu
b2RlIHR5cGVzOyB3ZSBjb3VsZCB1c2UgYSBib29sZWFuIGluc3RlYWQuCisgICAgYXV0byBkZXN0
aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgaWYgKGNh
dGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkKKyAgICAgICAg
ZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDsKKyAgICBl
bHNlIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIp
CisgICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI7CisKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4oV1RG
TW92ZShub2RlcyksIG1fb3BlcmF0b3IsIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworfQorCitkb3Vi
bGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVuaXRUeXBl
KSBjb25zdAoreworICAgIGJvb2wgYWxsb3dOdW1iZXJzID0gY2FsY09wZXJhdG9yKCkgPT0gQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseTsKKworICAgIHJldHVybiBldmFsdWF0ZShtX2NoaWxkcmVuLm1h
cChbJl0gKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIENTU1VuaXRUeXBlIGNoaWxkVHlwZSA9IHVu
aXRUeXBlOworICAgICAgICBpZiAoYWxsb3dOdW1iZXJzICYmIHVuaXRUeXBlICE9IENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSICYmIGNoaWxkLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpCisgICAgICAgICAgICBjaGlsZFR5cGUgPSBDU1NVbml0VHlwZTo6Q1NTX05V
TUJFUjsKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5kb3VibGVWYWx1ZShjaGlsZFR5cGUpOworICAg
IH0pKTsKK30KKworZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRlTGVuZ3RoUHgo
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAoYXV0byYgY2hpbGQpIHsK
KyAgICAgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpOwor
ICAgIH0pKTsKK30KKwordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdENv
bXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBj
b25zdAoreworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICBjaGls
ZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKwor
dm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgY2hpbGQtPmNvbGxlY3RE
aXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gc2hvdWxkT3V0
cHV0RW5jbG9zaW5nQ2FsYyA9IFtdKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcm9vdE5v
ZGUpIHsKKyAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSkpIHsK
KyAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4ocm9vdE5vZGUpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5vZGUuaXND
YWxjU3VtTm9kZSgpIHx8IG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KHJvb3RO
b2RlKTsKKyAgICB9OworICAgIAorICAgIGJvb2wgb3V0cHV0Q2FsYyA9IHNob3VsZE91dHB1dEVu
Y2xvc2luZ0NhbGMobm9kZSk7CisgICAgaWYgKG91dHB1dENhbGMpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCJjYWxjKCIpOworCisgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKG5vZGUsIGJ1aWxk
ZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKKworICAgIGlmIChvdXRwdXRDYWxjKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnKScpOworfQorCitzdGF0aWMgY29uc3QgY2hhciogZnVuY3Rpb25Q
cmVmaXhGb3JPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgewor
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRy
YWN0OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKKyAgICBjYXNlIENhbGNPcGVy
YXRvcjo6RGl2aWRlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuICIiOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHJldHVybiAibWluKCI7CisgICAg
Y2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogcmV0dXJuICJtYXgoIjsKKyAgICBjYXNlIENhbGNPcGVy
YXRvcjo6Q2xhbXA6IHJldHVybiAiY2xhbXAoIjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICIi
OworfQorCisvLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jc2VyaWFs
aXplLWEtY2FsY3VsYXRpb24tdHJlZT4KK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxk
Q1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zIHBhcmVucykKK3sKKyAgICAvLyBJZiBy
b290IGlzIGEgbnVtZXJpYyB2YWx1ZSwgb3IgYSBub24tbWF0aCBmdW5jdGlvbiwgc2VyaWFsaXpl
IHJvb3QgcGVyIHRoZSBub3JtYWwgcnVsZXMgZm9yIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4K
KyAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpIHsKKyAgICAgICAg
YXV0byYgdmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9k
ZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlTm9kZS5jdXN0b21DU1NUZXh0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2Rl
Pihub2RlKSkgeworICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KG5vZGUpOworCisgICAgICAgIGlmIChvcGVyYXRpb25Ob2RlLmlzQ2Fs
Y1N1bU5vZGUoKSkgeworICAgICAgICAgICAgLy8gSWYgcm9vdCBpcyBhIFN1bSBub2RlLCBsZXQg
cyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIuCisgICAgICAgICAgICBpZiAo
cGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgIC8vIFNpbXBsaWZpY2F0aW9uIGFscmVhZHkg
c29ydGVkIGNoaWxkcmVuLgorICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25O
b2RlLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpKTsKKyAg
ICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBjaGlsZCwgYW5kIGFwcGVuZCBp
dCB0byBzLgorICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0
KCksIGJ1aWxkZXIpOworCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBvZiByb290IGJl
eW9uZCB0aGUgZmlyc3Q6CisgICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIE5lZ2F0ZSBub2Rl
LCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIE5lZ2F0ZeKAmXMgY2hpbGQg
YW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBh
IG5lZ2F0aXZlIG51bWVyaWMgdmFsdWUsIGFwcGVuZCAiIC0gIiB0byBzLCB0aGVuIHNlcmlhbGl6
ZSB0aGUgbmVnYXRpb24gb2YgY2hpbGQgYXMgbm9ybWFsIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0
byBzLgorICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhcHBlbmQgIiArICIgdG8gcywgdGhlbiBz
ZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlmIChp
czxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgLSAiKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJz
aXZlKGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZC5nZXQoKSkuY2hpbGQoKSwgYnVp
bGRlcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlTm9kZS5pc05lZ2F0
aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgLSAiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgbmVnYXRpb24gb2YgY2hp
bGQuCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuaXRUeXBlID0gcHJpbWl0aXZlVmFs
dWVOb2RlLnZhbHVlKCkucHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoMCAtIHByaW1pdGl2ZVZhbHVlTm9kZS52YWx1ZSgpLmRvdWJsZVZhbHVl
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyh1bml0VHlwZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiArICIpOworICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGls
ZCwgYnVpbGRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXJlbnMgPT0g
R3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgeworICAgICAgICAgICAgLy8g
SWYgcm9vdCBpcyBhIFByb2R1Y3Qgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNv
bnRhaW5pbmcgIigiLgorICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6
SW5jbHVkZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKCcpOworCisgICAgICAg
ICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBjaGlsZHJlbi4KKyAgICAgICAg
ICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOworICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICAvLyBTZXJpYWxpemUgcm9v
dOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4KKyAgICAgICAgICAgIGJ1aWxk
Q1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyKTsKKworICAgICAgICAg
ICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhlIGZpcnN0OgorICAgICAgICAg
ICAgLy8gSWYgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUsIGFwcGVuZCAiIC8gIiB0byBzLCB0aGVu
IHNlcmlhbGl6ZSB0aGUgSW52ZXJ04oCZcyBjaGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8g
cy4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBwZW5kICIgKiAiIHRvIHMsIHRoZW4gc2Vy
aWFsaXplIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8
Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgiIC8gIik7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2
ZShkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkKCksIGJ1aWxk
ZXIpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICogIik7CisgICAgICAgICAgICAgICAg
YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSkKKyAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhbnl0aGluZyBidXQgYSBTdW0sIE5lZ2F0
ZSwgUHJvZHVjdCwgb3IgSW52ZXJ0IG5vZGUsIHNlcmlhbGl6ZSBhIG1hdGggZnVuY3Rpb24gZm9y
IHRoZQorICAgICAgICAvLyBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBub2RlIHR5cGUs
IHRyZWF0aW5nIHRoZSBub2Rl4oCZcyBjaGlsZHJlbiBhcyB0aGUgZnVuY3Rpb27igJlzCisgICAg
ICAgIC8vIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbiBhcmd1bWVudHMsIGFuZCByZXR1cm4g
dGhlIHJlc3VsdC4KKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25QcmVmaXhGb3JPcGVy
YXRvcihvcGVyYXRpb25Ob2RlLmNhbGNPcGVyYXRvcigpKSk7CisKKyAgICAgICAgYXV0byYgY2hp
bGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChjaGlsZHJl
bi5zaXplKCkpOworICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3Qo
KSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRy
ZW5baV0sIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpKSB7CisgICAgICAgIGF1
dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4obm9kZSk7CisgICAg
ICAgIC8vIElmIHJvb3QgaXMgYSBOZWdhdGUgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlh
bGx5IGNvbnRhaW5pbmcgIigtMSAqICIuCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCItMSAqIik7
CisgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShuZWdhdGVOb2RlLmNoaWxkKCksIGJ1aWxk
ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczxDU1NDYWxjSW52
ZXJ0Tm9kZT4obm9kZSkpIHsKKyAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9IGRvd25jYXN0PENT
U0NhbGNJbnZlcnROb2RlPihub2RlKTsKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhbiBJbnZlcnQg
bm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigxIC8gIi4KKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIjEgLyAiKTsKKyAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJz
aXZlKGludmVydE5vZGUuY2hpbGQoKSwgYnVpbGRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0Cit7CisgICAgdHMgPDwgImNhbGMgb3BlcmF0aW9uICIgPDwgbV9vcGVyYXRvciA8PCAiIChj
YXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGUgIiA8PCBwcmltaXRpdmVUeXBlKCkg
PDwgIikiOworCisgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7CisgICAgdHMg
PDwgbV9jaGlsZHJlbi5zaXplKCkgPDwgIiBjaGlsZHJlbiI7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgibm9kZSIsIGNoaWxkKTsK
K30KKworYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxzKGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgZXhwKSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gZXhwLnR5cGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUm
IG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUmPihleHApOwor
CisgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IG90aGVyLm1fY2hpbGRyZW4uc2l6ZSgpIHx8
IG1fb3BlcmF0b3IgIT0gb3RoZXIubV9vcGVyYXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmICghY29tcGFyZUNTU1ZhbHVlKG1fY2hpbGRyZW5baV0sIG90aGVyLm1fY2hpbGRy
ZW5baV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpldmFsdWF0ZU9wZXJhdG9yKENh
bGNPcGVyYXRvciBvcCwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNoaWxkcmVuKQoreworICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7CisgICAgICAgIGRvdWJs
ZSBzdW0gPSAwOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAg
ICAgICBzdW0gKz0gY2hpbGQ7CisgICAgICAgIHJldHVybiBzdW07CisgICAgfQorICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKKyAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9
PSAyKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC0gY2hpbGRyZW5bMV07CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAgIGRvdWJsZSBwcm9kdWN0ID0gMTsK
KyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAgcHJvZHVj
dCAqPSBjaGlsZDsKKyAgICAgICAgcmV0dXJuIHByb2R1Y3Q7CisgICAgfQorICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMSB8
fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0g
MSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOworICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLyBjaGlsZHJlblsxXTsKKyAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWluOiB7CisgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKKyAgICAgICAgZG91YmxlIG1pbmltdW0gPSBjaGlsZHJlblswXTsKKyAgICAgICAgZm9y
IChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBtaW5pbXVtID0gc3RkOjptaW4o
bWluaW11bSwgY2hpbGQpOworICAgICAgICByZXR1cm4gbWluaW11bTsKKyAgICB9CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDogeworICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisgICAgICAgIGRvdWJsZSBtYXhpbXVtID0gY2hpbGRyZW5bMF07CisgICAgICAgIGZvciAo
YXV0byBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAgbWF4aW11bSA9IHN0ZDo6bWF4KG1h
eGltdW0sIGNoaWxkKTsKKyAgICAgICAgcmV0dXJuIG1heGltdW07CisgICAgfQorICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpDbGFtcDogeworICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDMp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKKyAgICAgICAgZG91YmxlIG1pbiA9IGNoaWxkcmVuWzBdOworICAgICAgICBkb3VibGUg
dmFsdWUgPSBjaGlsZHJlblsxXTsKKyAgICAgICAgZG91YmxlIG1heCA9IGNoaWxkcmVuWzJdOwor
ICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4KSk7CisgICAg
fQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlv
bk5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
T3BlcmF0aW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxjT3BlcmF0aW9uTm9kZSBmaW5h
bCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+
IGNyZWF0ZShDYWxjT3BlcmF0b3IsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVm
dFNpZGUsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKTsKKyAgICBz
dGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGVTdW0oVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcyk7CisgICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlUHJvZHVjdChWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+JiYgdmFsdWVzKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25O
b2RlPiBjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yLCBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0
aW9uQ2F0ZWdvcnkpOworCisgICAgc3RhdGljIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNp
bXBsaWZ5KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYpOworCisgICAgc3RhdGljIHZvaWQg
YnVpbGRDU1NUZXh0KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYsIFN0cmluZ0J1aWxkZXIm
KTsKKworICAgIENhbGNPcGVyYXRvciBjYWxjT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29w
ZXJhdG9yOyB9CisgICAgYm9vbCBpc0NhbGNTdW1Ob2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVy
YXRvciA9PSBDYWxjT3BlcmF0b3I6OkFkZDsgfQorICAgIGJvb2wgaXNDYWxjUHJvZHVjdE5vZGUo
KSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk7IH0K
KyAgICBib29sIGlzTWluT3JNYXhOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBD
YWxjT3BlcmF0b3I6Ok1pbiB8fCBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWF4OyB9Cisg
ICAgYm9vbCBzaG91bGRTb3J0Q2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBpc0NhbGNTdW1Ob2Rl
KCkgfHwgaXNDYWxjUHJvZHVjdE5vZGUoKTsgfQorCisgICAgdm9pZCBob2lzdENoaWxkcmVuV2l0
aE9wZXJhdG9yKENhbGNPcGVyYXRvcik7CisgICAgdm9pZCBjb21iaW5lQ2hpbGRyZW4oKTsKKyAg
ICAKKyAgICBib29sIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNvbnN0OworCisgICAgY29uc3Qg
VmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkcmVuOyB9CisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
PiYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKK3ByaXZhdGU6CisgICAgQ1NT
Q2FsY09wZXJhdGlvbk5vZGUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJh
dG9yIG9wLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkKKyAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUoY2F0ZWdvcnkpCisgICAgICAgICwgbV9vcGVyYXRvcihvcCkKKyAgICB7CisgICAgICAg
IG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKyAgICAgICAgbV9jaGlsZHJl
bi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShsZWZ0U2lkZSkpOworICAgICAgICBtX2NoaWxkcmVu
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJpZ2h0U2lkZSkpOworICAgIH0KKworICAgIENTU0Nh
bGNPcGVyYXRpb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENhbGNPcGVyYXRv
ciBvcCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIGNoaWxkcmVuKQorICAg
ICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKKyAgICAgICAgLCBtX29wZXJh
dG9yKG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpCisgICAgewor
ICAgIH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNPcGVy
YXRpb247IH0KKworICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAg
IHJldHVybiAhZG91YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKTsKKyAgICB9CisKKyAgICBib29s
IGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9u
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKworICAgIENT
U1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgZG91Ymxl
VmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBjb21wdXRlTGVuZ3Ro
UHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1By
b3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFs
OworCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIHN0YXRp
YyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIGdldE51bWJlclNpZGUoQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBsZWZ0U2lkZSwgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUpCisgICAgewor
ICAgICAgICBpZiAobGVmdFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCisgICAgICAgICAgICByZXR1cm4gJmxlZnRTaWRlOworICAgICAgICBpZiAocmlnaHRT
aWRlLmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAg
ICAgcmV0dXJuICZyaWdodFNpZGU7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIGRvdWJsZSBldmFsdWF0ZShjb25zdCBWZWN0b3I8ZG91YmxlPiYgY2hpbGRyZW4pIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZXZhbHVhdGVPcGVyYXRvcihtX29wZXJhdG9yLCBjaGls
ZHJlbik7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBldmFsdWF0ZU9wZXJhdG9yKENhbGNP
cGVyYXRvciwgY29uc3QgVmVjdG9yPGRvdWJsZT4mKTsKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4gc2ltcGxpZnlOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYs
IGludCBkZXB0aCk7CisgICAgc3RhdGljIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNpbXBs
aWZ5UmVjdXJzaXZlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGludCBkZXB0aCk7Cisg
ICAgCisgICAgZW51bSBjbGFzcyBHcm91cGluZ1BhcmVucyB7CisgICAgICAgIE9taXQsCisgICAg
ICAgIEluY2x1ZGUKKyAgICB9OworICAgIHN0YXRpYyB2b2lkIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2
ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmLCBTdHJpbmdCdWlsZGVyJiwgR3JvdXBpbmdQ
YXJlbnMgPSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSk7CisKKyAgICBDYWxjT3BlcmF0b3IgbV9v
cGVyYXRvcjsKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG1fY2hpbGRy
ZW47Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05f
Tk9ERShDU1NDYWxjT3BlcmF0aW9uTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY09wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUu
aCIKKworI2luY2x1ZGUgIkNTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCIKKyNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIK
KyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNz
aW9uTnVtYmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoV1RG
TW92ZSh2YWx1ZSkpKTsKK30KKworUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShkb3VibGUgdmFsdWUsIENTU1VuaXRUeXBl
IHR5cGUpCit7CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5cGUpKSk7Cit9CisKK1N0cmlu
ZyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV92YWx1ZS0+Y3NzVGV4dCgpOworfQorCitDU1NVbml0VHlwZSBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworfQorCitDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkK
KyAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYWxjVW5pdENhdGVnb3J5KHZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkpKQorICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKK3sKK30KKworLy8g
RklYTUU6IFVzZSBjYWxjVW5pdENhdGVnb3J5PworYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjppc051bWVyaWNWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWUtPmlzTGVu
Z3RoKCkgfHwgbV92YWx1ZS0+aXNOdW1iZXIoKSB8fCBtX3ZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8
fCBtX3ZhbHVlLT5pc0FuZ2xlKCkKKyAgICAgICAgfHwgbV92YWx1ZS0+aXNUaW1lKCkgfHwgbV92
YWx1ZS0+aXNSZXNvbHV0aW9uKCkgfHwgbV92YWx1ZS0+aXNGbGV4KCkgfHwgbV92YWx1ZS0+aXNG
cmVxdWVuY3koKTsKK30KKworYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc05lZ2F0
aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOdW1lcmljVmFsdWUoKSAmJiBtX3ZhbHVlLT5k
b3VibGVWYWx1ZSgpIDwgMC4wOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
Om5lZ2F0ZSgpCit7CisgICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVlKCkpOworICAgIG1fdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuMCAtIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6aW52ZXJ0KCkKK3sKKyAgICBBU1NFUlQoaXNOdW1lcmljVmFsdWUoKSk7CisgICAg
aWYgKCFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpKQorICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7CisKKyAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSgxLjAgLyBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3ZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmFkZChj
b25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiBub2RlLCBVbml0Q29udmVyc2lvbiB1bml0
Q29udmVyc2lvbikKK3sKKyAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFsdWUtPnByaW1pdGl2ZVR5
cGUoKTsKKworICAgIHN3aXRjaCAodW5pdENvbnZlcnNpb24pIHsKKyAgICBjYXNlIFVuaXRDb252
ZXJzaW9uOjpJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBVbml0Q29udmVyc2lvbjo6UHJlc2VydmU6CisgICAgICAgIEFTU0VS
VChub2RlLnByaW1pdGl2ZVR5cGUoKSA9PSB2YWx1ZVR5cGUpOworICAgICAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpICsgbm9kZS5k
b3VibGVWYWx1ZSh2YWx1ZVR5cGUpLCB2YWx1ZVR5cGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFVuaXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU6IHsKKyAgICAgICAgYXV0byB2YWx1ZUNh
dGVnb3J5ID0gdW5pdENhdGVnb3J5KHZhbHVlVHlwZSk7CisgICAgICAgIC8vIEZJWE1FOiBJdCdz
IGF3a3dhcmQgdGhhdCBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5KCkgaGFzIHNwZWNpYWwg
aGFuZGxpbmcgZm9yIENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudC4KKyAgICAgICAgYXV0byBjYW5v
bmljYWxUeXBlID0gdmFsdWVDYXRlZ29yeSA9PSBDU1NVbml0Q2F0ZWdvcnk6OlBlcmNlbnQgPyBD
U1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UgOiBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5
KHZhbHVlQ2F0ZWdvcnkpOworICAgICAgICBBU1NFUlQoY2Fub25pY2FsVHlwZSAhPSBDU1NVbml0
VHlwZTo6Q1NTX1VOS05PV04pOworICAgICAgICBkb3VibGUgbGVmdFZhbHVlID0gbV92YWx1ZS0+
ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7CisgICAgICAgIGRvdWJsZSByaWdodFZhbHVlID0g
bm9kZS5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKKyAgICAgICAgbV92YWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVmdFZhbHVlICsgcmlnaHRWYWx1ZSwgY2Fub25pY2FsVHlw
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkoZG91YmxlIG11bHRpcGxpZXIpCit7CisgICAgYXV0byB2
YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgQVNTRVJUKGhhc0RvdWJs
ZVZhbHVlKHZhbHVlVHlwZSkpOworICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKHZhbHVlVHlwZSkgKiBtdWx0aXBsaWVyLCB2YWx1ZVR5
cGUpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbnZlcnRUb1VuaXRU
eXBlKENTU1VuaXRUeXBlIHVuaXRUeXBlKQoreworICAgIEFTU0VSVCh1bml0Q2F0ZWdvcnkodW5p
dFR5cGUpID09IHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKTsKKyAgICBk
b3VibGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7CisgICAgbV92
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmV3VmFsdWUsIHVuaXRUeXBlKTsKK30K
Kwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmljYWxpemVVbml0KCkKK3sK
KyAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1f
dmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgaWYgKGNhdGVnb3J5ID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok90aGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNhbm9uaWNhbFR5
cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOwor
ICAgIGlmIChjYW5vbmljYWxUeXBlID09IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZG91YmxlIG5ld1ZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFsdWUo
Y2Fub25pY2FsVHlwZSk7CisgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
bmV3VmFsdWUsIGNhbm9uaWNhbFR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lv
bihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OdW1i
ZXI+KG1fdmFsdWUtPmZsb2F0VmFsdWUoKSk7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGg6CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3Ro
PihMZW5ndGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpLCBM
ZW5ndGhUeXBlOjpGaXhlZCkpOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6IHsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG1fdmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uPihjb252
ZXJzaW9uRGF0YSkpOworICAgIH0KKyAgICAvLyBPbmx5IHR5cGVzIHRoYXQgY291bGQgYmUgcGFy
dCBvZiBhIExlbmd0aCBleHByZXNzaW9uIGNhbiBiZSBjb252ZXJ0ZWQKKyAgICAvLyB0byBhIENh
bGNFeHByZXNzaW9uTm9kZS4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciBtYWtl
cyBubyBzZW5zZSBhcyBhIExlbmd0aC4KKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKKyAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpGcmVxdWVuY3k6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitkb3VibGUgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Cit7CisgICAg
aWYgKGhhc0RvdWJsZVZhbHVlKHVuaXRUeXBlKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgQVNTRVJUKHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpID09IHVu
aXRDYXRlZ29yeSh1bml0VHlwZSkpLCBidXQgb25seSB3aGVuIGFsbCBjYWxsZXJzIGFyZSBmaXhl
ZCAoZS5nLiB3ZWJraXQub3JnL2IvMjA0ODI2KS4KKyAgICAgICAgaWYgKHVuaXRDYXRlZ29yeSht
X3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpICE9IHVuaXRDYXRlZ29yeSh1bml0VHlwZSkpIHsKKyAg
ICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNhbGxpbmcgZG91Ymxl
VmFsdWUoKSB3aXRoIHVuaXQgIiA8PCB1bml0VHlwZSA8PCAiIG9uIGEgbm9kZSBvZiB1bml0IHR5
cGUgIiA8PCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPDwgIiB3aGljaCBpcyBpbmNvbXBhdGli
bGUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7CisgICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgICAgIHJldHVybiBtX3ZhbHVl
LT5jb21wdXRlTGVuZ3RoPGRvdWJsZT4oY29udmVyc2lvbkRhdGEpOworICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlcjoKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7CisgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVw
ZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBt
X3ZhbHVlLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwor
fQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RSb290Q29t
cHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNv
bnN0Cit7CisgICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5k
ZW5jaWVzKHZhbHVlcyk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNa
ZXJvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7Cit9CisK
K2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZXF1YWxzKGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWUo
bV92YWx1ZSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSY+KG90
aGVyKS5tX3ZhbHVlKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICJ2YWx1ZSAiIDw8IG1fdmFsdWUt
PmN1c3RvbUNTU1RleHQoKSA8PCAiIChjYXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5
cGU6ICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsKK30KKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CitjbGFzcyBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhOworCitlbnVtIENTU1Byb3BlcnR5SUQgOiB1aW50MTZfdDsKKwor
Y2xhc3MgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4gY3JlYXRlKFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4mJik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NVbml0VHlwZSk7CisKKyAgICBTdHJpbmcgY3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0OworCisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNv
bnN0IGZpbmFsOworCisgICAgYm9vbCBpc051bWVyaWNWYWx1ZSgpIGNvbnN0OworICAgIGJvb2wg
aXNOZWdhdGl2ZSgpIGNvbnN0OworCisgICAgdm9pZCBuZWdhdGUoKTsKKyAgICB2b2lkIGludmVy
dCgpOworCisgICAgZW51bSBjbGFzcyBVbml0Q29udmVyc2lvbiB7CisgICAgICAgIEludmFsaWQs
CisgICAgICAgIFByZXNlcnZlLAorICAgICAgICBDYW5vbmljYWxpemUKKyAgICB9OworICAgIHZv
aWQgYWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmLCBVbml0Q29udmVyc2lvbiA9
IFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZSk7CisgICAgdm9pZCBtdWx0aXBseShkb3VibGUpOwor
CisgICAgdm9pZCBjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlwZSk7CisgICAgdm9pZCBjYW5v
bmljYWxpemVVbml0KCk7CisKKyAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1pl
cm8oKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUmIG90aGVyKSBjb25zdCBmaW5hbDsKKyAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFsdWU7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NT
VW5pdFR5cGUpIGNvbnN0IGZpbmFsOworCisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7
CisKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdmFsdWU7Cit9OworCit9CisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBl
OjpDc3NDYWxjUHJpbWl0aXZlVmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKKworI2luY2x1
ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oIgorI2luY2x1ZGUgIkNTU0NhbGNJbnZl
cnROb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1ND
YWxjT3BlcmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUu
aCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdl
LmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUgIkNh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkxlbmd0
aC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1Mo
Y29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKK3N0YXRpYyBS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgTGVuZ3RoJiwgY29u
c3QgUmVuZGVyU3R5bGUmKTsKKworc3RhdGljIGlubGluZSBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+IGNyZWF0ZUJsZW5kSGFsZihjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBmbG9hdCBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gQ1NTQ2FsY09wZXJh
dGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBjcmVhdGVDU1MobGVuZ3Ro
LCBzdHlsZSksCisgICAgICAgIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByb2dyZXNzLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikp
KTsKK30KKworc3RhdGljIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gY3JlYXRl
Q1NTKGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5v
ZGVzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgVmVjdG9yPFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CisgICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobm9kZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2RlcykgeworICAgICAg
ICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1MoKm5vZGUsIHN0eWxlKTsKKyAgICAgICAgaWYgKCFj
c3NOb2RlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHZhbHVlcy51bmNoZWNrZWRB
cHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVl
czsKK30KKworc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhj
b25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
K3sKKyAgICBzd2l0Y2ggKG5vZGUudHlwZSgpKSB7CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpOdW1iZXI6IHsKKyAgICAgICAgZmxvYXQgdmFsdWUgPSBkb3duY2FzdDxDYWxjRXhw
cmVzc2lvbk51bWJlcj4obm9kZSkudmFsdWUoKTsgLy8gZG91YmxlPworICAgICAgICByZXR1cm4g
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7CisgICAgfQorICAgIGNhc2UgQ2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoOiB7CisgICAgICAgIGF1dG8mIGxlbmd0aCA9IGRv
d25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihub2RlKS5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KCFsZW5ndGguaXNQZXJjZW50KCkgJiYgbGVuZ3RoLmlzWmVybygpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBjcmVhdGVDU1MobGVuZ3RoLCBzdHlsZSk7Cisg
ICAgfQorCisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbjogeworICAg
ICAgICBhdXRvIGNoaWxkTm9kZSA9IGNyZWF0ZUNTUygqZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25O
ZWdhdGlvbj4obm9kZSkuY2hpbGQoKSwgc3R5bGUpOworICAgICAgICBpZiAoIWNoaWxkTm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ1NTQ2FsY05lZ2F0
ZU5vZGU6OmNyZWF0ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorICAgIGNh
c2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uOiB7CisgICAgICAgIGF1dG8gY2hp
bGROb2RlID0gY3JlYXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4obm9k
ZSkuY2hpbGQoKSwgc3R5bGUpOworICAgICAgICBpZiAoIWNoaWxkTm9kZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0
ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorICAgIGNhc2UgQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uOiB7CisgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUg
PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4obm9kZSk7CisgICAgICAgIGF1dG8m
IG9wZXJhdGlvbkNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOworICAgICAgICBD
YWxjT3BlcmF0b3Igb3AgPSBvcGVyYXRpb25Ob2RlLmdldE9wZXJhdG9yKCk7CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsK
KyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4s
IHN0eWxlKTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09
IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2hpbGRyZW5bMF0pOworICAgICAg
ICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShjaGls
ZHJlbikpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDog
eworICAgICAgICAgICAgQVNTRVJUKG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSA9PSAyKTsKKwor
ICAgICAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7Cisg
ICAgICAgICAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcGVyYXRpb25DaGlsZHJl
bi5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIGZpcnN0Q2hpbGQgPSBj
cmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzBdLCBzdHlsZSk7CisgICAgICAgICAgICBhdXRv
IHNlY29uZENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblsxXSwgc3R5bGUpOwor
CisgICAgICAgICAgICBpZiAoIXNlY29uZENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBm
aXJzdENoaWxkOworCisgICAgICAgICAgICBhdXRvIG5lZ2F0ZU5vZGUgPSBDU1NDYWxjTmVnYXRl
Tm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAg
aWYgKCFmaXJzdENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBuZWdhdGVOb2RlOworCisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUobmVnYXRlTm9kZSkpOworCisgICAgICAg
ICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKHZhbHVl
cykpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTogewor
ICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwg
c3R5bGUpOworICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogeworICAgICAgICAgICAgQVNTRVJUKG9wZXJh
dGlvbkNoaWxkcmVuLnNpemUoKSA9PSAyKTsKKworICAgICAgICAgICAgVmVjdG9yPFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CisgICAgICAgICAgICB2YWx1ZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBhdXRvIGZpcnN0Q2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVu
WzBdLCBzdHlsZSk7CisgICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2hpbGQgPSBjcmVh
dGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7CisgICAgICAgICAgICBpZiAoIXNl
Y29uZENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
YXV0byBpbnZlcnROb2RlID0gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZShzZWNvbmRDaGlsZC5y
ZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChmaXJzdENoaWxk
LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChXVEZNb3ZlKGlu
dmVydE5vZGUpKTsKKworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVQcm9kdWN0KGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpKTsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgorICAgICAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWF4OgorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHsKKyAgICAg
ICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxl
KTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChvcCwgV1RGTW92ZShjaGlsZHJlbiksIG9wZXJhdGlvbk5v
ZGUuZGVzdGluYXRpb25DYXRlZ29yeSgpKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6
OkJsZW5kTGVuZ3RoOiB7CisgICAgICAgIC8vIEZJWE1FOiAoaHR0cDovL3dlYmtpdC5vcmcvYi8x
MjIwMzYpIENyZWF0ZSBhIENTU0NhbGNFeHByZXNzaW9uTm9kZSBlcXVpdmFsZW50IG9mIENhbGNF
eHByZXNzaW9uQmxlbmRMZW5ndGguCisgICAgICAgIGF1dG8mIGJsZW5kID0gZG93bmNhc3Q8Q2Fs
Y0V4cHJlc3Npb25CbGVuZExlbmd0aD4obm9kZSk7CisgICAgICAgIGZsb2F0IHByb2dyZXNzID0g
YmxlbmQucHJvZ3Jlc3MoKTsKKyAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGUoQ2FsY09wZXJhdG9yOjpBZGQsIGNyZWF0ZUJsZW5kSGFsZihibGVuZC5mcm9tKCksIHN0
eWxlLCAxIC0gcHJvZ3Jlc3MpLCBjcmVhdGVCbGVuZEhhbGYoYmxlbmQudG8oKSwgc3R5bGUsIHBy
b2dyZXNzKSk7CisgICAgfQorICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6VW5kZWZp
bmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVD
U1MoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAg
ICBzd2l0Y2ggKGxlbmd0aC50eXBlKCkpIHsKKyAgICBjYXNlIExlbmd0aFR5cGU6OlBlcmNlbnQ6
CisgICAgY2FzZSBMZW5ndGhUeXBlOjpGaXhlZDoKKyAgICAgICAgcmV0dXJuIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aCwg
c3R5bGUpKTsKKyAgICBjYXNlIExlbmd0aFR5cGU6OkNhbGN1bGF0ZWQ6CisgICAgICAgIHJldHVy
biBjcmVhdGVDU1MobGVuZ3RoLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCksIHN0eWxl
KTsKKyAgICBjYXNlIExlbmd0aFR5cGU6OkF1dG86CisgICAgY2FzZSBMZW5ndGhUeXBlOjpJbnRy
aW5zaWM6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpNaW5JbnRyaW5zaWM6CisgICAgY2FzZSBMZW5n
dGhUeXBlOjpNaW5Db250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6TWF4Q29udGVudDoKKyAg
ICBjYXNlIExlbmd0aFR5cGU6OkZpbGxBdmFpbGFibGU6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpG
aXRDb250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6UmVsYXRpdmU6CisgICAgY2FzZSBMZW5n
dGhUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ1NTQ2FsY1ZhbHVlOjpDU1NDYWxjVmFsdWUoUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBleHByZXNzaW9uLCBib29sIHNob3VsZENsYW1wVG9O
b25OZWdhdGl2ZSkKKyAgICA6IENTU1ZhbHVlKENhbGN1bGF0aW9uQ2xhc3MpCisgICAgLCBtX2V4
cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKKyAgICAsIG1fc2hvdWxkQ2xhbXBUb05vbk5l
Z2F0aXZlKHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSkKK3sKK30KKworQ1NTQ2FsY1ZhbHVlOjp+
Q1NTQ2FsY1ZhbHVlKCkgPSBkZWZhdWx0OworCitDYWxjdWxhdGlvbkNhdGVnb3J5IENTU0NhbGNW
YWx1ZTo6Y2F0ZWdvcnkoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4cHJlc3Npb24tPmNhdGVn
b3J5KCk7Cit9CisKK0NTU1VuaXRUeXBlIENTU0NhbGNWYWx1ZTo6cHJpbWl0aXZlVHlwZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZXhwcmVzc2lvbi0+cHJpbWl0aXZlVHlwZSgpOworfQorCitS
ZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVl
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAor
eworICAgIHJldHVybiBDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUobV9leHByZXNzaW9uLT5jcmVh
dGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSksIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0
aXZlID8gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgOiBWYWx1ZVJhbmdlOjpBbGwpOworfQorCit2
b2lkIENTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5nZShWYWx1ZVJhbmdlIHJhbmdl
KQoreworICAgIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID0gcmFuZ2UgIT0gVmFsdWVSYW5n
ZTo6QWxsOworfQorCit2b2lkIENTU0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAorewor
ICAgIG1fZXhwcmVzc2lvbi0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMo
dmFsdWVzKTsKK30KKwordm9pZCBDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0
Cit7CisgICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXModmFsdWVzKTsKK30KKworU3RyaW5nIENTU0NhbGNWYWx1ZTo6Y3VzdG9tQ1NTVGV4
dCgpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjpidWlsZENTU1RleHQobV9leHByZXNzaW9uLmdldCgpLCBidWlsZGVyKTsKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitib29sIENTU0NhbGNWYWx1ZTo6ZXF1
YWxzKGNvbnN0IENTU0NhbGNWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBh
cmVDU1NWYWx1ZShtX2V4cHJlc3Npb24sIG90aGVyLm1fZXhwcmVzc2lvbik7Cit9CisKK2lubGlu
ZSBkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91YmxlIHZhbHVl
KSBjb25zdAoreworICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAmJiB2YWx1
ZSA8IDAgPyAwIDogdmFsdWU7Cit9CisKK2RvdWJsZSBDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdlKG1fZXhwcmVzc2lv
bi0+ZG91YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKSk7Cit9CisKK2RvdWJsZSBDU1NDYWxjVmFs
dWU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252
ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdlKG1f
ZXhwcmVzc2lvbi0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKSk7Cit9CisKK2Jvb2wg
Q1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihDU1NWYWx1ZUlEIGZ1bmN0aW9uSWQpCit7Cisg
ICAgc3dpdGNoIChmdW5jdGlvbklkKSB7CisgICAgY2FzZSBDU1NWYWx1ZUNhbGM6CisgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdENhbGM6CisgICAgY2FzZSBDU1NWYWx1ZU1pbjoKKyAgICBjYXNlIENT
U1ZhbHVlTWF4OgorICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ZhbHVlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25z
dAoreworICAgIHRzIDw8IGluZGVudCA8PCAiKCIgPDwgIkNTU0NhbGNWYWx1ZSI7CisKKyAgICBU
ZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKKyAgICBtdWx0aWxpbmVTdHJlYW0uc2V0SW5kZW50
KHRzLmluZGVudCgpICsgMik7CisKKyAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJz
aG91bGQgY2xhbXAgbm9uLW5lZ2F0aXZlIiwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUpOwor
ICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoImV4cHJlc3Npb24iLCBtX2V4cHJlc3Np
b24uZ2V0KCkpOworCisgICAgdHMgPDwgbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKKyAgICB0
cyA8PCAiKVxuIjsKK30KKworUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVh
dGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5z
LCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgcmFu
Z2UpCit7CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNlcihkZXN0aW5hdGlv
bkNhdGVnb3J5KTsKKyAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VDYWxjKHRva2Vu
cywgZnVuY3Rpb24pOworICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKGV4cHJlc3Np
b24ucmVsZWFzZU5vbk51bGwoKSwgcmFuZ2UgIT0gVmFsdWVSYW5nZTo6QWxsKSk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUgIiA8PCAq
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorUmVmUHRyPENTU0NhbGNWYWx1
ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgdmFsdWUsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBhdXRvIGV4cHJlc3Npb24gPSBjcmVhdGVD
U1ModmFsdWUuZXhwcmVzc2lvbigpLCBzdHlsZSk7CisgICAgaWYgKCFleHByZXNzaW9uKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc2ltcGxpZmllZEV4cHJlc3Npb24gPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgp
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1ZShXVEZNb3Zl
KHNpbXBsaWZpZWRFeHByZXNzaW9uKSwgdmFsdWUuc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkp
KTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjVmFsdWU6OmNy
ZWF0ZSBmcm9tIENhbGN1bGF0aW9uVmFsdWU6ICIgPDwgKnJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q1NTQ2FsY1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICB2YWx1ZS5kdW1wKHRzKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNWYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGU7CitjbGFzcyBDU1NQYXJzZXJUb2tlblJhbmdl
OworY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKK2NsYXNzIFJlbmRlclN0eWxlOwor
CitlbnVtIGNsYXNzIENTU1VuaXRUeXBlIDogdWludDhfdDsKK2VudW0gY2xhc3MgQ2FsY3VsYXRp
b25DYXRlZ29yeSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIFZhbHVlUmFuZ2UgOiB1aW50OF90Owor
CitjbGFzcyBDU1NDYWxjVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlv
biwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGlu
YXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSk7CisgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFs
dWU+IGNyZWF0ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsK
KyAgICB+Q1NTQ2FsY1ZhbHVlKCk7CisKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
KCkgY29uc3Q7CisgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3Q7CisgICAgZG91YmxlIGNv
bXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3Q7Cisg
ICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0OworCisgICAgUmVmPENhbGN1bGF0
aW9uVmFsdWU+IGNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYpIGNvbnN0OworICAgIHZvaWQgc2V0UGVybWl0dGVkVmFsdWVSYW5nZShWYWx1ZVJh
bmdlKTsKKworICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMo
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OworICAgIHZvaWQgY29sbGVjdERpcmVjdFJv
b3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25z
dDsKKworICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CisgICAgYm9vbCBlcXVhbHMo
Y29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNDYWxj
RnVuY3Rpb24oQ1NTVmFsdWVJRCk7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIENTU0NhbGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYmLCBib29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7CisKKyAgICBkb3VibGUgY2xhbXBU
b1Blcm1pdHRlZFJhbmdlKGRvdWJsZSkgY29uc3Q7CisKKyAgICBjb25zdCBSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247CisgICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25O
ZWdhdGl2ZTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0
IENTU0NhbGNWYWx1ZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5oIgogCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTQ3Jvc3NmYWRlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFpbnRJbWFnZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVk
ZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgogI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgog
I2luY2x1ZGUgIkNvbG9yTHVtaW5hbmNlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgpAQCAtOTQsNyAr
OTUsNyBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyT3JQCiAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhl
IHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcC4KKy8vIEZJWE1FOiBj
b25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJzaW5nIGxvZ2ljIGZyb20gQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyLgogY2xhc3MgQ2FsY1BhcnNlciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
Q2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdl
OjpBbGwsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUu
Y3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxh
dGlvblZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI4MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0KLSNpbmNsdWRlICJMZW5ndGhG
dW5jdGlvbnMuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxDYWxjdWxhdGlvblZhbHVlPiBD
YWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4gdmFsdWUsIFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2FsY3VsYXRpb25WYWx1ZShXVEZNb3ZlKHZhbHVlKSwgcmFuZ2UpKTsKLX0KLQotZmxvYXQgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXI6OmV2YWx1YXRlKGZsb2F0KSBjb25zdAotewotICAgIHJldHVybiBt
X3ZhbHVlOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9uTnVtYmVyOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAotewotICAgIHRzIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3Rp
bmdJbnRlZ2VycyhtX3ZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6b3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewotICAgIHJl
dHVybiBpczxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0
PENhbGNFeHByZXNzaW9uTnVtYmVyPihvdGhlcik7Ci19Ci0KLWZsb2F0IENhbGN1bGF0aW9uVmFs
dWU6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAgIGZsb2F0IHJlc3VsdCA9
IG1fZXhwcmVzc2lvbi0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgIC8vIEZJWE1FOiBUaGlzIHRl
c3Qgd2FzIG9yaWdpbmFsbHkgbmVlZGVkIHdoZW4gd2UgZGlkIG5vdCBkZXRlY3QgZGl2aXNpb24g
YnkgemVybyBhdCBwYXJzZSB0aW1lLgotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlz
IG5vdyB1bm5lZWRlZCBjb2RlIGFuZCBjYW4gYmUgcmVtb3ZlZC4KLSAgICBpZiAoc3RkOjppc25h
bihyZXN1bHQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRv
Tm9uTmVnYXRpdmUgJiYgcmVzdWx0IDwgMCA/IDAgOiByZXN1bHQ7Ci19Ci0KLWZsb2F0IENhbGNF
eHByZXNzaW9uTmVnYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAg
IHJldHVybiAtbV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOwotfQotCi1ib29sIENhbGNFeHBy
ZXNzaW9uTmVnYXRpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhl
cikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIp
ICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRpb24+KG90aGVyKTsKLX0K
LQotdm9pZCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25z
dAotewotICAgIHRzIDw8ICItKCI7Ci0gICAgdHMgPDwgKm1fY2hpbGQ7Ci0gICAgdHMgPDwgIiki
OwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYSwg
Y29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYikKLXsKLSAgICByZXR1cm4gKmEuY2hpbGQo
KSA9PSAqYi5jaGlsZCgpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZXZh
bHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDEuMGYgLyBtX2NoaWxk
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb246
OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIjEuMCAvICIgPDwgIigi
OwotICAgIHRzIDw8ICptX2NoaWxkOwotICAgIHRzIDw8ICIpIjsKLX0KLQotYm9vbCBDYWxjRXhw
cmVzc2lvbkludmVyc2lvbjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90
aGVyKSBjb25zdAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4ob3Ro
ZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcik7
Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYgYSwg
Y29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mIGIpCi17Ci0gICAgcmV0dXJuICphLmNoaWxk
KCkgPT0gKmIuY2hpbGQoKTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246OmV2
YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAgIHN3aXRjaCAobV9vcGVyYXRvcikg
ewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsKLSAgICAgICAgZmxvYXQgc3VtID0gMDsK
LSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBzdW0g
Kz0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHN1bTsKLSAgICB9
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7Ci0gICAgICAgIC8vIEZJWE1FCi0g
ICAgICAgIEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKTsKLSAgICAgICAgZmxvYXQgbGVm
dCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgZmxvYXQgcmln
aHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBs
ZWZ0IC0gcmlnaHQ7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTogewot
ICAgICAgICBmbG9hdCBwcm9kdWN0ID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1f
Y2hpbGRyZW4pCi0gICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1
ZSk7Ci0gICAgICAgIHJldHVybiBwcm9kdWN0OwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6RGl2aWRlOiB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEFTU0VSVChtX2NoaWxkcmVu
LnNpemUoKSA9PSAxIHx8IG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpOwotICAgICAgICBpZiAobV9j
aGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0IGxlZnQgPSBtX2NoaWxkcmVu
WzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZsb2F0IHJpZ2h0ID0gbV9jaGlsZHJl
blsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICByZXR1cm4gbGVmdCAvIHJpZ2h0Owot
ICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7Ci0gICAgICAgIGlmIChtX2NoaWxk
cmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0IG1pbmltdW0gPSBtX2NoaWxkcmVuWzBd
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxk
cmVuKQotICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmltdW0sIGNoaWxkLT5ldmFs
dWF0ZShtYXhWYWx1ZSkpOwotICAgICAgICByZXR1cm4gbWluaW11bTsKLSAgICB9Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDogewotICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05h
TigpOwotICAgICAgICBmbG9hdCBtYXhpbXVtID0gbV9jaGlsZHJlblswXS0+ZXZhbHVhdGUobWF4
VmFsdWUpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAg
ICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBjaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUp
KTsKLSAgICAgICAgcmV0dXJuIG1heGltdW07Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpDbGFtcDogewotICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgIT0gMykKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0KLSAg
ICAgICAgZmxvYXQgbWluID0gbV9jaGlsZHJlblswXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAg
ICAgICBmbG9hdCB2YWx1ZSA9IG1fY2hpbGRyZW5bMV0tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAg
ICAgICAgZmxvYXQgbWF4ID0gbV9jaGlsZHJlblsyXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAg
ICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4KSk7Ci0gICAgfQot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uT3Bl
cmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihvdGhlcikgJiYgKnRo
aXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKTsKLX0KLQotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJiBhLCBjb25zdCBDYWxj
RXhwcmVzc2lvbk9wZXJhdGlvbiYgYikKLXsKLSAgICBpZiAoYS5nZXRPcGVyYXRvcigpICE9IGIu
Z2V0T3BlcmF0b3IoKSB8fCBhLmRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSAhPSBiLmRlc3RpbmF0aW9u
Q2F0ZWdvcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBXb3VsZCBi
ZSBuaWNlIHRvIGhhdmUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGRvaW5nIGEgZGVlcCBjb21wYXJl
IG9uIGEgdmVjdG9yIG9mIHBvaW50ZXJzLgotICAgIGlmIChhLmNoaWxkcmVuKCkuc2l6ZSgpICE9
IGIuY2hpbGRyZW4oKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYS5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghKCphLmNoaWxkcmVuKClbaV0gPT0gKmIuY2hpbGRyZW4oKVtpXSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIGlmICht
X29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJh
dG9yOjpNYXgpIHsKLSAgICAgICAgdHMgPDwgbV9vcGVyYXRvciA8PCAiKCI7Ci0gICAgICAgIHNp
emVfdCBjaGlsZHJlbkNvdW50ID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW5Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICB0cyA8PCBt
X2NoaWxkcmVuW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKGkgPCBjaGlsZHJlbkNvdW50IC0g
MSkKLSAgICAgICAgICAgICAgICB0cyA8PCAiLCAiOwotICAgICAgICB9Ci0gICAgICAgIHRzIDw8
ICIpIjsKLSAgICB9IGVsc2UKLSAgICAgICAgdHMgPDwgbV9jaGlsZHJlblswXS5nZXQoKSA8PCAi
ICIgPDwgbV9vcGVyYXRvciA8PCAiICIgPDwgbV9jaGlsZHJlblsxXS5nZXQoKTsKLX0KLQotZmxv
YXQgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAot
ewotICAgIHJldHVybiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fbGVuZ3RoLCBtYXhWYWx1ZSk7Ci19
Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25MZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25M
ZW5ndGg+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkxlbmd0aD4o
b3RoZXIpOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAotewotICAgIHRzIDw8IG1fbGVuZ3RoOwotfQotCi1DYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKExlbmd0aCBmcm9tLCBMZW5ndGgg
dG8sIGZsb2F0IHByb2dyZXNzKQotICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNz
aW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQotICAgICwgbV9mcm9tKGZyb20pCi0gICAgLCBtX3Rv
KHRvKQotICAgICwgbV9wcm9ncmVzcyhwcm9ncmVzcykKLXsKLSAgICAvLyBGbGF0dGVuIG5lc3Rp
bmcgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCBhcyBhIHNwZWN1bGF0aXZlIGZpeCBmb3Ig
cmRhcjovL3Byb2JsZW0vMzA1MzMwMDUuCi0gICAgLy8gQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aCBpcyBvbmx5IHVzZWQgYXMgYSByZXN1bHQgb2YgYW5pbWF0aW9uIGFuZCB0aGV5IGRvbid0IG5l
c3QgaW4gbm9ybWFsIGNhc2VzLgotICAgIGlmIChtX2Zyb20uaXNDYWxjdWxhdGVkKCkgJiYgbV9m
cm9tLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkudHlwZSgpID09IENhbGNFeHByZXNz
aW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQotICAgICAgICBtX2Zyb20gPSBkb3duY2FzdDxDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihtX2Zyb20uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Np
b24oKSkuZnJvbSgpOwotICAgIGlmIChtX3RvLmlzQ2FsY3VsYXRlZCgpICYmIG1fdG8uY2FsY3Vs
YXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6QmxlbmRMZW5ndGgpCi0gICAgICAgIG1fdG8gPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoPihtX3RvLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkpLnRvKCk7Ci19
Ci0KLWZsb2F0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZh
bHVlKSBjb25zdAotewotICAgIHJldHVybiAoMS4wZiAtIG1fcHJvZ3Jlc3MpICogZmxvYXRWYWx1
ZUZvckxlbmd0aChtX2Zyb20sIG1heFZhbHVlKSArIG1fcHJvZ3Jlc3MgKiBmbG9hdFZhbHVlRm9y
TGVuZ3RoKG1fdG8sIG1heFZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKSAmJiAqdGhp
cyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihvdGhlcik7Ci19Ci0KLXZv
aWQgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QK
LXsKLSAgICB0cyA8PCAiYmxlbmQoIiA8PCBtX2Zyb20gPDwgIiwgIiA8PCBtX3RvIDw8ICIsICIg
PDwgbV9wcm9ncmVzcyA8PCAiKSI7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6OkFkZDogdHMgPDwgIisiOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6U3VidHJhY3Q6IHRzIDw8ICItIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5OiB0cyA8PCAiKiI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZp
ZGU6IHRzIDw8ICIvIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogdHMgPDwg
Im1pbiI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6IHRzIDw8ICJtYXgiOyBi
cmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHRzIDw8ICJjbGFtcCI7IGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlKQotewotICAgIHRzIDw8
ICJjYWxjKCI7Ci0gICAgdHMgPDwgdmFsdWUuZXhwcmVzc2lvbigpOwotICAgIHRzIDw8ICIpIjsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbk5vZGUpCi17Ci0gICAgZXhw
cmVzc2lvbk5vZGUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1
ZS5oCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxh
dGlvblZhbHVlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyODYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHVuaWZ5IHRoaXMgd2l0aCBDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5PwotZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVn
b3J5IDogdWludDhfdCB7Ci0gICAgTnVtYmVyLAotICAgIExlbmd0aCwKLSAgICBQZXJjZW50LAot
ICAgIFBlcmNlbnROdW1iZXIsCi0gICAgUGVyY2VudExlbmd0aCwKLSAgICBBbmdsZSwKLSAgICBU
aW1lLAotICAgIEZyZXF1ZW5jeSwKLSAgICBPdGhlcgotfTsKLQotLy8gRG9uJ3QgY2hhbmdlIHRo
ZXNlIHZhbHVlczsgcGFyc2luZyB1c2VzIHRoZW0uCi1lbnVtIGNsYXNzIENhbGNPcGVyYXRvciA6
IHVpbnQ4X3QgewotICAgIEFkZCA9ICcrJywKLSAgICBTdWJ0cmFjdCA9ICctJywKLSAgICBNdWx0
aXBseSA9ICcqJywKLSAgICBEaXZpZGUgPSAnLycsCi0gICAgTWluID0gMCwKLSAgICBNYXgsCi0g
ICAgQ2xhbXAsCi19OwotCi1lbnVtIGNsYXNzIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgOiB1aW50
OF90IHsKLSAgICBVbmRlZmluZWQsCi0gICAgTnVtYmVyLAotICAgIExlbmd0aCwKLSAgICBPcGVy
YXRpb24sCi0gICAgTmVnYXRpb24sCi0gICAgSW52ZXJzaW9uLAotICAgIEJsZW5kTGVuZ3RoLAot
fTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZSA9IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OlVuZGVmaW5lZCk7Ci0gICAg
dmlydHVhbCB+Q2FsY0V4cHJlc3Npb25Ob2RlKCkgPSBkZWZhdWx0OwotCi0gICAgQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICB2aXJ0
dWFsIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKLQotcHJp
dmF0ZToKLSAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIG1fdHlwZTsKLX07Ci0KLWNsYXNzIENh
bGNFeHByZXNzaW9uTnVtYmVyIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1w
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25OdW1iZXIoZmxvYXQpOwotCi0gICAg
ZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
ZmxvYXQgZXZhbHVhdGUoZmxvYXQpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGR1
bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3ZhbHVl
OwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25MZW5ndGggZmluYWwgOiBwdWJsaWMgQ2FsY0V4
cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbkxlbmd0
aChMZW5ndGgpOwotCi0gICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVl
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Np
b25Ob2RlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTGVuZ3RoIG1fbGVuZ3RoOwotfTsKLQotY2xhc3MgQ2Fs
Y0V4cHJlc3Npb25OZWdhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewot
cHVibGljOgotICAgIENhbGNFeHByZXNzaW9uTmVnYXRpb24oc3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4mJiBub2RlKQotICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKLSAgICAgICAgLCBtX2NoaWxkKFdURk1vdmUo
bm9kZSkpCi0gICAgewotICAgICAgICBBU1NFUlQobV9jaGlsZCk7Ci0gICAgfQotCi0gICAgZmxv
YXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGR1
bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0gICAgCi0gICAgY29uc3QgQ2FsY0V4
cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxk
OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTmVnYXRpb24mLCBj
b25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJik7Ci0KLWNsYXNzIENhbGNFeHByZXNzaW9uSW52
ZXJzaW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAg
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24oc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4mJiBub2RlKQotICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpJbnZlcnNpb24pCi0gICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKG5vZGUpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fY2hpbGQpOwotICAgIH0KLQotICAgIGZsb2F0IGV2YWx1YXRl
KGZsb2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4
dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiBj
aGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiwgY29uc3QgQ2FsY0V4cHJl
c3Npb25JbnZlcnNpb24mKTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24gZmluYWwg
OiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBDYWxjRXhwcmVzc2lv
bk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiYg
Y2hpbGRyZW4sIENhbGNPcGVyYXRvciwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwotCi0gICAgQ2FsY09wZXJhdG9y
IGdldE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvcjsgfQotICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb25DYXRlZ29yeTsgfQotCi0gICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9
Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+
IG1fY2hpbGRyZW47Ci0gICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7Ci0gICAgQ2FsY3VsYXRp
b25DYXRlZ29yeSBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlciB9OwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCBmaW5hbCA6IHB1
YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAgIENhbGNFeHByZXNzaW9uQmxl
bmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotCi0gICAg
Y29uc3QgTGVuZ3RoJiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9Ci0gICAgY29uc3Qg
TGVuZ3RoJiB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KLSAgICBmbG9hdCBwcm9ncmVzcygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3M7IH0KLQotcHJpdmF0ZToKLSAgICBmbG9hdCBldmFs
dWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZHVt
cChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotICAgIExlbmd0aCBtX2Zyb207
Ci0gICAgTGVuZ3RoIG1fdG87Ci0gICAgZmxvYXQgbV9wcm9ncmVzczsKLX07Ci0KLWNsYXNzIENh
bGN1bGF0aW9uVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWxjdWxhdGlvblZhbHVlPiB7Ci1w
dWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4sIFZhbHVlUmFuZ2UpOwot
ICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdDsKLQotICAgIGJvb2wgc2hv
dWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9u
TmVnYXRpdmU7IH0KLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIGV4cHJlc3Npb24oKSBj
b25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FsY3VsYXRp
b25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247
Ci0gICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKLX07Ci0KLWlubGluZSBDYWxj
RXhwcmVzc2lvbk5vZGU6OkNhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
IHR5cGUpCi0gICAgOiBtX3R5cGUodHlwZSkKLXsKLX0KLQotaW5saW5lIENhbGN1bGF0aW9uVmFs
dWU6OkNhbGN1bGF0aW9uVmFsdWUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4g
ZXhwcmVzc2lvbiwgVmFsdWVSYW5nZSByYW5nZSkKLSAgICA6IG1fZXhwcmVzc2lvbihXVEZNb3Zl
KGV4cHJlc3Npb24pKQotICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUocmFuZ2UgPT0g
VmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpCi17Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYSwgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYikKLXsK
LSAgICByZXR1cm4gYS5leHByZXNzaW9uKCkgPT0gYi5leHByZXNzaW9uKCk7Ci19Ci0KLWlubGlu
ZSBDYWxjRXhwcmVzc2lvbk51bWJlcjo6Q2FsY0V4cHJlc3Npb25OdW1iZXIoZmxvYXQgdmFsdWUp
Ci0gICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVy
KQotICAgICwgbV92YWx1ZSh2YWx1ZSkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OdW1iZXIm
IGIpCi17Ci0gICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7Ci19Ci0KLWlubGluZSBD
YWxjRXhwcmVzc2lvbkxlbmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoIGxlbmd0aCkK
LSAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGgp
Ci0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi17Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3Ro
JiBiKQotewotICAgIHJldHVybiBhLmxlbmd0aCgpID09IGIubGVuZ3RoKCk7Ci19Ci0KLWlubGlu
ZSBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24oVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIGNoaWxkcmVuLCBDYWxjT3Bl
cmF0b3Igb3AsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKLSAgICA6
IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCi0g
ICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQotICAgICwgbV9vcGVyYXRvcihvcCkK
LSAgICAsIG1fZGVzdGluYXRpb25DYXRlZ29yeShkZXN0aW5hdGlvbkNhdGVnb3J5KQotewotfQot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mLCBjb25zdCBD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYpOwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGgmIGIpCi17Ci0gICAgcmV0dXJuIGEucHJvZ3Jlc3MoKSA9PSBiLnByb2dyZXNzKCkgJiYg
YS5mcm9tKCkgPT0gYi5mcm9tKCkgJiYgYS50bygpID09IGIudG8oKTsKLX0KLQotV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENhbGN1bGF0aW9uVmFs
dWUmKTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmKTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBDYWxjT3BlcmF0b3IpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKFRvVmFs
dWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUucHJlZGljYXRl
OyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTnVtYmVyLCB0eXBlKCkgPT0g
V2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTGVuZ3RoLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLCB0
eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTmVn
YXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlv
bikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVz
c2lvbkludmVyc2lvbiwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6
OkludmVyc2lvbikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShD
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Np
b25Ob2RlVHlwZTo6QmxlbmRMZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
ZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5j
cHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11
ZWxsZXIgKCBtdWVsbGVyQGtkZS5vcmcgKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFu
ZHJldyBXZWxsaW5ndG9uIChwcm90b25Ad2lyZXRhcHBlZC5uZXQpCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjYsNiArMjYsOSBAQAogI2luY2x1ZGUgIkxlbmd0aC5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9u
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oIgorI2lu
Y2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCiAjaW5jbHVkZSA8d3Rm
L0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGguY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoLmgiCisKKyNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisj
aW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6
OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQg
cHJvZ3Jlc3MpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6QmxlbmRMZW5ndGgpCisgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAsIG1fdG8odG8pCisgICAg
LCBtX3Byb2dyZXNzKHByb2dyZXNzKQoreworICAgIC8vIEZsYXR0ZW4gbmVzdGluZyBvZiBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGFzIGEgc3BlY3VsYXRpdmUgZml4IGZvciByZGFyOi8vcHJv
YmxlbS8zMDUzMzAwNS4KKyAgICAvLyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGlzIG9ubHkg
dXNlZCBhcyBhIHJlc3VsdCBvZiBhbmltYXRpb24gYW5kIHRoZXkgZG9uJ3QgbmVzdCBpbiBub3Jt
YWwgY2FzZXMuCisgICAgaWYgKG1fZnJvbS5pc0NhbGN1bGF0ZWQoKSAmJiBtX2Zyb20uY2FsY3Vs
YXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6QmxlbmRMZW5ndGgpCisgICAgICAgIG1fZnJvbSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGg+KG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpKS5mcm9t
KCk7CisgICAgaWYgKG1fdG8uaXNDYWxjdWxhdGVkKCkgJiYgbV90by5jYWxjdWxhdGlvblZhbHVl
KCkuZXhwcmVzc2lvbigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExl
bmd0aCkKKyAgICAgICAgbV90byA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+
KG1fdG8uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSkudG8oKTsKK30KKworZmxvYXQg
Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuICgxLjBmIC0gbV9wcm9ncmVzcykgKiBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG1fZnJvbSwgbWF4VmFsdWUpICsgbV9wcm9ncmVzcyAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV90
bywgbWF4VmFsdWUpOworfQorCitib29sIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJh
dG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gaXM8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIpICYmICp0aGlzID09IGRvd25j
YXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKTsKK30KKwordm9pZCBDYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRz
IDw8ICJibGVuZCgiIDw8IG1fZnJvbSA8PCAiLCAiIDw8IG1fdG8gPDwgIiwgIiA8PCBtX3Byb2dy
ZXNzIDw8ICIpIjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAiTGVuZ3Ro
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQgcHJv
Z3Jlc3MpOworCisgICAgY29uc3QgTGVuZ3RoJiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9t
OyB9CisgICAgY29uc3QgTGVuZ3RoJiB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KKyAgICBm
bG9hdCBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3M7IH0KKworcHJpdmF0ZToK
KyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7CisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBMZW5ndGggbV9mcm9t
OworICAgIExlbmd0aCBtX3RvOworICAgIGZsb2F0IG1fcHJvZ3Jlc3M7Cit9OworCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGEsIGNvbnN0
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGIpCit7CisgICAgcmV0dXJuIGEucHJvZ3Jlc3Mo
KSA9PSBiLnByb2dyZXNzKCkgJiYgYS5mcm9tKCkgPT0gYi5mcm9tKCkgJiYgYS50bygpID09IGIu
dG8oKTsKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05P
REUoQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHBy
ZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbklu
dmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5o
IgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpldmFsdWF0ZShmbG9hdCBtYXhW
YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMS4wZiAvIG1fY2hpbGQtPmV2YWx1YXRlKG1heFZh
bHVlKTsKK30KKwordm9pZCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZHVtcChUZXh0U3RyZWFt
JiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiMS4wIC8gIiA8PCAiKCIgPDwgKm1fY2hpbGQgPDwg
IikiOworfQorCitib29sIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVyYXRvcj09KGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJl
c3Npb25JbnZlcnNpb24+KG90aGVyKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYgYikK
K3sKKyAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgpOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbklu
dmVyc2lvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5v
ZGUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2Rl
IHsKK3B1YmxpYzoKKyAgICBDYWxjRXhwcmVzc2lvbkludmVyc2lvbihzdGQ6OnVuaXF1ZV9wdHI8
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5vZGUpCisgICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2Rl
KENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbikKKyAgICAgICAgLCBtX2NoaWxkKFdU
Rk1vdmUobm9kZSkpCisgICAgeworICAgICAgICBBU1NFUlQobV9jaGlsZCk7CisgICAgfQorCisg
ICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1
ZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmlu
YWw7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwor
fTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiwgY29u
c3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mKTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24sIHR5cGUoKSA9
PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZlcnNpb24pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3Ro
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVu
Z3RoLmgiCisKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJl
c3Npb25MZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fbGVuZ3RoLCBtYXhWYWx1ZSk7Cit9CisKK2Jvb2wgQ2Fs
Y0V4cHJlc3Npb25MZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG90aGVy
KSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpOworfQor
Cit2b2lkIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAor
eworICAgIHRzIDw8IG1fbGVuZ3RoOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkxlbmd0aC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgIkxlbmd0aC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTGVuZ3RoIGZp
bmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoKTsKKworICAgIGNvbnN0IExlbmd0aCYgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFs
dWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBMZW5ndGggbV9sZW5ndGg7Cit9OworCitpbmxp
bmUgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9uTGVuZ3RoKExlbmd0aCBsZW5n
dGgpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVu
Z3RoKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbkxl
bmd0aCYgYikKK3sKKyAgICByZXR1cm4gYS5sZW5ndGgoKSA9PSBiLmxlbmd0aCgpOworfQorCit9
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVz
c2lvbkxlbmd0aCwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxl
bmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25O
ZWdhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9u
TmVnYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHJldHVybiAt
bV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOworfQorCitib29sIENhbGNFeHByZXNzaW9uTmVn
YXRpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIpICYmICp0aGlz
ID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRpb24+KG90aGVyKTsKK30KKwordm9pZCBD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAg
IHRzIDw8ICItKCIgPDwgKm1fY2hpbGQgPDwgIikiOworfQorCitib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlv
biYgYikKK3sKKyAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgpOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTmVnYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lv
bk5vZGUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5v
ZGUgeworcHVibGljOgorICAgIENhbGNFeHByZXNzaW9uTmVnYXRpb24oc3RkOjp1bmlxdWVfcHRy
PENhbGNFeHByZXNzaW9uTm9kZT4mJiBub2RlKQorICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9k
ZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKKyAgICAgICAgLCBtX2NoaWxkKFdU
Rk1vdmUobm9kZSkpCisgICAgeworICAgICAgICBBU1NFUlQobV9jaGlsZCk7CisgICAgfQorICAg
IAorICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSogY2hpbGQoKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVz
c2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0
IGZpbmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGls
ZDsKK307CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiwg
Y29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYpOworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb24pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgor
CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENhbGNFeHBy
ZXNzaW9uTm9kZSYgZXhwcmVzc2lvbk5vZGUpCit7CisgICAgZXhwcmVzc2lvbk5vZGUuZHVtcCh0
cyk7CisgICAgcmV0dXJuIHRzOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3Mg
Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA6IHVpbnQ4X3QgeworICAgIFVuZGVmaW5lZCwKKyAgICBO
dW1iZXIsCisgICAgTGVuZ3RoLAorICAgIE9wZXJhdGlvbiwKKyAgICBOZWdhdGlvbiwKKyAgICBJ
bnZlcnNpb24sCisgICAgQmxlbmRMZW5ndGgsCit9OworCitjbGFzcyBDYWxjRXhwcmVzc2lvbk5v
ZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0
IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlID0gQ2FsY0V4cHJlc3Np
b25Ob2RlVHlwZTo6VW5kZWZpbmVkKTsKKyAgICB2aXJ0dWFsIH5DYWxjRXhwcmVzc2lvbk5vZGUo
KSA9IGRlZmF1bHQ7CisKKyAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxj
RXhwcmVzc2lvbk5vZGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
IG1fdHlwZTsKK307CisKK2lubGluZSBDYWxjRXhwcmVzc2lvbk5vZGU6OkNhbGNFeHByZXNzaW9u
Tm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sK
K30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlJik7CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENF
WFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkgeyBy
ZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVz
c2lvbk51bWJlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhw
cmVzc2lvbk51bWJlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9uTnVtYmVyOjpldmFsdWF0
ZShmbG9hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KKwordm9pZCBDYWxjRXhw
cmVzc2lvbk51bWJlcjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCBU
ZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMobV92YWx1ZSk7Cit9CisK
K2Jvb2wgQ2FsY0V4cHJlc3Npb25OdW1iZXI6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Np
b25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25OdW1i
ZXI+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3Ro
ZXIpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHBy
ZXNzaW9uTnVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fs
Yy9DYWxjRXhwcmVzc2lvbk51bWJlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxj
RXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhw
cmVzc2lvbk51bWJlciBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTnVtYmVyKGZsb2F0KTsKKworICAgIGZsb2F0
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIGZsb2F0
IGV2YWx1YXRlKGZsb2F0KSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdCBmaW5hbDsKKworICAgIGZsb2F0IG1fdmFsdWU7Cit9OworCitpbmxpbmUgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXI6OkNhbGNFeHByZXNzaW9uTnVtYmVyKGZsb2F0IHZhbHVlKQorICAg
IDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcikKKyAg
ICAsIG1fdmFsdWUodmFsdWUpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25OdW1iZXImIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTnVtYmVyJiBiKQor
eworICAgIHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOworfQorCit9CisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbk51bWJlciwg
dHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Np
b25PcGVyYXRpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNh
bGNFeHByZXNzaW9uT3BlcmF0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJlc3Npb25PcGVyYXRp
b246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHN3aXRjaCAobV9vcGVy
YXRvcikgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsKKyAgICAgICAgZmxvYXQgc3Vt
ID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAg
ICBzdW0gKz0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN1bTsK
KyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7CisgICAgICAgIC8vIEZJ
WE1FCisgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKTsKKyAgICAgICAgZmxv
YXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgZmxv
YXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBsZWZ0IC0gcmlnaHQ7CisgICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eTogeworICAgICAgICBmbG9hdCBwcm9kdWN0ID0gMTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxkLT5ldmFsdWF0ZSht
YXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBwcm9kdWN0OworICAgIH0KKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6RGl2aWRlOiB7CisgICAgICAgIC8vIEZJWE1FCisgICAgICAgIEFTU0VSVChtX2No
aWxkcmVuLnNpemUoKSA9PSAxIHx8IG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICBp
ZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGZsb2F0IGxlZnQgPSBtX2No
aWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZsb2F0IHJpZ2h0ID0gbV9j
aGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICByZXR1cm4gbGVmdCAvIHJp
Z2h0OworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7CisgICAgICAgIGlmICht
X2NoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGZsb2F0IG1pbmltdW0gPSBtX2NoaWxk
cmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKQorICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmltdW0sIGNoaWxk
LT5ldmFsdWF0ZShtYXhWYWx1ZSkpOworICAgICAgICByZXR1cm4gbWluaW11bTsKKyAgICB9Cisg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogeworICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1
aWV0X05hTigpOworICAgICAgICBmbG9hdCBtYXhpbXVtID0gbV9jaGlsZHJlblswXS0+ZXZhbHVh
dGUobWF4VmFsdWUpOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAg
ICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBjaGlsZC0+ZXZhbHVhdGUobWF4
VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG1heGltdW07CisgICAgfQorICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpDbGFtcDogeworICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgIT0gMykKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7
CisKKyAgICAgICAgZmxvYXQgbWluID0gbV9jaGlsZHJlblswXS0+ZXZhbHVhdGUobWF4VmFsdWUp
OworICAgICAgICBmbG9hdCB2YWx1ZSA9IG1fY2hpbGRyZW5bMV0tPmV2YWx1YXRlKG1heFZhbHVl
KTsKKyAgICAgICAgZmxvYXQgbWF4ID0gbV9jaGlsZHJlblsyXS0+ZXZhbHVhdGUobWF4VmFsdWUp
OworICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4KSk7Cisg
ICAgfQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworfQorCitib29sIENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihvdGhlcikg
JiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKTsKK30K
KworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJiBhLCBjb25z
dCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYgYikKK3sKKyAgICBpZiAoYS5nZXRPcGVyYXRvcigp
ICE9IGIuZ2V0T3BlcmF0b3IoKSB8fCBhLmRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSAhPSBiLmRlc3Rp
bmF0aW9uQ2F0ZWdvcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmNoaWxk
cmVuKCkuc2l6ZSgpICE9IGIuY2hpbGRyZW4oKS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYS5jaGlsZHJlbigpLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmICghKCphLmNoaWxkcmVuKClbaV0gPT0gKmIuY2hpbGRyZW4oKVtpXSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25z
dAoreworICAgIGlmIChtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1fb3BlcmF0
b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXgpIHsKKyAgICAgICAgdHMgPDwgbV9vcGVyYXRvciA8PCAi
KCI7CisgICAgICAgIHNpemVfdCBjaGlsZHJlbkNvdW50ID0gbV9jaGlsZHJlbi5zaXplKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW5Db3VudDsgaSsrKSB7CisgICAg
ICAgICAgICB0cyA8PCBtX2NoaWxkcmVuW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKGkgPCBj
aGlsZHJlbkNvdW50IC0gMSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiLCAiOworICAgICAgICB9
CisgICAgICAgIHRzIDw8ICIpIjsKKyAgICB9IGVsc2UKKyAgICAgICAgdHMgPDwgbV9jaGlsZHJl
blswXS5nZXQoKSA8PCAiICIgPDwgbV9vcGVyYXRvciA8PCAiICIgPDwgbV9jaGlsZHJlblsxXS5n
ZXQoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAiQ2FsY09wZXJhdG9yLmgiCisj
aW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKK3B1
YmxpYzoKKyAgICBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PENhbGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciwgQ2FsY3VsYXRp
b25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIpOworCisgICAgQ2FsY09wZXJhdG9yIGdldE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYXRvcjsgfQorICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25DYXRlZ29yeTsgfQorCisgICAgY29uc3QgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYpIGNvbnN0IGZpbmFsOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+PiBtX2NoaWxkcmVuOworICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOworICAg
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5IHsgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIgfTsKK307CisKKworaW5saW5lIENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
OjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHBy
ZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciBvcCwgQ2FsY3VsYXRpb25DYXRl
Z29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQorICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbikKKyAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShj
aGlsZHJlbikpCisgICAgLCBtX29wZXJhdG9yKG9wKQorICAgICwgbV9kZXN0aW5hdGlvbkNhdGVn
b3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJik7
CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNF
eHByZXNzaW9uT3BlcmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2Rl
VHlwZTo6T3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxj
T3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY09wZXJhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jYWxjL0NhbGNPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjT3BlcmF0b3Iu
aCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDYWxjT3BlcmF0
b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6
IHRzIDw8ICIrIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB0cyA8
PCAiLSI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTogdHMgPDwgIioi
OyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB0cyA8PCAiLyI7IGJyZWFr
OworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHRzIDw8ICJtaW4iOyBicmVhazsKKyAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWF4OiB0cyA8PCAibWF4IjsgYnJlYWs7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkNsYW1wOiB0cyA8PCAiY2xhbXAiOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IHRzOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09w
ZXJhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjT3BlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIERvbid0IGNoYW5nZSB0aGVzZSB2YWx1ZXM7IHBhcnNpbmcgdXNlcyB0
aGVtLgorZW51bSBjbGFzcyBDYWxjT3BlcmF0b3IgOiB1aW50OF90IHsKKyAgICBBZGQgPSAnKycs
CisgICAgU3VidHJhY3QgPSAnLScsCisgICAgTXVsdGlwbHkgPSAnKicsCisgICAgRGl2aWRlID0g
Jy8nLAorICAgIE1pbiA9IDAsCisgICAgTWF4LAorICAgIENsYW1wLAorfTsKKworVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgQ2FsY09wZXJhdG9yKTsKKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnku
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5
LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ2FsY3VsYXRp
b25DYXRlZ29yeSBjYXRlZ29yeSkKK3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6IHRzIDw8ICJudW1iZXIiOyBicmVhazsKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDogdHMgPDwgImxlbmd0aCI7IGJyZWFr
OworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogdHMgPDwgInBlcmNlbnQi
OyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6IHRz
IDw8ICJwZXJjZW50LW51bWJlciI7IGJyZWFrOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aDogdHMgPDwgInBlcmNlbnQtbGVuZ3RoIjsgYnJlYWs7CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTogdHMgPDwgImFuZ2xlIjsgYnJlYWs7CisgICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOiB0cyA8PCAidGltZSI7IGJyZWFrOworICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OiB0cyA8PCAiZnJlcXVlbmN5Ijsg
YnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjogdHMgPDwgIm90aGVy
IjsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0
ZWdvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHVuaWZ5IHRoaXMgd2l0aCBDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdENhdGVnb3J5PworZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVnb3J5IDog
dWludDhfdCB7CisgICAgTnVtYmVyLAorICAgIExlbmd0aCwKKyAgICBQZXJjZW50LAorICAgIFBl
cmNlbnROdW1iZXIsCisgICAgUGVyY2VudExlbmd0aCwKKyAgICBBbmdsZSwKKyAgICBUaW1lLAor
ICAgIEZyZXF1ZW5jeSwKKyAgICBPdGhlcgorfTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSk7CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5o
IgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPENhbGN1bGF0aW9uVmFsdWU+IENhbGN1bGF0aW9u
VmFsdWU6OmNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiB2YWx1ZSwg
VmFsdWVSYW5nZSByYW5nZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWxjdWxhdGlv
blZhbHVlKFdURk1vdmUodmFsdWUpLCByYW5nZSkpOworfQorCitDYWxjdWxhdGlvblZhbHVlOjpD
YWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGV4cHJl
c3Npb24sIFZhbHVlUmFuZ2UgcmFuZ2UpCisgICAgOiBtX2V4cHJlc3Npb24oV1RGTW92ZShleHBy
ZXNzaW9uKSkKKyAgICAsIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKHJhbmdlID09IFZhbHVl
UmFuZ2U6Ok5vbk5lZ2F0aXZlKQoreworfQorCitDYWxjdWxhdGlvblZhbHVlOjp+Q2FsY3VsYXRp
b25WYWx1ZSgpID0gZGVmYXVsdDsKKworZmxvYXQgQ2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9leHByZXNzaW9u
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgLy8gRklYTUU6IFRoaXMgdGVzdCB3YXMgb3JpZ2lu
YWxseSBuZWVkZWQgd2hlbiB3ZSBkaWQgbm90IGRldGVjdCBkaXZpc2lvbiBieSB6ZXJvIGF0IHBh
cnNlIHRpbWUuCisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgbm93IHVubmVlZGVk
IGNvZGUgYW5kIGNhbiBiZSByZW1vdmVkLgorICAgIGlmIChzdGQ6OmlzbmFuKHJlc3VsdCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAm
JiByZXN1bHQgPCAwID8gMCA6IHJlc3VsdDsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENh
bGN1bGF0aW9uVmFsdWUmIGEsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIGIpCit7CisgICAgcmV0
dXJuIGEuZXhwcmVzc2lvbigpID09IGIuZXhwcmVzc2lvbigpOworfQorCitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdHMgPDwgImNhbGMoIiA8PCB2YWx1ZS5leHByZXNzaW9uKCkgPDwgIiki
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHBy
ZXNzaW9uTm9kZTsKKworY2xhc3MgQ2FsY3VsYXRpb25WYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVk
PENhbGN1bGF0aW9uVmFsdWU+IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Np
b25Ob2RlPiwgVmFsdWVSYW5nZSk7CisgICAgfkNhbGN1bGF0aW9uVmFsdWUoKTsKKworICAgIGZs
b2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgc2hvdWxkQ2xh
bXBUb05vbk5lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRp
dmU7IH0KKyAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIGV4cHJlc3Npb24oKSBjb25zdCB7
IHJldHVybiAqbV9leHByZXNzaW9uOyB9CisKK3ByaXZhdGU6CisgICAgQ2FsY3VsYXRpb25WYWx1
ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247CisgICAg
Ym9vbCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKK307CisKK2Jvb2wgb3BlcmF0b3I9PShj
b25zdCBDYWxjdWxhdGlvblZhbHVlJiwgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYpOworCitUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJik7
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyQ29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
Nyw3ICsyNyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlv
bnMuaCIKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2Fs
Y1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTdHlsZVZhbHVl
LmgiCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVj
dFZhbHVlLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25MZW5ndGguaCIKKyNpbmNsdWRlICJD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rpb25WYWx1ZUlu
bGluZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNv
bHZlci5oIgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMjc4MjQwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUu
Y29tPgorCisgICAgICAgIFNwbGl0IGNhbGMoKSByZWxhdGVkIGZpbGVzIGludG8gcHJvcGVyIDEt
Y2xhc3MgcGVyIGZpbGUgc3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMjY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DYWxjdWxhdGlv
blZhbHVlLmNwcDoKKyAgICAgICAgVXBkYXRlIHRlc3QgdG8gaW5jbHVkZSBhZGRpdG9uYWwgaGVh
ZGVyIG5vdyBuZWVkZWQuCisKIDIwMjEtMDUtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0
ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBQdW55Y29kZSBlbmNvZGUgVSswQkU2IHdoZW4g
bm90IGluIGNvbnRleHQgb2Ygb3RoZXIgVGFtaWwgY2hhcmFjdGVycwpJbmRleDogVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DYWxjdWxhdGlvblZhbHVlLmNw
cAkocmV2aXNpb24gMjc4MjM5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3Jl
L0NhbGN1bGF0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYgKzI1LDcgQEAKIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9DYWxjRXhwcmVzc2lvbk5vZGUu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuaD4KICNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CiAK
</data>
<flag name="commit-queue"
          id="451459"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430105</attachid>
            <date>2021-05-29 13:38:43 -0700</date>
            <delta_ts>2021-05-29 13:39:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226421-20210529133841.patch</filename>
            <type>text/plain</type>
            <size>328917</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAyMS0wNS0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQg
ZmlsZXMgaW50byBwcm9wZXIgMS1jbGFzcyBwZXIgZmlsZSBzdHJ1Y3R1cmUKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQyMQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0J3MgYm90aGVyZWQgbWUgZm9y
IGEgd2hpbGUgdGhhdCB0aGUgY2FsYyByZWxhdGVkIGNsYXNzZXMgKGJvdGggaW4gY3NzLworICAg
ICAgICBhbmQgaW4gcGxhdGZvcm0vKSB3ZXJlIGJ1bmRsZWQgYWxsIGluIHR3byBiaWcgZmlsZXMu
IFRoaXMgY2hhbmdlIHNwbGl0cworICAgICAgICB0aGVtIGFsbCBvdXQgaW50byB0aGVpciBvd24g
aGVhZGVyIGFuZCBpbXBsZW1lbnRhdGlvbiBmaWxlcyB0aGF0IG1hdGNoCisgICAgICAgIHRoZWly
IG5hbWUsIGFuZCBwdXRzIHRoZW0gaW4gbmV3IGNhbGMvIHN1YmRpcmVjdG9yaWVzIChjc3MvY2Fs
Yy8uLi4gYW5kCisgICAgICAgIHBsYXRmb3JtL2NhbGMvLi4uKS4gVGhpcyBzaG91bGQgaG9wZWZ1
bGx5IG1ha2UgdGhlIG1vZGlmaWNhdGlvbnMgSSBuZWVkCisgICAgICAgIHRvIG1ha2UgdG8gY2Fs
YygpIHRvIHN1cHBvcnQgcmVsYXRpdmUgY29sb3Igc3ludGF4IGEgbGl0dGxlIGVhc2llci4KKwor
ICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAg
ICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGNzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBjc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NHcmFkaWVudFZhbHVlLmNwcDoK
KyAgICAgICAgKiBjc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwOgorICAgICAgICAqIGNzcy9DU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmg6CisgICAgICAgICogY3NzL0NTU1ZhbHVlLmNwcDoKKyAg
ICAgICAgKiBjc3MvY2FsYzogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0NhdGVn
b3J5TWFwcGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y2FsY1VuaXRDYXRlZ29y
eSk6CisgICAgICAgIChXZWJDb3JlOjpjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVn
b3J5KToKKyAgICAgICAgKFdlYkNvcmU6Omhhc0RvdWJsZVZhbHVlKToKKyAgICAgICAgKiBjc3Mv
Y2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9jYWxj
L0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgIChXZWJDb3JlOjpwcmV0dHlQcmludE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6cHJldHR5UHJpbnROb2Rlcyk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjplcXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjpjYXRlZ29yeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZSk6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6Om9wZXJhdG9yVmFsdWUpOgorICAgICAgICAo
V2ViQ29yZTo6Y2hlY2tEZXB0aEFuZEluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9k
dWN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VDYWxjU3VtKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcik6CisgICAgICAgICogY3NzL2NhbGMvQ1NT
Q2FsY0ludmVydE5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNJbnZl
cnROb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0ludmVydE5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjSW52ZXJ0Tm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY0ludmVydE5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05l
Z2F0ZU5vZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNOZWdhdGVOb2Rl
OjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
TmVnYXRlTm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0
ZU5vZGUuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmRldGVybWluZUNhdGVnb3J5KToKKyAgICAg
ICAgKFdlYkNvcmU6OmNhdGVnb3J5Rm9ySW52ZXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OnJlc29s
dmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCk6CisgICAgICAgIChXZWJDb3JlOjppc1NhbWVQYWly
KToKKyAgICAgICAgKFdlYkNvcmU6OnNvcnRpbmdDYXRlZ29yeUZvclR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6c29ydGluZ0NhdGVnb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OnByaW1pdGl2ZVR5
cGVGb3JDb21iaW5hdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJzaW9uVG9BZGRWYWx1
ZXNXaXRoVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZnVuY3Rpb25Gcm9tT3BlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3Bl
cmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNhbkNvbWJp
bmVBbGxDaGlsZHJlbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y29tYmluZUNoaWxkcmVuKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRp
b25Ob2RlOjpzaW1wbGlmeSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6c2ltcGxpZnlSZWN1cnNpdmUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlv
bk5vZGU6OnNpbXBsaWZ5Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6cHJpbWl0aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVy
YXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHRSZWN1cnNpdmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmVxdWFscyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcik6
CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaDogQWRkZWQuCisgICAg
ICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmN1c3RvbUNTU1RleHQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6cHJpbWl0
aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTnVtZXJpY1ZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmludmVydCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjphZGQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29udmVydFRvVW5pdFR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y2Fub25pY2FsaXplVW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVD
YWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjpkb3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzWmVy
byBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpl
cXVhbHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6ZHVtcCBjb25zdCk6CisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUJsZW5kSGFsZik6CisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVDU1MpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpDU1NDYWxjVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjYXRlZ29yeSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OnByaW1pdGl2ZVR5cGUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1
ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIGNz
cy9jYWxjL0NTU0NhbGNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1By
b3BlcnR5UGFyc2VySGVscGVycy5jcHA6CisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25W
YWx1ZS5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5o
OiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAgICAgICogcGxh
dGZvcm0vY2FsYzogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bkJsZW5kTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZHVtcCBjb25zdCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb24uaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbkxlbmd0aC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHBy
ZXNzaW9uTGVuZ3RoOjpvcGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNF
eHByZXNzaW9uTGVuZ3RoOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uTGVuZ3RoLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJl
c3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9uTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlv
bi5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6
ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OZWdhdGlv
bjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGU6OnR5cGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2Rl
OjpDYWxjRXhwcmVzc2lvbk5vZGUpOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25OdW1iZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk51bWJlcjo6ZHVtcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk51
bWJlcjo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9u
TnVtYmVyOjpDYWxjRXhwcmVzc2lvbk51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZh
bHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246
Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZHVtcCBjb25zdCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpDYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbik6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3JtL2Nh
bGMvQ2FsY09wZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6
CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5Lmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0aW9uVmFsdWUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpDYWxjdWxhdGlvblZhbHVlOjpzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FsY3VsYXRpb25WYWx1ZTo6ZXhwcmVzc2lvbiBjb25zdCk6CisgICAg
ICAgICogc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisKIDIwMjEtMDUtMjkgIEFsYW4g
QnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtMRkNdW1RGQ10gRG8gbm90IGlu
Y2x1ZGUgdmVydGljYWwgc3BhY2luZyB3aGVuIHJlc29sdmluZyBwZXJjZW50IGhlaWdodCBmb3Ig
dGFibGUgY29udGVudApJbmRleDogU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNDEsNyAr
MzQxLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgY3J5
cHRvL1NlcmlhbGl6ZWRDcnlwdG9LZXlXcmFwLmgKIAotICAgIGNzcy9DU1NDYWxjdWxhdGlvblZh
bHVlLmgKICAgICBjc3MvQ1NTQ29uZGl0aW9uUnVsZS5oCiAgICAgY3NzL0NTU0N1c3RvbVByb3Bl
cnR5VmFsdWUuaAogICAgIGNzcy9DU1NGb250RmFjZVJ1bGUuaApAQCAtMzg5LDYgKzM4OCw4IEBA
IHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKICAgICBjc3MvU3R5bGVTaGVl
dENvbnRlbnRzLmgKICAgICBjc3MvU3R5bGVTaGVldExpc3QuaAogCisgICAgY3NzL2NhbGMvQ1NT
Q2FsY1ZhbHVlLmgKKwogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKICAgICBjc3MvcGFyc2Vy
L0NTU1BhcnNlckNvbnRleHQuaAogICAgIGNzcy9wYXJzZXIvQ1NTUGFyc2VyTW9kZS5oCkBAIC0x
MDAzLDcgKzEwMDQsNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAK
ICAgICBwbGF0Zm9ybS9BYm9ydGFibGVUYXNrUXVldWUuaAogICAgIHBsYXRmb3JtL0NQVU1vbml0
b3IuaAotICAgIHBsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAogICAgIHBsYXRmb3JtL0NvbG9y
Q2hvb3Nlci5oCiAgICAgcGxhdGZvcm0vQ29sb3JDaG9vc2VyQ2xpZW50LmgKICAgICBwbGF0Zm9y
bS9Db250ZW50RmlsdGVyVW5ibG9ja0hhbmRsZXIuaApAQCAtMTE1Niw2ICsxMTU2LDkgQEAgc2V0
KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0F1ZGlvRGVzdGluYXRpb25HU3RyZWFtZXIuaAogCisgICAgcGxhdGZvcm0vY2Fs
Yy9DYWxjRXhwcmVzc2lvbk5vZGUKKyAgICBwbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUu
aAorCiAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNRW5jcnlwdGlvblNjaGVtZS5oCiAg
ICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNRmFjdG9yeS5oCiAgICAgcGxhdGZvcm0vZW5j
cnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApJbmRleDogU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDI3
ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC03
MTgsNyArNzE4LDYgQEAgY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUuY3BwCiBjc3MvQ1NTQmFzaWNT
aGFwZXMuY3BwCiBjc3MvQ1NTQm9yZGVySW1hZ2UuY3BwCiBjc3MvQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlLmNwcAotY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCiBjc3MvQ1NTQ2FudmFzVmFs
dWUuY3BwCiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAogY3NzL0NTU0NvbmRp
dGlvblJ1bGUuY3BwCkBAIC04MjUsNiArODI0LDE0IEBAIGNzcy9TdHlsZVNoZWV0LmNwcAogY3Nz
L1N0eWxlU2hlZXRDb250ZW50cy5jcHAKIGNzcy9TdHlsZVNoZWV0TGlzdC5jcHAKIGNzcy9UcmFu
c2Zvcm1GdW5jdGlvbnMuY3BwCitjc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAor
Y3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlUGFyc2VyLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuY3BwCitjc3Mv
Y2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2Rl
LmNwcAorY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAKK2Nzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHAKIGNzcy9wYXJzZXIvQ1NTQXRSdWxlSUQuY3BwCiBjc3MvcGFyc2VyL0NT
U0RlZmVycmVkUGFyc2VyLmNwcAogY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBAIC0xODE0LDcg
KzE4MjEsNiBAQCBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlT3ZlcmZsb3dTY3JvCiBwYWdl
L3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5n
L1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3BwCiBwYWdlL3Njcm9sbGluZy9U
aHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCi1wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNwcAog
cGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiBwbGF0Zm9ybS9Db250ZXh0TWVudS5jcHAKIHBsYXRm
b3JtL0NvbnRleHRNZW51SXRlbS5jcHAKQEAgLTE5MjgsNiArMTkzNCwxNiBAQCBwbGF0Zm9ybS9h
dWRpby9TdGVyZW9QYW5uZXIuY3BwCiBwbGF0Zm9ybS9hdWRpby9VcFNhbXBsZXIuY3BwCiBwbGF0
Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmNwcAogcGxhdGZvcm0vYXVkaW8vWmVyb1BvbGUuY3BwCitw
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwCitwbGF0Zm9ybS9jYWxj
L0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkxlbmd0aC5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAKK3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk51bWJlci5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24u
Y3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAKIHBs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUZhY3RvcnkuY3BwCiBwbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1Mb2dnaW5nLmNwcAogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNUHJpdmF0ZS5j
cHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM1NCw3ICsxMzU0LDcg
QEAKIAkJNDk5QjNFQzUxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5QjNFQzMxMjhDQ0M0
NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5OUIzRUQ3MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFw
aGljc0xheWVyQ0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDQ5OUIzRUQ1MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OTlCM0VERDEyOERC
NTAyMDBFNzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5QjNFREMxMjhEQjUwMTAwRTcyNkMyIC8qIFBs
YXRmb3JtQ0FBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlB
RTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0OUFFMkQ4RjEzNEVFNTBD
MDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ4RDEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVl
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlB
RTJEOTcxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QUUyRDk1MTM0RUU1RjkwMDcyOTIw
QSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDlBRjJENjkxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5QzdCOTk0
MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MTEwNDJEMkQzMDAwOUQ0NDcgLyogSlNX
ZWJHTEJ1ZmZlci5oICovOyB9OwpAQCAtNDE5MCw2ICs0MTkwLDIyIEBACiAJCUJDRUY0NUY2MEU2
ODdCNUMwMDFDMTI4NyAvKiBKU1RleHRNZXRyaWNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VGNDVGNDBFNjg3QjVDMDAxQzEyODcgLyogSlNUZXh0
TWV0cmljcy5oICovOyB9OwogCQlCQ0VGODY5RjBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFy
VGhlbWVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0VGODY5RTBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gKi87IH07
CiAJCUJDRUZFMUVCMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUZFMUU5MERDQTVGNjQw
MDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCAqLzsgfTsKKwkJQkNGMTY0NTEyNjYyOUZDNzAw
MDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NEYyNjYyOUZDNzAwMDJGN0VGIC8qIENTU0Nh
bGNFeHByZXNzaW9uTm9kZS5oICovOyB9OworCQlCQ0YxNjQ1NTI2NjJBMTIyMDAwMkY3RUYgLyog
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NTMyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NTkyNjYyQTFFOTAwMDJGN0VGIC8qIENT
U0NhbGNOZWdhdGVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0YxNjQ1NzI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAq
LzsgfTsKKwkJQkNGMTY0NUQyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ1QjI2
NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NjEy
NjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ1RjI2NjJBMjhEMDAwMkY3RUYg
LyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NjUyNjYyQTMxQTAwMDJG
N0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NjMyNjYyQTMxQTAwMDJGN0VGIC8qIENT
U0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oICovOyB9OworCQlCQ0YxNjQ2QTI2NjJBOTM0MDAw
MkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NjgyNjYyQTkzNDAwMDJGN0VGIC8qIENTU0Nh
bGNDYXRlZ29yeU1hcHBpbmcuaCAqLzsgfTsKKwkJQkNGMTY0NkUyNjYyQUE1MDAwMDJGN0VGIC8q
IENhbGN1bGF0aW9uQ2F0ZWdvcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRjE2NDZEMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVn
b3J5LmggKi87IH07CisJCUJDRjE2NDcyMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RjE2NDcwMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlCQ0YxNjQ3NjI2NjJBQjM2
MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDc0MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbk51bWJlci5oICovOyB9OworCQlCQ0YxNjQ3QTI2NjJBQjg1MDAwMkY3RUYgLyog
Q2FsY0V4cHJlc3Npb25MZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRjE2NDc4MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxl
bmd0aC5oICovOyB9OworCQlCQ0YxNjQ3RTI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25OZWdhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGMTY0N0MyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAq
LzsgfTsKKwkJQkNGMTY0ODIyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJz
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Yx
NjQ4MDI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCAqLzsgfTsK
KwkJQkNGMTY0ODYyNjYyQUNBMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ4NDI2
NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCAqLzsgfTsKKwkJQkNG
MTY0OEEyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDg4MjY2MkFE
NTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmggKi87IH07CisJCUJDRjE2
NDhFMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDhDMjY2MkFERDgwMDAyRjdFRiAvKiBD
YWxjT3BlcmF0b3IuaCAqLzsgfTsKIAkJQkNGN0U0OTExMzdDRDdDNzAwMUREQUU3IC8qIEFkanVz
dFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDRjQ4Q0U2MTM3MEQxMTQwMDRFODdENiAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJQkNGQTkz
MDgxMDMzMzE5MzAwN0IyNUQxIC8qIFJlbmRlck92ZXJmbG93LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZBOTMwNzEwMzMzMTkzMDA3QjI1RDEgLyog
UmVuZGVyT3ZlcmZsb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQlCQ0ZCMkU1RTA5NzlFNDY0MDBCQTcwM0QgLyogQ2FjaGVkUmVzb3VyY2VDbGll
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkIy
RTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04NDQzLDggKzg0NTksOCBA
QAogCQk0OTlCM0VENDEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBoaWNzTGF5ZXJDQS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OUIzRUQ1MTI4Q0QzMTQwMEU3MjZDMiAvKiBH
cmFwaGljc0xheWVyQ0EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhp
Y3NMYXllckNBLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OUIzRURDMTI4REI1
MDEwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFBsYXRmb3JtQ0FBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTQ5QUUyRDhEMTM0RUU1MEMw
MDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IENTU0NhbGN1bGF0aW9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0OUFFMkQ4RDEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2Fs
Y1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEg
LyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWxjdWxhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY3VsYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJl
c2hNb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERpc3BsYXlSZWZy
ZXNoTW9uaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTQ1MjEsNiArMTQ1
MzcsMzggQEAKIAkJQkNFRkUxREMwRENBNUNGRDAwNzM5MjE5IC8qIFhTTFRQcm9jZXNzb3IuaWRs
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhTTFRQcm9jZXNzb3IuaWRsOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlCQ0VGRTFFODBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vz
c29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTWFNMVFByb2Nl
c3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRUZFMUU5MERDQTVGNjQw
MDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNYU0xUUHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDRGMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRjE2NDUwMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTMyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1NDI2NjJBMTIy
MDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkNGMTY0NTcyNjYyQTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU0NhbGNOZWdhdGVOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRjE2NDU4MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjTmVnYXRlTm9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDVCMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxjSW52
ZXJ0Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjSW52ZXJ0Tm9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1QzI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0lu
dmVydE5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY0ludmVydE5vZGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1RjI2NjJBMjhEMDAwMkY3RUYgLyog
Q1NTQ2FsY09wZXJhdGlvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY09wZXJhdGlvbk5v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjAyNjYyQTI4RDAwMDJG
N0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0Nh
bGNPcGVyYXRpb25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0
NjMyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjQyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2ODI2NjJB
OTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
U1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDY5MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0YxNjQ2RDI2NjJBQTUwMDAwMkY3RUYgLyogQ2FsY3VsYXRpb25D
YXRlZ29yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjdWxhdGlvbkNhdGVnb3J5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDZGMjY2MkFBNkYwMDAyRjdFRiAvKiBDYWxjdWxh
dGlvbkNhdGVnb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGN1bGF0aW9uQ2F0ZWdvcnku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3MDI2NjJBQUMzMDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9u
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3MTI2NjJBQUMzMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNF
eHByZXNzaW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDc0
MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxjRXhwcmVzc2lvbk51bWJlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0YxNjQ3NTI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ3ODI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25M
ZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25MZW5ndGguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzkyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uTGVuZ3Ro
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0N0MyNjYyQUJFNzAwMDJG
N0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJl
c3Npb25OZWdhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3RDI2
NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkNGMTY0ODAyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJz
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDgxMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhw
cmVzc2lvbkludmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjRXhwcmVzc2lvbklu
dmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDg0MjY2MkFD
QTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0YxNjQ4NTI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4ODI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDg5MjY2MkFENTIwMDAy
RjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQ0YxNjQ4QzI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IENhbGNPcGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0Yx
NjQ4RDI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IENhbGNPcGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRjM0
QTM2MTFBMjMxQ0QwMEM3MTgwNCAvKiBOYW1lZE5vZGVNYXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTmFtZWROb2RlTWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNGNDhDRTYxMzcwRDExNDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdTaXplT3JO
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQWRqdXN0Vmlld1NpemVPck5v
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZBOTMwNzEwMzMzMTkzMDA3QjI1
RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVuZGVyT3ZlcmZsb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI3ODkxLDEx
ICsyNzkzOSw2MiBAQAogCQkJbmFtZSA9IENvbnN0cnVjdG9yczsKIAkJCXNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7CiAJCX07CisJCUJDRjE2NDREMjY2MjlGOUEwMDAyRjdFRiAvKiBjYWxjICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ2OTI2NjJB
OTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHAgKi8sCisJCQkJQkNGMTY0
NjgyNjYyQTkzNDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCAqLywKKwkJCQlC
Q0YxNjQ1MDI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAqLywK
KwkJCQlCQ0YxNjQ0RjI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgg
Ki8sCisJCQkJQkNGMTY0NjQyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlci5jcHAgKi8sCisJCQkJQkNGMTY0NjMyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlci5oICovLAorCQkJCUJDRjE2NDVDMjY2MkEyMzcwMDAyRjdFRiAv
KiBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NUIyNjYyQTIzNzAwMDJGN0VG
IC8qIENTU0NhbGNJbnZlcnROb2RlLmggKi8sCisJCQkJQkNGMTY0NTgyNjYyQTFFOTAwMDJGN0VG
IC8qIENTU0NhbGNOZWdhdGVOb2RlLmNwcCAqLywKKwkJCQlCQ0YxNjQ1NzI2NjJBMUU5MDAwMkY3
RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAqLywKKwkJCQlCQ0YxNjQ2MDI2NjJBMjhEMDAwMkY3
RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwICovLAorCQkJCUJDRjE2NDVGMjY2MkEyOEQw
MDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oICovLAorCQkJCUJDRjE2NDU0MjY2MkEx
MjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcCAqLywKKwkJCQlCQ0Yx
NjQ1MzI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oICovLAor
CQkJCTQ5QUUyRDhDMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuY3BwICovLAorCQkJ
CTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuaCAqLywKKwkJCSk7CisJ
CQlwYXRoID0gY2FsYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCUJDRjE2
NDZDMjY2MkFBMEEwMDAyRjdFRiAvKiBjYWxjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJ
CQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ4OTI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aC5jcHAgKi8sCisJCQkJQkNGMTY0ODgyNjYyQUQ1MjAwMDJGN0VGIC8q
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCAqLywKKwkJCQlCQ0YxNjQ4MTI2NjJBQzUxMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uY3BwICovLAorCQkJCUJDRjE2NDgwMjY2
MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oICovLAorCQkJCUJDRjE2
NDc5MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5jcHAgKi8sCisJCQkJ
QkNGMTY0NzgyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmggKi8sCisJ
CQkJQkNGMTY0N0QyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uY3Bw
ICovLAorCQkJCUJDRjE2NDdDMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uLmggKi8sCisJCQkJQkNGMTY0NzEyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
Tm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NzAyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNz
aW9uTm9kZS5oICovLAorCQkJCUJDRjE2NDc1MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVz
c2lvbk51bWJlci5jcHAgKi8sCisJCQkJQkNGMTY0NzQyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNF
eHByZXNzaW9uTnVtYmVyLmggKi8sCisJCQkJQkNGMTY0ODUyNjYyQUNBMzAwMDJGN0VGIC8qIENh
bGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcCAqLywKKwkJCQlCQ0YxNjQ4NDI2NjJBQ0EzMDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCAqLywKKwkJCQlCQ0YxNjQ4RDI2NjJBREQ4
MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmNwcCAqLywKKwkJCQlCQ0YxNjQ4QzI2NjJBREQ4MDAw
MkY3RUYgLyogQ2FsY09wZXJhdG9yLmggKi8sCisJCQkJQkNGMTY0NkYyNjYyQUE2RjAwMDJGN0VG
IC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwICovLAorCQkJCUJDRjE2NDZEMjY2MkFBNTAwMDAy
RjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggKi8sCisJCQkJNDlBRTJEOTQxMzRFRTVGOTAw
NzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAorCQkJCTQ5QUUyRDk1MTM0RUU1Rjkw
MDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCisJCQkpOworCQkJcGF0aCA9IGNhbGM7
CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlCQ0YxQTVCQTA5NzgzMjA5MDA2
MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAogCQkJCTQ5RTkxMkE0MEVGQUM4RTYwMDlEMENBRiAvKiBhbmltYXRpb24gKi8sCiAJCQkJ
RkQzMTYwNDAxMkIwMjZBMzAwQzFBMzU5IC8qIGF1ZGlvICovLAorCQkJCUJDRjE2NDZDMjY2MkFB
MEEwMDAyRjdFRiAvKiBjYWxjICovLAogCQkJCTFBRTQyRjY3MEFBNEI4Q0IwMEM4NjEyRCAvKiBj
ZiAqLywKIAkJCQlBNUM5NzRDRTExNDg1RkRBMDA2NkYyQUIgLyogY29jb2EgKi8sCiAJCQkJQ0Q5
NEE1Q0IxRjcxQ0I0NjAwRjUyNUM1IC8qIGVuY3J5cHRlZG1lZGlhICovLApAQCAtMjc5MTIsOCAr
MjgwMTEsNiBAQAogCQkJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYyNiAvKiB0ZXh0ICovLAogCQkJ
CUUxRUU4QjZCMjQxMkIyQTcwMEU3OTRENiAvKiB4ciAqLywKIAkJCQlERkRCOTEyQ0Y4RTg4QTZE
QTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmggKi8sCi0JCQkJNDlBRTJEOTQxMzRFRTVG
OTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAotCQkJCTQ5QUUyRDk1MTM0RUU1
RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCiAJCQkJQzMzMEEyMjExM0VDMTk2
QjAwMDBCNDVCIC8qIENvbG9yQ2hvb3Nlci5oICovLAogCQkJCUMzN0NERUJDMTQ5RUYyMDMwMDQy
MDkwRCAvKiBDb2xvckNob29zZXJDbGllbnQuaCAqLywKIAkJCQlCQ0M4Q0ZDQTA5ODZDRDI0MDAx
NDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLApAQCAtMjk3MDcsNiArMjk4MDQsNyBAQAogCQlG
NTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3NzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ0RDI2NjI5RjlBMDAwMkY3RUYgLyogY2FsYyAq
LywKIAkJCQk5NDZEMzcyNzFENkNCMjI1MDA3NzA4NEYgLyogcGFyc2VyICovLAogCQkJCTRCQUZE
MERBMjE5MjFFQUQwMEMwQUI2NCAvKiB0eXBlZG9tICovLAogCQkJCUZCRDZBRjg0MTVFRjIxRDQw
MDhCNzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCAqLywKQEAgLTI5NzIwLDggKzI5ODE4
LDYgQEAKIAkJCQlFMTZBODRGODE0Qzg1Q0NDMDAyOTc3REYgLyogQ1NTQm9yZGVySW1hZ2UuaCAq
LywKIAkJCQlCQzI3NEIzMDE0MEVCRUQ4MDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZh
bHVlLmNwcCAqLywKIAkJCQlCQzI3NEIyRTE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1h
Z2VTbGljZVZhbHVlLmggKi8sCi0JCQkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0Nh
bGN1bGF0aW9uVmFsdWUuY3BwICovLAotCQkJCTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBD
U1NDYWxjdWxhdGlvblZhbHVlLmggKi8sCiAJCQkJQkM2MDRBNDIwREI1NjM0RTAwMjA0NzM5IC8q
IENTU0NhbnZhc1ZhbHVlLmNwcCAqLywKIAkJCQlCQzYwNDlDQjBEQjU2MEMyMDAyMDQ3MzkgLyog
Q1NTQ2FudmFzVmFsdWUuaCAqLywKIAkJCQlCQ0VBNDc3QzA5N0NBQUM4MDA5NEM5RTQgLyogQ1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCAqLywKQEAgLTMxODExLDYgKzMxOTA3LDE1IEBA
CiAJCQkJNDFEMTI5RDMxRjNEMEYxNjAwRDE1RTQ3IC8qIENhY2hlU3RvcmFnZUNvbm5lY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDEyOUQ1MUYzRDBGNjkwMEQxNUU0NyAvKiBDYWNoZVN0
b3JhZ2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQzQUY4RTcxQUM1QjdFQzAwQ0E3
MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0OEEyNjYy
QUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCBpbiBIZWFkZXJzICov
LAorCQkJCUJDRjE2NDgyMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0N0EyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNF
eHByZXNzaW9uTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3RTI2NjJBQkU3MDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNG
MTY0NzIyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkNGMTY0NzYyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ4NjI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDhFMjY2MkFERDgw
MDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDZFMjY2
MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk0OUFFMkQ5NzEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJN0MxRThEMDExRUQwQzJEQTAwQjFEOTgzIC8qIENhbGxiYWNrUmVzdWx0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFRkNDNkM4RjIwRkU5MTQ0MDBBMjMyMUIgLyogQ2FudmFzQWN0
aXZpdHlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApAQCAtMzIwODEsNyArMzIxODYsMTQgQEAKIAkJ
CQlGQkQ2QUY4ODE1RUYyNUM5MDA4QjcxMTAgLyogQ1NTQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxNkE4NEZBMTRDODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMyNzRCMkYxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlcklt
YWdlU2xpY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5
MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDZB
MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmggaW4gSGVhZGVycyAq
LywKKwkJCQlCQ0YxNjQ1MTI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ2NTI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ1RDI2NjJB
MjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCUJD
RjE2NDU5MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJQkNGMTY0NjEyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2Rl
LmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ1NTI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNDlBRTJEOEYxMzRFRTUw
QzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM2MDQ5Q0Mw
REI1NjBDMjAwMjA0NzM5IC8qIENTU0NhbnZhc1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0VBNDc5MDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzBBQUM5QTI1MEVCODQ5MDAxM0RBOUYgLyogQ1NTQ29uZGl0
aW9uUnVsZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nh
bGN1bGF0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyMTkwICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxOSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9u
VmFsdWUuaCIKLQotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2luY2x1ZGUgIkNTU1BhcnNlclRv
a2VuUmFuZ2UuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCi0jaW5j
bHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKLSNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KLSNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLXN0YXRpYyBjb25zdCBpbnQgbWF4RXhw
cmVzc2lvbkRlcHRoID0gMTAwOwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1jbGFzcyBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOwotY2xhc3MgQ1NTQ2FsY09wZXJhdGlvbk5vZGU7Ci1jbGFzcyBD
U1NDYWxjTmVnYXRlTm9kZTsKLWNsYXNzIENTU0NhbGNJbnZlcnROb2RlOwotfQotCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6
Q3NzQ2FsY1ByaW1pdGl2ZVZhbHVlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQ
UkVTU0lPTl9OT0RFKENTU0NhbGNPcGVyYXRpb25Ob2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjT3BlcmF0aW9uKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNOZWdhdGVOb2RlLCB0eXBl
KCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjTmVnYXRl
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNJ
bnZlcnROb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBl
OjpDc3NDYWxjSW52ZXJ0KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2Rl
JiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiBjcmVhdGVDU1MoY29uc3QgTGVuZ3RoJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLQotc3Rh
dGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgbm9kZSkKLXsKLSAgICBub2RlLmR1bXAodHMpOwotICAgIHJldHVybiB0
czsKLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY1VuaXRDYXRlZ29yeShDU1NV
bml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfRVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfQ006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1JMSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0NIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TGVuZ3RoOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgot
ICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDsKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RV
Uk46Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTsKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6Ci0gICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOwotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19IWjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfS0haOgotICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OwotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihDU1NV
bml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Ci0gICAgICAg
IHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50OwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OkFuZ2xlOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUzoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU7
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19LSFo6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k7Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
RVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0NIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlO
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAgIGRlZmF1bHQ6Ci0gICAgICAg
IHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICB9Ci19Ci0KLXN0YXRpYyBD
U1NVbml0VHlwZSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLXsKLSAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NT
X05VTUJFUjsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDogcmV0dXJuIENT
U1VuaXRUeXBlOjpDU1NfUFg7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
OiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOwotICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6QW5nbGU6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX0RFRzsKLSAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX01TOwot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OiByZXR1cm4gQ1NTVW5pdFR5
cGU6OkNTU19IWjsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5L
Tk9XTjsKLX0KLQotc3RhdGljIGJvb2wgaGFzRG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdHlwZSkK
LXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19FTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VYUzoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfQ0hTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Q006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1BDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
TVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0haOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0RJTUVOU0lPTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlO
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19EUFBYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUEk6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0RQQ006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0ZSOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19TVFJJTkc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0ZPTlRfRkFNSUxZOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19VUkk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lERU5U
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19BVFRSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DT1VOVEVSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRUNUOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19SR0JDT0xPUjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEFJ
UjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVU5JQ09ERV9SQU5HRToKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfQ09VTlRFUl9OQU1FOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19T
SEFQRToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVBRDoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUVVJUktZX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQzoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTlVNQkVSOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9MRU5HVEg6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BST1BFUlRZX0lEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19WQUxVRV9JRDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH07Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1zdGF0aWMgQ1NTVmFsdWVJ
RCBmdW5jdGlvbkZyb21PcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNoIChv
cCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6
OlN1YnRyYWN0OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKLSAgICBjYXNlIENh
bGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVDYWxjOwotICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZU1pbjsKLSAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVNYXg7Ci0gICAg
Y2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVDbGFtcDsK
LSAgICB9Ci0gICAgcmV0dXJuIENTU1ZhbHVlQ2FsYzsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQK
LXN0YXRpYyBTdHJpbmcgcHJldHR5UHJpbnROb2RlKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9k
ZSYgbm9kZSkKLXsKLSAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKLSAgICBtdWx0aWxp
bmVTdHJlYW0gPDwgbm9kZTsKLSAgICByZXR1cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsK
LX0KLQotc3RhdGljIFN0cmluZyBwcmV0dHlQcmludE5vZGVzKGNvbnN0IFZlY3RvcjxSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzKQotewotICAgIFRleHRTdHJlYW0gbXVsdGlsaW5l
U3RyZWFtOwotICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlczsKLSAgICByZXR1cm4gbXVsdGls
aW5lU3RyZWFtLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgotCi1jbGFzcyBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlPiBjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZShXVEZNb3ZlKHZhbHVlKSkpOwotICAgIH0KLQotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZT4gY3JlYXRlKGRvdWJsZSB2YWx1ZSwgQ1NTVW5pdFR5cGUgdHlw
ZSkKLSAgICB7Ci0gICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkpCi0gICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5cGUpKSk7
Ci0gICAgfQotCi0gICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgcmV0dXJuIG1fdmFsdWUtPmNzc1RleHQoKTsKLSAgICB9Ci0KLSAgICBDU1NVbml0VHlwZSBw
cmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3ZhbHVl
LT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgfQotCi0gICAgYm9vbCBpc051bWVyaWNWYWx1ZSgpIGNv
bnN0OwotICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0OwotCi0gICAgdm9pZCBuZWdhdGUoKTsK
LSAgICB2b2lkIGludmVydCgpOwotCi0gICAgZW51bSBjbGFzcyBVbml0Q29udmVyc2lvbiB7Ci0g
ICAgICAgIEludmFsaWQsCi0gICAgICAgIFByZXNlcnZlLAotICAgICAgICBDYW5vbmljYWxpemUK
LSAgICB9OwotICAgIHZvaWQgYWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmLCBV
bml0Q29udmVyc2lvbiA9IFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZSk7Ci0gICAgdm9pZCBtdWx0
aXBseShkb3VibGUpOwotCi0gICAgdm9pZCBjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlwZSk7
Ci0gICAgdm9pZCBjYW5vbmljYWxpemVVbml0KCk7Ci0KLSAgICBjb25zdCBDU1NQcmltaXRpdmVW
YWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuICFt
X3ZhbHVlLT5kb3VibGVWYWx1ZSgpOwotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0IGZpbmFsOwotICAgIFR5cGUgdHlwZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNQcmltaXRpdmVWYWx1ZTsgfQotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBk
b3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7Ci0KLSAgICBkb3VibGUgY29tcHV0
ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsK
LSAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8
Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290
Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3Qg
ZmluYWw7Ci0KLSAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi1wcml2
YXRlOgotICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoUmVmPENTU1ByaW1p
dGl2ZVZhbHVlPiYmIHZhbHVlKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYWxj
VW5pdENhdGVnb3J5KHZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKQotICAgICAgICAsIG1fdmFsdWUo
V1RGTW92ZSh2YWx1ZSkpCi0gICAgewotICAgIH0KLQotICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1
ZT4gbV92YWx1ZTsKLX07Ci0KLS8vIEZJWE1FOiBVc2UgY2FsY1VuaXRDYXRlZ29yeT8KLWJvb2wg
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOdW1lcmljVmFsdWUoKSBjb25zdAotewotICAg
IHJldHVybiBtX3ZhbHVlLT5pc0xlbmd0aCgpIHx8IG1fdmFsdWUtPmlzTnVtYmVyKCkgfHwgbV92
YWx1ZS0+aXNQZXJjZW50YWdlKCkgfHwgbV92YWx1ZS0+aXNBbmdsZSgpCi0gICAgICAgIHx8IG1f
dmFsdWUtPmlzVGltZSgpIHx8IG1fdmFsdWUtPmlzUmVzb2x1dGlvbigpIHx8IG1fdmFsdWUtPmlz
RmxleCgpIHx8IG1fdmFsdWUtPmlzRnJlcXVlbmN5KCk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6aXNOZWdhdGl2ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzTnVtZXJp
Y1ZhbHVlKCkgJiYgbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSA8IDAuMDsKLX0KLQotdm9pZCBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpuZWdhdGUoKQotewotICAgIEFTU0VSVChpc051bWVyaWNW
YWx1ZSgpKTsKLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLjAgLSBt
X3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOwotfQotCi12
b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmludmVydCgpCi17Ci0gICAgQVNTRVJUKGlz
TnVtZXJpY1ZhbHVlKCkpOwotICAgIGlmICghbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSkKLSAgICAg
ICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjppbmZpbml0eSgpLCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOwotCi0gICAg
bV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4wIC8gbV92YWx1ZS0+ZG91Ymxl
VmFsdWUoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjphZGQoY29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSYgbm9k
ZSwgVW5pdENvbnZlcnNpb24gdW5pdENvbnZlcnNpb24pCi17Ci0gICAgYXV0byB2YWx1ZVR5cGUg
PSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0KLSAgICBzd2l0Y2ggKHVuaXRDb252ZXJzaW9u
KSB7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6SW52YWxpZDoKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgVW5pdENvbnZlcnNpb246OlBy
ZXNlcnZlOgotICAgICAgICBBU1NFUlQobm9kZS5wcmltaXRpdmVUeXBlKCkgPT0gdmFsdWVUeXBl
KTsKLSAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV92YWx1ZS0+
ZG91YmxlVmFsdWUoKSArIG5vZGUuZG91YmxlVmFsdWUodmFsdWVUeXBlKSwgdmFsdWVUeXBlKTsK
LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOiB7
Ci0gICAgICAgIGF1dG8gdmFsdWVDYXRlZ29yeSA9IHVuaXRDYXRlZ29yeSh2YWx1ZVR5cGUpOwot
ICAgICAgICAvLyBGSVhNRTogSXQncyBhd2t3YXJkIHRoYXQgY2Fub25pY2FsVW5pdFR5cGVGb3JD
YXRlZ29yeSgpIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBDU1NVbml0Q2F0ZWdvcnk6OlBlcmNl
bnQuCi0gICAgICAgIGF1dG8gY2Fub25pY2FsVHlwZSA9IHZhbHVlQ2F0ZWdvcnkgPT0gQ1NTVW5p
dENhdGVnb3J5OjpQZXJjZW50ID8gQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFIDogY2Fub25p
Y2FsVW5pdFR5cGVGb3JDYXRlZ29yeSh2YWx1ZUNhdGVnb3J5KTsKLSAgICAgICAgQVNTRVJUKGNh
bm9uaWNhbFR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOKTsKLSAgICAgICAgZG91Ymxl
IGxlZnRWYWx1ZSA9IG1fdmFsdWUtPmRvdWJsZVZhbHVlKGNhbm9uaWNhbFR5cGUpOwotICAgICAg
ICBkb3VibGUgcmlnaHRWYWx1ZSA9IG5vZGUuZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7Ci0g
ICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlZnRWYWx1ZSArIHJp
Z2h0VmFsdWUsIGNhbm9uaWNhbFR5cGUpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgfQot
fQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6Om11bHRpcGx5KGRvdWJsZSBtdWx0
aXBsaWVyKQotewotICAgIGF1dG8gdmFsdWVUeXBlID0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgp
OwotICAgIEFTU0VSVChoYXNEb3VibGVWYWx1ZSh2YWx1ZVR5cGUpKTsKLSAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3VibGVWYWx1ZSh2YWx1ZVR5cGUp
ICogbXVsdGlwbGllciwgdmFsdWVUeXBlKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlwZSB1bml0VHlwZSkKLXsKLSAgICBB
U1NFUlQodW5pdENhdGVnb3J5KHVuaXRUeXBlKSA9PSB1bml0Q2F0ZWdvcnkobV92YWx1ZS0+cHJp
bWl0aXZlVHlwZSgpKSk7Ci0gICAgZG91YmxlIG5ld1ZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFs
dWUodW5pdFR5cGUpOwotICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5l
d1ZhbHVlLCB1bml0VHlwZSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
Y2Fub25pY2FsaXplVW5pdCgpCi17Ci0gICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0
ZWdvcnlGb3JDb21iaW5hdGlvbihtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOwotICAgIGlmIChj
YXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgYXV0byBjYW5vbmljYWxUeXBlID0gY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlv
bkNhdGVnb3J5KGNhdGVnb3J5KTsKLSAgICBpZiAoY2Fub25pY2FsVHlwZSA9PSBtX3ZhbHVlLT5w
cmltaXRpdmVUeXBlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRvdWJsZSBuZXdWYWx1ZSA9
IG1fdmFsdWUtPmRvdWJsZVZhbHVlKGNhbm9uaWNhbFR5cGUpOwotICAgIG1fdmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5ld1ZhbHVlLCBjYW5vbmljYWxUeXBlKTsKLX0KLQotc3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPENhbGNFeHByZXNzaW9uTnVtYmVyPihtX3ZhbHVlLT5mbG9hdFZhbHVlKCkpOwotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgotICAgICAgICByZXR1cm4gbWFrZVVuaXF1
ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KGNvbnZlcnNpb25EYXRhKSwgTGVuZ3RoVHlwZTo6Rml4ZWQpKTsKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TGVuZ3RoOiB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9u
TGVuZ3RoPihtX3ZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRGbG9hdENvbnZlcnNpb24gfCBQ
ZXJjZW50Q29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpKTsKLSAgICB9Ci0gICAgLy8gT25seSB0
eXBlcyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYSBMZW5ndGggZXhwcmVzc2lvbiBjYW4gYmUgY29u
dmVydGVkCi0gICAgLy8gdG8gYSBDYWxjRXhwcmVzc2lvbk5vZGUuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXIgbWFrZXMgbm8gc2Vuc2UgYXMgYSBMZW5ndGguCi0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgotICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgotICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotZG91
YmxlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVu
aXRUeXBlKSBjb25zdAotewotICAgIGlmIChoYXNEb3VibGVWYWx1ZSh1bml0VHlwZSkpIHsKLSAg
ICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIEFTU0VSVCh1bml0Q2F0ZWdvcnkobV92YWx1ZS0+
cHJpbWl0aXZlVHlwZSgpKSA9PSB1bml0Q2F0ZWdvcnkodW5pdFR5cGUpKSwgYnV0IG9ubHkgd2hl
biBhbGwgY2FsbGVycyBhcmUgZml4ZWQgKGUuZy4gd2Via2l0Lm9yZy9iLzIwNDgyNikuCi0gICAg
ICAgIGlmICh1bml0Q2F0ZWdvcnkobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSAhPSB1bml0Q2F0
ZWdvcnkodW5pdFR5cGUpKSB7Ci0gICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3Ry
ZWFtIDw8ICJDYWxsaW5nIGRvdWJsZVZhbHVlKCkgd2l0aCB1bml0ICIgPDwgdW5pdFR5cGUgPDwg
IiBvbiBhIG5vZGUgb2YgdW5pdCB0eXBlICIgPDwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpIDw8
ICIgd2hpY2ggaXMgaW5jb21wYXRpYmxlIik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAg
ICAgfQotCi0gICAgICAgIHJldHVybiBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7Ci0g
ICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiAwOwotfQotCi1kb3Vi
bGUgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHN3aXRj
aCAoY2F0ZWdvcnkoKSkgewotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgot
ICAgICAgICByZXR1cm4gbV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxkb3VibGU+KGNvbnZlcnNpb25E
YXRhKTsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAgICAgIHJldHVybiBtX3ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6Ci0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlRpbWU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6Ci0gICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gMDsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0
RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2
YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
Ojpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fdmFsdWUtPmNvbGxlY3REaXJlY3RS
b290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwotfQotCi1ib29sIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90
aGVyKSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fdmFsdWUsIHN0YXRp
Y19jYXN0PGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmPihvdGhlcikubV92YWx1ZSk7
Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0
cykgY29uc3QKLXsKLSAgICB0cyA8PCAidmFsdWUgIiA8PCBtX3ZhbHVlLT5jdXN0b21DU1NUZXh0
KCkgPDwgIiAoY2F0ZWdvcnk6ICIgPDwgY2F0ZWdvcnkoKSA8PCAiLCB0eXBlOiAiIDw8IHByaW1p
dGl2ZVR5cGUoKSA8PCAiKSI7Ci19Ci0KLWNsYXNzIENTU0NhbGNOZWdhdGVOb2RlIGZpbmFsIDog
cHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxD
U1NDYWxjTmVnYXRlTm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hp
bGQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjTmVnYXRlTm9k
ZShXVEZNb3ZlKGNoaWxkKSkpOwotICAgIH0KLQotICAgIGNvbnN0IENTU0NhbGNFeHByZXNzaW9u
Tm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0gICAgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQotICAg
IHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkgeyBtX2No
aWxkID0gV1RGTW92ZShjaGlsZCk7IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxjTmVnYXRlTm9k
ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQotICAgICAgICA6IENTU0NhbGNF
eHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKLSAgICAgICAgLCBtX2NoaWxkKFdURk1v
dmUoY2hpbGQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1Vu
aXRUeXBlIHVuaXRUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGlsZC0+ZG91YmxlVmFs
dWUodW5pdFR5cGUpOyB9Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QgZmluYWwgeyByZXR1cm4g
LW1fY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7IH0KLSAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDc3NDYWxjTmVnYXRlOyB9Ci0gICAgQ1NT
VW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPnBy
aW1pdGl2ZVR5cGUoKTsgfQotCi0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERl
cGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5h
bCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3Bl
cnRpZXMpOyB9Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBt
X2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVy
dGllcyk7IH0KLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLSAg
ICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotc3RkOjp1bmlxdWVf
cHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBj
b25zdAotewotICAgIGF1dG8gY2hpbGROb2RlID0gbV9jaGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Np
b24oY29udmVyc2lvbkRhdGEpOwotICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9u
TmVnYXRpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY05lZ2F0ZU5v
ZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIi0iIDw8IG1fY2hp
bGQuZ2V0KCk7Ci19Ci0KLWNsYXNzIENTU0NhbGNJbnZlcnROb2RlIGZpbmFsIDogcHVibGljIENT
U0NhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjSW52
ZXJ0Tm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpCi0gICAg
ewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjSW52ZXJ0Tm9kZShXVEZNb3Zl
KGNoaWxkKSkpOwotICAgIH0KLQotICAgIGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hp
bGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0gICAgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0
Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkgeyBtX2NoaWxkID0gV1RG
TW92ZShjaGlsZCk7IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxjSW52ZXJ0Tm9kZShSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9u
Tm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKLSAgICAgICAgLCBtX2NoaWxkKFdURk1vdmUoY2hpbGQp
KQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2Rl
PiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikg
Y29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
Y2hpbGQtPmlzWmVybygpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBj
b25zdCBmaW5hbDsKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBUeXBlOjpDc3NDYWxjSW52ZXJ0OyB9Ci0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0
aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPnByaW1pdGl2ZVR5cGUoKTsg
fQotCi0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNv
bGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9Ci0gICAg
dm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0
RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLQotICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLSAgICBSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNz
aW9uTm9kZT4gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIGF1
dG8gY2hpbGROb2RlID0gbV9jaGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRh
dGEpOwotICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihXVEZN
b3ZlKGNoaWxkTm9kZSkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY0ludmVydE5vZGU6OmRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAotewotICAgIGF1dG8gY2hpbGRWYWx1ZSA9
IG1fY2hpbGQtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKLSAgICBpZiAoIWNoaWxkVmFsdWUpCi0g
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0g
ICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9k
ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhKSBjb25zdAotewotICAgIGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmNvbXB1
dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7Ci0gICAgaWYgKCFjaGlsZFZhbHVlKQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgIHJl
dHVybiAxLjAgLyBjaGlsZFZhbHVlOwotfQotCi12b2lkIENTU0NhbGNJbnZlcnROb2RlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICIxLyIgPDwgbV9jaGlsZC5nZXQo
KTsKLX0KLQotLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIHRoZSAiVG8gYWRkIHR3byB0eXBlcyB0
eXBlMSBhbmQgdHlwZTIsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoiIHJ1bGVzLgotCi1z
dGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRlZ29yeSBhZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpXVtzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpXSA9IHsKLS8vICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlciAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCAg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQgICAgICAgIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnROdW1iZXIgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgK
LSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIs
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyCi0gICAgeyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpM
ZW5ndGgsICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aAotICAgIHsgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExl
bmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgICAgICAgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCB9
LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50Ci0gICAgeyBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9LCAvLyAgICAgICAgIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAotfTsKLQotc3RhdGljIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBs
ZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUsIENhbGNPcGVy
YXRvciBvcCkKLXsKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGxlZnRDYXRlZ29yeSA9IGxlZnRT
aWRlLmNhdGVnb3J5KCk7Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSByaWdodENhdGVnb3J5ID0g
cmlnaHRTaWRlLmNhdGVnb3J5KCk7Ci0gICAgQVNTRVJUKGxlZnRDYXRlZ29yeSA8IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLSAgICBBU1NFUlQocmlnaHRDYXRlZ29yeSA8IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLQotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNP
cGVyYXRvcjo6QWRkOgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAgICAgICAg
aWYgKGxlZnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlICYmIHJpZ2h0Q2F0
ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKLSAgICAgICAgICAgIHJldHVybiBh
ZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVmdENhdGVnb3J5KV1bc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KHJpZ2h0Q2F0ZWdvcnkpXTsKLSAgICAgICAgaWYgKGxlZnRDYXRl
Z29yeSA9PSByaWdodENhdGVnb3J5KQotICAgICAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeTsK
LSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseToKLSAgICAgICAgaWYgKGxlZnRDYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXI7Ci0gICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyID8gcmlnaHRDYXRlZ29yeSA6IGxlZnRDYXRlZ29yeTsKLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6RGl2aWRlOgotICAgICAgICBpZiAocmlnaHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXIgfHwgcmlnaHRTaWRlLmlzWmVybygpKQotICAgICAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5
OwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1h
eDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAg
fQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyOwotfQotCi0vLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgY29ycmVjdCBj
YXRlZ29yeSBjb21wdXRhdGlvbiBwZXI6Ci0vLyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhvdWRpbmku
b3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtaW52ZXJ0LWEtdHlwZT4KLS8vIFRv
IGludmVydCBhIHR5cGUgdHlwZSwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgotLy8gTGV0
IHJlc3VsdCBiZSBhIG5ldyB0eXBlIHdpdGggYW4gaW5pdGlhbGx5IGVtcHR5IG9yZGVyZWQgbWFw
IGFuZCBhbiBpbml0aWFsbHkgbnVsbCBwZXJjZW50IGhpbnQKLS8vIEZvciBlYWNoIHVuaXQg4oaS
IGV4cG9uZW50IG9mIHR5cGUsIHNldCByZXN1bHRbdW5pdF0gdG8gKC0xICogZXhwb25lbnQpLgot
c3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnlGb3JJbnZlcnQoQ2FsY3VsYXRpb25D
YXRlZ29yeSBjYXRlZ29yeSkKLXsKLSAgICByZXR1cm4gY2F0ZWdvcnk7Ci19Ci0KLXN0YXRpYyBD
YWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IFZlY3RvcjxSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzLCBDYWxjT3BlcmF0b3Igb3ApCi17Ci0gICAgaWYg
KG5vZGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOwotCi0gICAgYXV0byBjdXJyZW50Q2F0ZWdvcnkgPSBub2Rlc1swXS0+Y2F0ZWdvcnkoKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkgewotICAg
ICAgICBjb25zdCBhdXRvJiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7Ci0gICAgICAgIAotICAgICAg
ICBhdXRvIHVzZWRPcGVyYXRvciA9IG9wOwotICAgICAgICBpZiAobm9kZS50eXBlKCkgPT0gQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0KQotICAgICAgICAgICAgdXNl
ZE9wZXJhdG9yID0gQ2FsY09wZXJhdG9yOjpEaXZpZGU7Ci0KLSAgICAgICAgYXV0byBuZXh0Q2F0
ZWdvcnkgPSBub2RlLmNhdGVnb3J5KCk7Ci0KLSAgICAgICAgc3dpdGNoICh1c2VkT3BlcmF0b3Ip
IHsKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKLSAgICAgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OlN1YnRyYWN0OgotICAgICAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3Vk
aW5pLm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLWFkZC10d28tdHlwZXM+Ci0g
ICAgICAgICAgICAvLyBBdCBhICsgb3IgLSBzdWItZXhwcmVzc2lvbiwgYXR0ZW1wdCB0byBhZGQg
dGhlIHR5cGVzIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVudHMuCi0gICAgICAgICAgICAv
LyBJZiB0aGlzIHJldHVybnMgZmFpbHVyZSwgdGhlIGVudGlyZSBjYWxjdWxhdGlvbuKAmXMgdHlw
ZSBpcyBmYWlsdXJlLiBPdGhlcndpc2UsIHRoZSBzdWItZXhwcmVzc2lvbuKAmXMgdHlwZSBpcyB0
aGUgcmV0dXJuZWQgdHlwZS4KLSAgICAgICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkgPCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiBuZXh0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpBbmdsZSkKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnkgPSBhZGRTdWJ0cmFj
dFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY3VycmVudENhdGVnb3J5KV1bc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG5leHRDYXRlZ29yeSldOwotICAgICAgICAgICAgZWxzZSBpZiAoY3VycmVu
dENhdGVnb3J5ICE9IG5leHRDYXRlZ29yeSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6Ci0gICAgICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMu
Y3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtbXVsdGlwbHkt
dHdvLXR5cGVzPgotICAgICAgICAgICAgLy8gQXQgYSAqIHN1Yi1leHByZXNzaW9uLCBtdWx0aXBs
eSB0aGUgdHlwZXMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZ3VtZW50cy4gVGhlIHN1Yi1leHBy
ZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1cm5lZCByZXN1bHQuCi0gICAgICAgICAgICBpZiAo
Y3VycmVudENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAmJiBuZXh0Q2F0
ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLQotICAgICAgICAgICAgY3VycmVudENh
dGVnb3J5ID0gY3VycmVudENhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciA/
IG5leHRDYXRlZ29yeSA6IGN1cnJlbnRDYXRlZ29yeTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g
ICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAgICAgICAgICAgIGF1dG8gaW52
ZXJ0Q2F0ZWdvcnkgPSBjYXRlZ29yeUZvckludmVydChuZXh0Q2F0ZWdvcnkpOwotICAgICAgICAg
ICAgCi0gICAgICAgICAgICAvLyBBdCBhIC8gc3ViLWV4cHJlc3Npb24sIGxldCBsZWZ0IHR5cGUg
YmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgbGVmdCBhcmd1bWVudCwK
LSAgICAgICAgICAgIC8vIGFuZCByaWdodCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgZmluZGluZyB0
aGUgdHlwZXMgb2YgaXRzIHJpZ2h0IGFyZ3VtZW50IGFuZCB0aGVuIGludmVydGluZyBpdC4KLSAg
ICAgICAgICAgIC8vIFRoZSBzdWItZXhwcmVzc2lvbuKAmXMgdHlwZSBpcyB0aGUgcmVzdWx0IG9m
IG11bHRpcGx5aW5nIHRoZSBsZWZ0IHR5cGUgYW5kIHJpZ2h0IHR5cGUuCi0gICAgICAgICAgICBp
ZiAoaW52ZXJ0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyIHx8IG5vZGUu
aXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWluOgotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgICAgICBj
YXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6Ci0gICAgICAgICAgICAvLyBUaGUgdHlwZSBvZiBhIG1p
bigpLCBtYXgoKSwgb3IgY2xhbXAoKSBleHByZXNzaW9uIGlzIHRoZSByZXN1bHQgb2YgYWRkaW5n
IHRoZSB0eXBlcyBvZiBpdHMgY29tbWEtc2VwYXJhdGVkIGNhbGN1bGF0aW9ucwotICAgICAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGN1cnJlbnRDYXRlZ29yeTsKLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgcmVzb2x2ZWRUeXBlRm9yTWluT3JNYXhPckNsYW1wKENhbGN1bGF0aW9uQ2F0ZWdvcnkg
Y2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKLXsKLSAg
ICBzd2l0Y2ggKGNhdGVnb3J5KSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Ci0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudExlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xl
OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOgotICAgICAgICByZXR1cm4gY2F0ZWdvcnk7Ci0KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbkNhdGVnb3J5ID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TGVuZ3RoOwotICAgICAgICBpZiAoZGVzdGluYXRpb25DYXRlZ29yeSA9
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjsKLSAgICAgICAgcmV0dXJuIGNhdGVnb3J5Owot
ICAgIH0KLQotICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLX0KLQotc3Rh
dGljIGJvb2wgaXNTYW1lUGFpcihDYWxjdWxhdGlvbkNhdGVnb3J5IGEsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgYiwgQ2FsY3VsYXRpb25DYXRlZ29yeSB4LCBDYWxjdWxhdGlvbkNhdGVnb3J5IHkpCi17
Ci0gICAgcmV0dXJuIChhID09IHggJiYgYiA9PSB5KSB8fCAoYSA9PSB5ICYmIGIgPT0geCk7Ci19
Ci0KLWNsYXNzIENTU0NhbGNPcGVyYXRpb25Ob2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlKENhbGNPcGVyYXRvciwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+IGNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
JiYgdmFsdWVzKTsKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVh
dGVQcm9kdWN0KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpOwot
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZU1pbk9yTWF4T3JD
bGFtcChDYWxjT3BlcmF0b3IsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2
YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0KLSAgICBz
dGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnkoUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJik7Ci0KLSAgICBzdGF0aWMgdm9pZCBidWlsZENTU1RleHQoY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRlciYpOwotCi0gICAgQ2FsY09wZXJhdG9y
IGNhbGNPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3I7IH0KLSAgICBib29sIGlz
Q2FsY1N1bU5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6
QWRkOyB9Ci0gICAgYm9vbCBpc0NhbGNQcm9kdWN0Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bl
cmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsgfQotICAgIGJvb2wgaXNNaW5Pck1heE5v
ZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1f
b3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXg7IH0KLSAgICBib29sIHNob3VsZFNvcnRDaGls
ZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzQ2FsY1N1bU5vZGUoKSB8fCBpc0NhbGNQcm9kdWN0Tm9k
ZSgpOyB9Ci0KLSAgICB2b2lkIGhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9y
KTsKLSAgICB2b2lkIGNvbWJpbmVDaGlsZHJlbigpOwotICAgIAotICAgIGJvb2wgY2FuQ29tYmlu
ZUFsbENoaWxkcmVuKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLSAg
ICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIHsgcmV0dXJu
IG1fY2hpbGRyZW47IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxj
dWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmln
aHRTaWRlKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKLSAgICAg
ICAgLCBtX29wZXJhdG9yKG9wKQotICAgIHsKLSAgICAgICAgbV9jaGlsZHJlbi5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDIpOwotICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKGxlZnRTaWRlKSk7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1v
dmUocmlnaHRTaWRlKSk7Ci0gICAgfQotCi0gICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4pCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNhdGVnb3J5KQotICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCi0gICAgICAgICwgbV9j
aGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKLSAgICB7Ci0gICAgfQotCi0gICAgVHlwZSB0eXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3NzQ2FsY09wZXJhdGlvbjsgfQotCi0gICAgYm9vbCBp
c1plcm8oKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuICFkb3VibGVWYWx1ZShw
cmltaXRpdmVUeXBlKCkpOwotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotCi0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlw
ZSgpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29u
c3QgZmluYWw7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5h
bDsKLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhI
YXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgc3RhdGljIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSogZ2V0TnVtYmVyU2lkZShDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSkKLSAgICB7Ci0gICAgICAgIGlmIChsZWZ0U2lkZS5j
YXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAgICAgIHJl
dHVybiAmbGVmdFNpZGU7Ci0gICAgICAgIGlmIChyaWdodFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gJnJpZ2h0U2lkZTsK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgZG91YmxlIGV2YWx1YXRlKGNv
bnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBldmFsdWF0ZU9wZXJhdG9yKG1fb3BlcmF0b3IsIGNoaWxkcmVuKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yLCBjb25zdCBWZWN0b3I8
ZG91YmxlPiYpOwotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlm
eU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKLSAgICBzdGF0
aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlSZWN1cnNpdmUoUmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKLSAgICAKLSAgICBlbnVtIGNsYXNzIEdy
b3VwaW5nUGFyZW5zIHsKLSAgICAgICAgT21pdCwKLSAgICAgICAgSW5jbHVkZQotICAgIH07Ci0g
ICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0IENTU0NhbGNFeHByZXNz
aW9uTm9kZSYsIFN0cmluZ0J1aWxkZXImLCBHcm91cGluZ1BhcmVucyA9IEdyb3VwaW5nUGFyZW5z
OjpJbmNsdWRlKTsKLQotICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOwotICAgIFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKLX07Ci0KLVJlZlB0cjxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0
b3Igb3AsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQotewotICAgIGlmICghbGVmdFNpZGUg
fHwgIXJpZ2h0U2lkZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBBU1NFUlQob3Ag
PT0gQ2FsY09wZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7Ci0K
LSAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcik7Ci0gICAgQVNTRVJUKHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyKTsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29y
eSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKLSAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMs
IHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9w
IDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8
IHByZXR0eVByaW50Tm9kZSgqbGVmdFNpZGUpIDw8ICIgYW5kICIgPDwgKnJpZ2h0U2lkZSk7Ci0g
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcg
Q1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIG9wLCBsZWZ0U2lkZS5yZWxlYXNlTm9u
TnVsbCgpLCByaWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSkpOwotfQotCi1SZWZQdHI8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oVmVjdG9yPFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKLXsKLSAgICBpZiAodmFsdWVzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIG5ld0NhdGVnb3J5
ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6OkFkZCk7Ci0gICAgaWYg
KG5ld0NhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Ci0gICAgICAgIExP
R19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgc3VtIG5vZGUg
YmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmlu
dE5vZGVzKHZhbHVlcykpOwotICAgICAgICBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5
KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpBZGQpOwotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKG5ld0Nh
dGVnb3J5LCBDYWxjT3BlcmF0b3I6OkFkZCwgV1RGTW92ZSh2YWx1ZXMpKSk7Ci19Ci0KLVJlZlB0
cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1
Y3QoVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKLXsKLSAgICBp
ZiAodmFsdWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRv
IG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6Ok11
bHRpcGx5KTsKLSAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRv
IGNyZWF0ZSBwcm9kdWN0IG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5
IGZyb20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOwotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25O
b2RlKG5ld0NhdGVnb3J5LCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBXVEZNb3ZlKHZhbHVlcykp
KTsKLX0KLQotUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciBvcCwgVmVjdG9yPFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5h
dGlvbkNhdGVnb3J5KQotewotICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBv
cCA9PSBDYWxjT3BlcmF0b3I6Ok1heCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wKTsKLSAg
ICBBU1NFUlRfSU1QTElFUyhvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wLCB2YWx1ZXMuc2l6ZSgp
ID09IDMpOwotCi0gICAgT3B0aW9uYWw8Q2FsY3VsYXRpb25DYXRlZ29yeT4gY2F0ZWdvcnkgPSBz
dGQ6Om51bGxvcHQ7Ci0gICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgewotICAgICAgICBh
dXRvIHZhbHVlQ2F0ZWdvcnkgPSByZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xhbXAodmFsdWUt
PmNhdGVnb3J5KCksIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotCi0gICAgICAgIEFTU0VSVCh2YWx1
ZUNhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwotICAgICAgICBpZiAoIWNh
dGVnb3J5KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcikgewotICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBz
dHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgIiA8PCBvcCA8
PCAiIG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBw
cmV0dHlQcmludE5vZGVzKHZhbHVlcykpOwotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0ZWdvcnkgPSB2YWx1ZUNhdGVnb3J5Owot
ICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHZhbHVlQ2F0ZWdvcnkpIHsKLSAg
ICAgICAgICAgIGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnks
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgpLCB2YWx1ZUNh
dGVnb3J5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXIpKSB7Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKGNhdGVnb3J5
LnZhbHVlKCksIG9wLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0
aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCi17Ci0g
ICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6QWRkIHx8IG9wID09IENhbGNPcGVyYXRvcjo6
TXVsdGlwbHkpOwotCi0gICAgYXV0byBoYXNDaGlsZFdpdGhPcGVyYXRvciA9IFsmXSAoQ2FsY09w
ZXJhdG9yIG9wKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0g
ICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBk
b3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigp
ID09IG9wKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgaWYgKCFoYXNDaGlsZFdpdGhPcGVyYXRvcihv
cCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsK
LSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkgJiYgZG93
bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9
PSBvcCkgewotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBmb3IgKGF1
dG8mIGNoaWxkVG9Nb3ZlIDogY2hpbGRyZW4pCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4u
YXBwZW5kKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwotICAgIH0KLSAgICAKLSAgICBu
ZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwotICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0No
aWxkcmVuKTsKLX0KLQotZW51bSBjbGFzcyBTb3J0aW5nQ2F0ZWdvcnkgewotICAgIE51bWJlciwK
LSAgICBQZXJjZW50LAotICAgIERpbWVuc2lvbiwKLSAgICBPdGhlcgotfTsKLQotc3RhdGljIFNv
cnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnlGb3JUeXBlKENTU1VuaXRUeXBlIHVuaXRUeXBl
KQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGluZ0NhdGVnb3J5IHNvcnRPcmRlcltdID0g
ewotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlciwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsCi0gICAgICAgIFNvcnRpbmdDYXRlZ29y
eTo6UGVyY2VudCwgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwKLSAgICAg
ICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyLAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAg
IC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsCi0gICAgICAgIFNvcnRpbmdD
YXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsCi0g
ICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6VGltZSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3ksCi0gICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6
T3RoZXIsICAgICAgICAgLy8gVU90aGVyCi0gICAgfTsKLQotICAgIENPTVBJTEVfQVNTRVJUKEFS
UkFZX1NJWkUoc29ydE9yZGVyKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpICsgMSwgc29ydE9yZGVyX3NpemVfc2hvdWxkX21hdGNoX1VuaXRDYXRl
Z29yeSk7Ci0gICAgcmV0dXJuIHNvcnRPcmRlcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FsY1Vu
aXRDYXRlZ29yeSh1bml0VHlwZSkpXTsKLX0KLQotc3RhdGljIFNvcnRpbmdDYXRlZ29yeSBzb3J0
aW5nQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQotewotICAgIGlm
IChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKLSAgICAgICAgcmV0dXJuIHNv
cnRpbmdDYXRlZ29yeUZvclR5cGUobm9kZS5wcmltaXRpdmVUeXBlKCkpOwotCi0gICAgcmV0dXJu
IFNvcnRpbmdDYXRlZ29yeTo6T3RoZXI7Ci19Ci0KLXN0YXRpYyBDU1NVbml0VHlwZSBwcmltaXRp
dmVUeXBlRm9yQ29tYmluYXRpb24oY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQot
ewotICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKLSAgICAgICAg
cmV0dXJuIG5vZGUucHJpbWl0aXZlVHlwZSgpOwotICAgIAotICAgIHJldHVybiBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047Ci19Ci0KLXN0YXRpYyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpV
bml0Q29udmVyc2lvbiBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlwZXMoQ1NTVW5pdFR5cGUg
Zmlyc3RUeXBlLCBDU1NVbml0VHlwZSBzZWNvbmRUeXBlKQotewotICAgIGlmIChmaXJzdFR5cGUg
PT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOIHx8IHNlY29uZFR5cGUgPT0gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOKQotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
VW5pdENvbnZlcnNpb246OkludmFsaWQ7Ci0KLSAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxj
dWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oZmlyc3RUeXBlKTsKLQotICAgIC8vIENvbXBh
dGlibGUgdHlwZXMuCi0gICAgaWYgKGZpcnN0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIgJiYgZmlyc3RDYXRlZ29yeSA9PSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmlu
YXRpb24oc2Vjb25kVHlwZSkpCi0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOwotCi0gICAgLy8gTWF0Y2hpbmcgdHlw
ZXMuCi0gICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlICYmIGhhc0RvdWJsZVZhbHVlKGZp
cnN0VHlwZSkpCi0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0
Q29udmVyc2lvbjo6UHJlc2VydmU7Ci0KLSAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7Ci19Ci0KLWJvb2wgQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNvbnN0Ci17Ci0gICAgaWYgKG1fY2hpbGRy
ZW4uc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYgKCFpczxDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlPihtX2NoaWxkcmVuWzBdKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byBmaXJzdFVuaXRUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZl
VHlwZSgpOwotICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JD
b21iaW5hdGlvbihtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCkpOwotCi0gICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0
byYgbm9kZSA9IG1fY2hpbGRyZW5baV07Ci0KLSAgICAgICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlPihub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBhdXRvIG5vZGVVbml0VHlwZSA9IG5vZGUtPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgYXV0
byBub2RlQ2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24obm9kZVVu
aXRUeXBlKTsKLQotICAgICAgICBpZiAobm9kZUNhdGVnb3J5ICE9IGZpcnN0Q2F0ZWdvcnkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKG5vZGVDYXRlZ29yeSA9PSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBub2RlVW5pdFR5cGUgIT0gZmlyc3RVbml0VHlw
ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghaGFz
RG91YmxlVmFsdWUobm9kZVVuaXRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
Y29tYmluZUNoaWxkcmVuKCkKLXsKLSAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPCAyKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2hvdWxkU29ydENoaWxkcmVuKCkpIHsKLSAgICAgICAg
Ly8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NvcnQtYS1jYWxjdWxh
dGlvbnMtY2hpbGRyZW4+Ci0gICAgICAgIHN0ZDo6c3RhYmxlX3NvcnQobV9jaGlsZHJlbi5iZWdp
bigpLCBtX2NoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBhdXRvJiBmaXJzdCwgY29uc3QgYXV0byYg
c2Vjb25kKSB7Ci0gICAgICAgICAgICAvLyBTb3J0IG9yZGVyOiBudW1iZXIsIHBlcmNlbnRhZ2Us
IGRpbWVuc2lvbiwgb3RoZXIuCi0gICAgICAgICAgICBTb3J0aW5nQ2F0ZWdvcnkgZmlyc3RDYXRl
Z29yeSA9IHNvcnRpbmdDYXRlZ29yeShmaXJzdC5nZXQoKSk7Ci0gICAgICAgICAgICBTb3J0aW5n
Q2F0ZWdvcnkgc2Vjb25kQ2F0ZWdvcnkgPSBzb3J0aW5nQ2F0ZWdvcnkoc2Vjb25kLmdldCgpKTsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpcnN0Q2F0ZWdvcnkgPT0gU29ydGluZ0Nh
dGVnb3J5OjpEaW1lbnNpb24gJiYgc2Vjb25kQ2F0ZWdvcnkgPT0gU29ydGluZ0NhdGVnb3J5OjpE
aW1lbnNpb24pIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBub2RlcyBjb250YWlucyBhbnkgZGlt
ZW5zaW9ucywgcmVtb3ZlIHRoZW0gZnJvbSBub2Rlcywgc29ydCB0aGVtIGJ5IHRoZWlyIHVuaXRz
LCBhbmQgYXBwZW5kIHRoZW0gdG8gcmV0LgotICAgICAgICAgICAgICAgIGF1dG8gZmlyc3RVbml0
U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBlU3RyaW5nKGZpcnN0LT5wcmltaXRp
dmVUeXBlKCkpOwotICAgICAgICAgICAgICAgIGF1dG8gc2Vjb25kVW5pdFN0cmluZyA9IENTU1By
aW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyhzZWNvbmQtPnByaW1pdGl2ZVR5cGUoKSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVMZXNzVGhhbihmaXJzdFVuaXRT
dHJpbmcsIHNlY29uZFVuaXRTdHJpbmcpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZpcnN0Q2F0ZWdvcnkpIDwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KHNlY29uZENhdGVnb3J5KTsKLSAgICAgICAgfSk7Ci0KLSAgICAgICAgTE9HX1dJ
VEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAicG9zdC1zb3J0OiAiIDw8ICp0aGlzKTsKLSAgICB9
Ci0KLSAgICBpZiAoY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpBZGQpIHsKLSAgICAg
ICAgLy8gRm9yIGVhY2ggc2V0IG9mIHJvb3TigJlzIGNoaWxkcmVuIHRoYXQgYXJlIG51bWVyaWMg
dmFsdWVzIHdpdGggaWRlbnRpY2FsIHVuaXRzLAotICAgICAgICAvLyByZW1vdmUgdGhvc2UgY2hp
bGRyZW4gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xlIG51bWVyaWMgdmFsdWUgY29udGFp
bmluZwotICAgICAgICAvLyB0aGUgc3VtIG9mIHRoZSByZW1vdmVkIG5vZGVzLCBhbmQgd2l0aCB0
aGUgc2FtZSB1bml0LgotICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
IG5ld0NoaWxkcmVuOwotICAgICAgICBuZXdDaGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KG1fY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5k
KG1fY2hpbGRyZW5bMF0uY29weVJlZigpKTsKLQotICAgICAgICBDU1NVbml0VHlwZSBwcmV2aW91
c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obmV3Q2hpbGRyZW5bMF0uZ2V0KCkp
OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBjdXJyZW50Tm9kZSA9IG1fY2hpbGRyZW5baV07Ci0g
ICAgICAgICAgICBDU1NVbml0VHlwZSBjdXJyZW50VHlwZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21i
aW5hdGlvbihjdXJyZW50Tm9kZS5nZXQoKSk7Ci0KLSAgICAgICAgICAgIGF1dG8gY29udmVyc2lv
blR5cGUgPSBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlwZXMocHJldmlvdXNUeXBlLCBjdXJy
ZW50VHlwZSk7Ci0gICAgICAgICAgICBpZiAoY29udmVyc2lvblR5cGUgIT0gQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQpIHsKLSAgICAgICAgICAgICAg
ICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdDaGlsZHJlbi5sYXN0KCku
Z2V0KCkpLmFkZChkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjdXJyZW50Tm9k
ZS5nZXQoKSksIGNvbnZlcnNpb25UeXBlKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJldmlvdXNUeXBlID0gcHJpbWl0aXZlVHlwZUZv
ckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlKTsKLSAgICAgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChjdXJyZW50Tm9kZS5jb3B5UmVmKCkpOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2NoaWxkcmVuID0g
V1RGTW92ZShuZXdDaGlsZHJlbik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAo
Y2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSkgewotICAgICAgICAvLyBJ
ZiByb290IGhhcyBtdWx0aXBsZSBjaGlsZHJlbiB0aGF0IGFyZSBudW1iZXJzIChub3QgcGVyY2Vu
dGFnZXMgb3IgZGltZW5zaW9ucyksCi0gICAgICAgIC8vIHJlbW92ZSB0aGVtIGFuZCByZXBsYWNl
IHRoZW0gd2l0aCBhIHNpbmdsZSBudW1iZXIgY29udGFpbmluZyB0aGUgcHJvZHVjdCBvZiB0aGUg
cmVtb3ZlZCBub2Rlcy4KLSAgICAgICAgZG91YmxlIG11bHRpcGxpZXIgPSAxOwotCi0gICAgICAg
IC8vIFNvcnRpbmcgd2lsbCBoYXZlIHB1dCB0aGUgbnVtYmVyIG5vZGVzIGZpcnN0LgotICAgICAg
ICB1bnNpZ25lZCBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID0gMDsKLSAgICAgICAgZm9yIChhdXRv
JiBub2RlIDogbV9jaGlsZHJlbikgewotICAgICAgICAgICAgYXV0byBub2RlVHlwZSA9IHByaW1p
dGl2ZVR5cGVGb3JDb21iaW5hdGlvbihub2RlLmdldCgpKTsKLSAgICAgICAgICAgIGlmIChub2Rl
VHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIAotICAgICAgICAgICAgbXVsdGlwbGllciAqPSBub2RlLT5kb3VibGVWYWx1
ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgICAgICArK2xlYWRpbmdOdW1iZXJO
b2RlQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgICAgIG5ld0NoaWxkcmVuLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOwotICAgICAgICAKLSAgICAgICAg
Ly8gSWYgcm9vdCBjb250YWlucyBvbmx5IHR3byBjaGlsZHJlbiwgb25lIG9mIHdoaWNoIGlzIGEg
bnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9yIGRpbWVuc2lvbikgYW5kIHRoZSBvdGhlciBvZgot
ICAgICAgICAvLyB3aGljaCBpcyBhIFN1bSB3aG9zZSBjaGlsZHJlbiBhcmUgYWxsIG51bWVyaWMg
dmFsdWVzLCBtdWx0aXBseSBhbGwgb2YgdGhlIFN1beKAmXMgY2hpbGRyZW4gYnkgdGhlIG51bWJl
ciwgdGhlbgotICAgICAgICAvLyByZXR1cm4gdGhlIFN1bS4KLSAgICAgICAgLy8gVGhlIFN1bSdz
IGNoaWxkcmVuIHNpbXBsaWZpY2F0aW9uIHdpbGwgaGF2ZSBoYXBwZW5lZCBhbHJlYWR5LgotICAg
ICAgICBib29sIGRpZE11bHRpcGx5ID0gZmFsc2U7Ci0gICAgICAgIGlmIChsZWFkaW5nTnVtYmVy
Tm9kZUNvdW50ICYmIG1fY2hpbGRyZW4uc2l6ZSgpIC0gbGVhZGluZ051bWJlck5vZGVDb3VudCA9
PSAxKSB7Ci0gICAgICAgICAgICBhdXRvIG11bHRpcGxpY2FuZENhdGVnb3J5ID0gY2FsY1VuaXRD
YXRlZ29yeShwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obV9jaGlsZHJlbi5sYXN0KCkuZ2V0
KCkpKTsKLSAgICAgICAgICAgIGlmIChtdWx0aXBsaWNhbmRDYXRlZ29yeSAhPSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tl
ZEFwcGVuZChtX2NoaWxkcmVuLmxhc3QoKS5jb3B5UmVmKCkpOwotICAgICAgICAgICAgICAgIGRv
d25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuWzBdLmdldCgpKS5t
dWx0aXBseShtdWx0aXBsaWVyKTsKLSAgICAgICAgICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihtX2NoaWxk
cmVuLmxhc3QoKS5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hp
bGRyZW4ubGFzdCgpLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6OkFkZCkg
ewotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG11bHRpcGx5aW5nIHdpdGggYW5vdGhlciBv
cGVyYXRpb24gdGhhdCBpcyBhbiBhZGRpdGlvbiBhbmQgYWxsIHRoZSBhZGRlZCBjaGlsZHJlbgot
ICAgICAgICAgICAgICAgIC8vIGFyZSBwZXJjZW50YWdlcyBvciBkaW1lbnNpb25zLCB3ZSBzaG91
bGQgbXVsdGlwbHkgZWFjaCBjaGlsZCBhbmQgbWFrZSB0aGlzIGV4cHJlc3Npb24gYW4KLSAgICAg
ICAgICAgICAgICAvLyBhZGRpdGlvbi4KLSAgICAgICAgICAgICAgICBhdXRvIGFsbENoaWxkcmVu
QXJlUHJpbWl0aXZlVmFsdWVzID0gW10oY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiYgY2hpbGRyZW4pIC0+IGJvb2wKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewotICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZC5nZXQoKSkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAg
ICAgIH07Ci0KLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0Nh
bGNPcGVyYXRpb25Ob2RlPihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuY2hpbGRyZW4oKTsKLSAg
ICAgICAgICAgICAgICBpZiAoYWxsQ2hpbGRyZW5BcmVQcmltaXRpdmVWYWx1ZXMoY2hpbGRyZW4p
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKGNoaWxkLmNvcHlSZWYo
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlPihuZXdDaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLm11bHRpcGx5KG11bHRpcGxpZXIpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIG1fb3BlcmF0b3IgPSBD
YWxjT3BlcmF0b3I6OkFkZDsKLSAgICAgICAgICAgICAgICAgICAgZGlkTXVsdGlwbHkgPSB0cnVl
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAg
IGlmICghZGlkTXVsdGlwbHkpIHsKLSAgICAgICAgICAgIGlmIChsZWFkaW5nTnVtYmVyTm9kZUNv
dW50KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBtdWx0aXBsaWVyTm9kZSA9IENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG11bHRpcGxp
ZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgICAgICAgICAgbmV3Q2hpbGRy
ZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobXVsdGlwbGllck5vZGUpKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVhZGluZ051bWJlck5vZGVDb3Vu
dDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAgICAgICAgICAgbmV3Q2hpbGRy
ZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW5baV0uY29weVJlZigpKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fY2hpbGRyZW4g
PSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKLSAgICB9Ci0KLSAgICBpZiAoaXNNaW5Pck1heE5vZGUo
KSAmJiBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSkgewotICAgICAgICBhdXRvIGNvbWJpbmVkVW5p
dFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIGF1dG8gY2F0
ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oY29tYmluZWRVbml0VHlw
ZSk7Ci0gICAgICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikK
LSAgICAgICAgICAgIGNvbWJpbmVkVW5pdFR5cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1
bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOwotCi0gICAgICAgIGRvdWJsZSByZXNvbHZlZFZhbHVl
ID0gZG91YmxlVmFsdWUoY29tYmluZWRVbml0VHlwZSk7Ci0gICAgICAgIGF1dG8gbmV3Q2hpbGQg
PSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShyZXNvbHZlZFZhbHVlLCBjb21iaW5lZFVuaXRUeXBlKSk7Ci0KLSAgICAgICAgbV9jaGls
ZHJlbi5jbGVhcigpOwotICAgICAgICBtX2NoaWxkcmVuLmFwcGVuZChXVEZNb3ZlKG5ld0NoaWxk
KSk7Ci0gICAgfQotfQotCi0vLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00
LyNzaW1wbGlmeS1hLWNhbGN1bGF0aW9uLXRyZWUKLQotUmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+JiYgcm9vdE5vZGUpCi17Ci0gICAgcmV0dXJuIHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1vdmUo
cm9vdE5vZGUpLCAwKTsKLX0KLQotUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OnNpbXBsaWZ5UmVjdXJzaXZlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiYgcm9vdE5vZGUsIGludCBkZXB0aCkKLXsKLSAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlLmdldCgpKTsKLSAgICAgICAgCi0gICAgICAg
IGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAg
IGF1dG8gY2hpbGQgPSBjaGlsZHJlbltpXS5jb3B5UmVmKCk7Ci0gICAgICAgICAgICBhdXRvIG5l
d05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGggKyAxKTsKLSAg
ICAgICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9IGNoaWxkcmVuW2ldLnB0cigpKQotICAgICAg
ICAgICAgICAgIGNoaWxkcmVuW2ldID0gV1RGTW92ZShuZXdOb2RlKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBh
dXRvJiBuZWdhdGVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlLmdl
dCgpKTsKLSAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hpbGQgPSBuZWdhdGVO
b2RlLmNoaWxkKCk7Ci0gICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdU
Rk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSAm
bmVnYXRlTm9kZS5jaGlsZCgpKQotICAgICAgICAgICAgbmVnYXRlTm9kZS5zZXRDaGlsZChXVEZN
b3ZlKG5ld05vZGUpKTsKLSAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290
Tm9kZSkpIHsKLSAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9IGRvd25jYXN0PENTU0NhbGNJbnZl
cnROb2RlPihyb290Tm9kZS5nZXQoKSk7Ci0gICAgICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IGNoaWxkID0gaW52ZXJ0Tm9kZS5jaGlsZCgpOwotICAgICAgICBhdXRvIG5ld05vZGUgPSBz
aW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGggKyAxKTsKLSAgICAgICAgaWYg
KG5ld05vZGUucHRyKCkgIT0gJmludmVydE5vZGUuY2hpbGQoKSkKLSAgICAgICAgICAgIGludmVy
dE5vZGUuc2V0Q2hpbGQoV1RGTW92ZShuZXdOb2RlKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHNp
bXBsaWZ5Tm9kZShXVEZNb3ZlKHJvb3ROb2RlKSwgZGVwdGgpOwotfQotCi1SZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnlOb2RlKFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUsIGludCBkZXB0aCkKLXsKLSAgICBpZiAoaXM8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIC8vIElmIHJv
b3QgaXMgYSBwZXJjZW50YWdlIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBhZ2FpbnN0IGFub3RoZXIg
dmFsdWUsIGFuZCB0aGVyZSBpcyBlbm91Z2ggaW5mb3JtYXRpb24KLSAgICAgICAgLy8gYXZhaWxh
YmxlIHRvIHJlc29sdmUgaXQsIGRvIHNvLCBhbmQgZXhwcmVzcyB0aGUgcmVzdWx0aW5nIG51bWVy
aWMgdmFsdWUgaW4gdGhlIGFwcHJvcHJpYXRlIGNhbm9uaWNhbAotICAgICAgICAvLyB1bml0LiBS
ZXR1cm4gdGhlIHZhbHVlLgotCi0gICAgICAgIC8vIElmIHJvb3QgaXMgYSBkaW1lbnNpb24gdGhh
dCBpcyBub3QgZXhwcmVzc2VkIGluIGl0cyBjYW5vbmljYWwgdW5pdCwgYW5kIHRoZXJlIGlzIGVu
b3VnaCBpbmZvcm1hdGlvbgotICAgICAgICAvLyBhdmFpbGFibGUgdG8gY29udmVydCBpdCB0byB0
aGUgY2Fub25pY2FsIHVuaXQsIGRvIHNvLCBhbmQgcmV0dXJuIHRoZSB2YWx1ZS4KLSAgICAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICBwcmltaXRpdmVWYWx1ZU5vZGUuY2Fub25p
Y2FsaXplVW5pdCgpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQot
Ci0gICAgLy8gSWYgcm9vdCBpcyBhbiBvcGVyYXRvciBub2RlIHRoYXTigJlzIG5vdCBvbmUgb2Yg
dGhlIGNhbGMtb3BlcmF0b3Igbm9kZXMsIGFuZCBhbGwgb2YgaXRzIGNoaWxkcmVuIGFyZSBudW1l
cmljIHZhbHVlcwotICAgIC8vIHdpdGggZW5vdWdoIGluZm9ybWF0aW9uIHRvIGNvbXB1dGVkIHRo
ZSBvcGVyYXRpb24gcm9vdCByZXByZXNlbnRzLCByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5n
IHJvb3TigJlzIG9wZXJhdGlvbgotICAgIC8vIHVzaW5nIGl0cyBjaGlsZHJlbiwgZXhwcmVzc2Vk
IGluIHRoZSByZXN1bHTigJlzIGNhbm9uaWNhbCB1bml0LgotICAgIGlmIChpczxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNhbGNPcGVyYXRpb25Ob2Rl
ID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlLmdldCgpKTsKLSAgICAg
ICAgLy8gRG9uJ3Qgc2ltcGxpZnkgYXQgdGhlIHJvb3QsIG90aGVyd2lzZSB3ZSBsb3NlIHRyYWNr
IG9mIHRoZSBvcGVyYXRpb24gZm9yIHNlcmlhbGl6YXRpb24uCi0gICAgICAgIGlmIChjYWxjT3Bl
cmF0aW9uTm9kZS5jaGlsZHJlbigpLnNpemUoKSA9PSAxICYmIGRlcHRoKQotICAgICAgICAgICAg
cmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKVswXSk7Ci0gICAgICAg
IAotICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9kZSgpKSB7Ci0gICAg
ICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5ob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNP
cGVyYXRvcjo6QWRkKTsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJpbmVDaGls
ZHJlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzQ2Fs
Y1Byb2R1Y3ROb2RlKCkpIHsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmhvaXN0Q2hp
bGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7Ci0gICAgICAgICAgICBj
YWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4oKTsKLSAgICAgICAgfQotICAgICAgICAK
LSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzTWluT3JNYXhOb2RlKCkpCi0gICAgICAg
ICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4oKTsKLQotICAgICAgICAvLyBJ
ZiBvbmx5IG9uZSBjaGlsZCByZW1haW5zLCByZXR1cm4gdGhlIGNoaWxkIChleGNlcHQgYXQgdGhl
IHJvb3QpLgotICAgICAgICBhdXRvIHNob3VsZENvbWJpbmVQYXJlbnRXaXRoT25seUNoaWxkID0g
W10oY29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUmIHBhcmVudCwgaW50IGRlcHRoKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKCkuc2l6ZSgpICE9IDEpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBBbHdheXMgc2ltcGxp
ZnkgYmVsb3cgdGhlIHJvb3QuCi0gICAgICAgICAgICBpZiAoZGVwdGgpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIC8vIEF0IHRoZSByb290LCBwcmVzZXJ2ZSB0
aGUgcm9vdCBmdW5jdGlvbiBieSBvbmx5IG1lcmdpbmcgbm9kZXMgd2l0aCB0aGUgc2FtZSBmdW5j
dGlvbi4KLSAgICAgICAgICAgIGF1dG8mIGNoaWxkID0gcGFyZW50LmNoaWxkcmVuKCkuZmlyc3Qo
KTsKLSAgICAgICAgICAgIGlmICghaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIGF1dG8gcGFyZW50RnVu
Y3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihwYXJlbnQuY2FsY09wZXJhdG9yKCkpOwotICAg
ICAgICAgICAgYXV0byBjaGlsZEZ1bmN0aW9uID0gZnVuY3Rpb25Gcm9tT3BlcmF0b3IoZG93bmNh
c3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2hpbGRGdW5jdGlvbiA9PSBwYXJlbnRGdW5jdGlvbjsKLSAgICAg
ICAgfTsKLQotICAgICAgICBpZiAoc2hvdWxkQ29tYmluZVBhcmVudFdpdGhPbmx5Q2hpbGQoY2Fs
Y09wZXJhdGlvbk5vZGUsIGRlcHRoKSkKLSAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNhbGNP
cGVyYXRpb25Ob2RlLmNoaWxkcmVuKCkuZmlyc3QoKSk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1v
dmUocm9vdE5vZGUpOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4ocm9v
dE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9IGRvd25jYXN0PENTU0NhbGNOZWdh
dGVOb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKLSAgICAgICAgLy8gSWYgcm9vdOKAmXMg
Y2hpbGQgaXMgYSBudW1lcmljIHZhbHVlLCByZXR1cm4gYW4gZXF1aXZhbGVudCBudW1lcmljIHZh
bHVlLCBidXQgd2l0aCB0aGUgdmFsdWUgbmVnYXRlZCAoMCAtIHZhbHVlKS4KLSAgICAgICAgaWYg
KGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkgJiYgZG93bmNhc3Q8Q1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pc051bWVyaWNWYWx1ZSgpKSB7Ci0g
ICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUp
Lm5lZ2F0ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTsKLSAgICAgICAgfQotICAg
ICAgICAKLSAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYSBOZWdhdGUgbm9kZSwgcmV0
dXJuIHRoZSBjaGlsZOKAmXMgY2hpbGQuCi0gICAgICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9k
ZT4oY2hpbGROb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYWxjTmVnYXRl
Tm9kZT4oY2hpbGROb2RlKS5jaGlsZCgpOwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIFdURk1v
dmUocm9vdE5vZGUpOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4ocm9v
dE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9IGRvd25jYXN0PENTU0NhbGNJbnZl
cnROb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKLSAgICAgICAgLy8gSWYgcm9vdOKAmXMg
Y2hpbGQgaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRhZ2Ugb3IgZGltZW5zaW9uKSByZXR1cm4g
dGhlIHJlY2lwcm9jYWwgb2YgdGhlIGNoaWxk4oCZcyB2YWx1ZS4KLSAgICAgICAgaWYgKGlzPENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pc051bWVyaWNWYWx1ZSgpKSB7Ci0gICAgICAg
ICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpLmludmVy
dCgpOwotICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTsKLSAgICAgICAgfQotCi0gICAgICAg
IC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGFuIEludmVydCBub2RlLCByZXR1cm4gdGhlIGNoaWxk
4oCZcyBjaGlsZC4KLSAgICAgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihjaGlsZE5vZGUp
KQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihjaGlsZE5v
ZGUpLmNoaWxkKCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOwotICAgIH0K
LQotICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKLX0KLQotQ1NTVW5pdFR5cGUgQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OnByaW1pdGl2ZVR5cGUoKSBjb25zdAotewotICAgIGF1dG8gdW5pdENh
dGVnb3J5ID0gY2F0ZWdvcnkoKTsKLSAgICBzd2l0Y2ggKHVuaXRDYXRlZ29yeSkgewotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgotI2lmIEFTU0VSVF9FTkFCTEVECi0gICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgQVNTRVJUKGNo
aWxkLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcik7Ci0jZW5kaWYK
LSAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOwotCi0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OiB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Ci0KLSAg
ICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpIHsKLSAgICAgICAgICAgIGlmIChtX2No
aWxkcmVuWzBdLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlblsxXS0+cHJpbWl0aXZlVHlwZSgpOwotICAg
ICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMV0tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuWzBdLT5wcmlt
aXRpdmVUeXBlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ1NTVW5pdFR5cGUgZmlyc3RUeXBlID0g
bV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogbV9jaGlsZHJlbikgewotICAgICAgICAgICAgaWYgKGZpcnN0VHlwZSAhPSBjaGlsZC0+cHJp
bWl0aXZlVHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV047Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZpcnN0VHlwZTsKLSAgICB9Ci0KLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OkFuZ2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICAgICAgaWYgKG1fY2hp
bGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlbi5maXJzdCgp
LT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIHJldHVybiBjYW5vbmljYWxVbml0VHlwZUZvckNh
bGN1bGF0aW9uQ2F0ZWdvcnkodW5pdENhdGVnb3J5KTsKLQotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudExlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAgICAg
ICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLSAgICB9Ci0gICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLX0KLQot
c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNv
bnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0gICAgbm9kZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X2NoaWxkcmVuLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikg
ewotICAgICAgICBhdXRvIG5vZGUgPSBjaGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVy
c2lvbkRhdGEpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUobm9kZSkpOwotICAgIH0K
LQotICAgIC8vIFJldmVyc2UgdGhlIG9wZXJhdGlvbiB3ZSBkaWQgd2hlbiBjcmVhdGluZyB0aGlz
IG5vZGUsIHJlY292ZXJpbmcgYSBzdWl0YWJsZSBkZXN0aW5hdGlvbiBjYXRlZ29yeSBmb3Igb3Ro
ZXJ3aXNlLWFtYmlndW91cyBtaW4vbWF4L2NsYW1wIG5vZGVzLgotICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGNhdGVnb3J5IGlzIHJlYWxseSBvbmx5IGdvb2QgZW5vdWdoIGZvciB0aGF0IHB1cnBvc2Ug
YW5kIGlzIG5vdCBhY2N1cmF0ZSBmb3Igb3RoZXIgbm9kZSB0eXBlczsgd2UgY291bGQgdXNlIGEg
Ym9vbGVhbiBpbnN0ZWFkLgotICAgIGF1dG8gZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnRMZW5ndGgpCi0gICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0gICAgZWxzZSBpZiAoY2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyKQotICAgICAgICBkZXN0aW5hdGlvbkNhdGVn
b3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOwotCi0gICAgcmV0dXJuIG1ha2VVbmlx
dWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUobm9kZXMpLCBtX29wZXJhdG9yLCBk
ZXN0aW5hdGlvbkNhdGVnb3J5KTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpk
b3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QKLXsKLSAgICBib29sIGFsbG93
TnVtYmVycyA9IGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk7Ci0KLSAg
ICByZXR1cm4gZXZhbHVhdGUobV9jaGlsZHJlbi5tYXAoWyZdIChhdXRvJiBjaGlsZCkgewotICAg
ICAgICBDU1NVbml0VHlwZSBjaGlsZFR5cGUgPSB1bml0VHlwZTsKLSAgICAgICAgaWYgKGFsbG93
TnVtYmVycyAmJiB1bml0VHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUiAmJiBjaGlsZC0+
cHJpbWl0aXZlVHlwZSgpID09IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAg
Y2hpbGRUeXBlID0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7Ci0gICAgICAgIHJldHVybiBjaGls
ZC0+ZG91YmxlVmFsdWUoY2hpbGRUeXBlKTsKLSAgICB9KSk7Ci19Ci0KLWRvdWJsZSBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHJldHVybiBldmFsdWF0ZShtX2No
aWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7Ci0gICAgICAgIHJldHVybiBjaGlsZC0+Y29t
cHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKLSAgICB9KSk7Ci19Ci0KLXZvaWQgQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGNo
aWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlv
bmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1By
b3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hp
bGRyZW4pCi0gICAgICAgIGNoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXModmFsdWVzKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRD
U1NUZXh0KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgU3RyaW5nQnVpbGRlciYg
YnVpbGRlcikKLXsKLSAgICBhdXRvIHNob3VsZE91dHB1dEVuY2xvc2luZ0NhbGMgPSBbXShjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJvb3ROb2RlKSB7Ci0gICAgICAgIGlmIChpczxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgICAgICBhdXRvJiBvcGVyYXRp
b25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKTsKLSAgICAg
ICAgICAgIHJldHVybiBvcGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5vZGUoKSB8fCBvcGVyYXRpb25O
b2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuICFpczxD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZSk7Ci0gICAgfTsKLSAgICAKLSAgICBi
b29sIG91dHB1dENhbGMgPSBzaG91bGRPdXRwdXRFbmNsb3NpbmdDYWxjKG5vZGUpOwotICAgIGlm
IChvdXRwdXRDYWxjKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgiY2FsYygiKTsKLQotICAgIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShub2RlLCBidWlsZGVyLCBHcm91cGluZ1BhcmVuczo6T21pdCk7
Ci0KLSAgICBpZiAob3V0cHV0Q2FsYykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKLX0K
LQotc3RhdGljIGNvbnN0IGNoYXIqIGZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3IoQ2FsY09wZXJh
dG9yIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRk
OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6TXVsdGlwbHk6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAiIjsKLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6TWluOiByZXR1cm4gIm1pbigiOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6IHJl
dHVybiAibWF4KCI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiByZXR1cm4gImNsYW1w
KCI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAiIjsKLX0KLQotLy8gPGh0dHBzOi8vZHJhZnRz
LmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NlcmlhbGl6ZS1hLWNhbGN1bGF0aW9uLXRyZWU+Ci12
b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHRSZWN1cnNpdmUoY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyLCBHcm91cGlu
Z1BhcmVucyBwYXJlbnMpCi17Ci0gICAgLy8gSWYgcm9vdCBpcyBhIG51bWVyaWMgdmFsdWUsIG9y
IGEgbm9uLW1hdGggZnVuY3Rpb24sIHNlcmlhbGl6ZSByb290IHBlciB0aGUgbm9ybWFsIHJ1bGVz
IGZvciBpdCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgaWYgKGlzPENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU+KG5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIHZhbHVlTm9kZSA9IGRvd25jYXN0
PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpOwotICAgICAgICBidWlsZGVyLmFwcGVu
ZCh2YWx1ZU5vZGUuY3VzdG9tQ1NTVGV4dCgpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obm9kZSkpIHsKLSAgICAgICAgYXV0byYg
b3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihub2RlKTsKLQot
ICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkpIHsKLSAgICAgICAgICAg
IC8vIElmIHJvb3QgaXMgYSBTdW0gbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNv
bnRhaW5pbmcgIigiLgotICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6
SW5jbHVkZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKCcpOwotCi0gICAgICAg
ICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBjaGlsZHJlbi4KLSAgICAgICAg
ICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwotICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAvLyBTZXJpYWxpemUgcm9v
dOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4KLSAgICAgICAgICAgIGJ1aWxk
Q1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyKTsKLQotICAgICAgICAg
ICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhlIGZpcnN0OgotICAgICAgICAg
ICAgLy8gSWYgY2hpbGQgaXMgYSBOZWdhdGUgbm9kZSwgYXBwZW5kICIgLSAiIHRvIHMsIHRoZW4g
c2VyaWFsaXplIHRoZSBOZWdhdGXigJlzIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBz
LgotICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBuZWdhdGl2ZSBudW1lcmljIHZhbHVlLCBh
cHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIG5lZ2F0aW9uIG9mIGNoaWxkIGFz
IG5vcm1hbCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIC8vIE90aGVy
d2lzZSwgYXBwZW5kICIgKyAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIGNoaWxkIGFuZCBhcHBlbmQg
dGhlIHJlc3VsdCB0byBzLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNo
aWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBjaGls
ZHJlbltpXTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KGNoaWxk
KSkgewotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC0gIik7Ci0gICAgICAg
ICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShkb3duY2FzdDxDU1NDYWxjTmVnYXRl
Tm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkKCksIGJ1aWxkZXIpOwotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkKSkgewotICAg
ICAgICAgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZU5vZGUgPSBkb3duY2FzdDxDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZU5vZGUuaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC0gIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAv
LyBTZXJpYWxpemUgdGhlIG5lZ2F0aW9uIG9mIGNoaWxkLgotICAgICAgICAgICAgICAgICAgICAg
ICAgYXV0byB1bml0VHlwZSA9IHByaW1pdGl2ZVZhbHVlTm9kZS52YWx1ZSgpLnByaW1pdGl2ZVR5
cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKDAgLSBwcmltaXRp
dmVWYWx1ZU5vZGUudmFsdWUoKS5kb3VibGVWYWx1ZSgpLCBDU1NQcmltaXRpdmVWYWx1ZTo6dW5p
dFR5cGVTdHJpbmcodW5pdFR5cGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgKyAiKTsKLSAgICAgICAgICAg
ICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGQsIGJ1aWxkZXIpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQot
ICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7Ci0gICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvcGVyYXRpb25Ob2RlLmlzQ2FsY1By
b2R1Y3ROb2RlKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHJvb3QgaXMgYSBQcm9kdWN0IG5vZGUs
IGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWluaW5nICIoIi4KLSAgICAgICAgICAg
IGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoJygnKTsKLQotICAgICAgICAgICAgLy8gU2ltcGxpZmljYXRpb24gYWxy
ZWFkeSBzb3J0ZWQgY2hpbGRyZW4uCi0gICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJh
dGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkp
OwotICAgICAgICAgICAgLy8gU2VyaWFsaXplIHJvb3TigJlzIGZpcnN0IGNoaWxkLCBhbmQgYXBw
ZW5kIGl0IHRvIHMuCi0gICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW4u
Zmlyc3QoKSwgYnVpbGRlcik7Ci0KLSAgICAgICAgICAgIC8vIEZvciBlYWNoIGNoaWxkIG9mIHJv
b3QgYmV5b25kIHRoZSBmaXJzdDoKLSAgICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGFuIEludmVy
dCBub2RlLCBhcHBlbmQgIiAvICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIEludmVydOKAmXMg
Y2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAgICAgICAgICAvLyBPdGhlcndp
c2UsIGFwcGVuZCAiICogIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSBjaGlsZCBhbmQgYXBwZW5kIHRo
ZSByZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjaGls
ZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkID0gY2hpbGRy
ZW5baV07Ci0gICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihjaGlsZCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAvICIpOwotICAgICAgICAg
ICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5v
ZGU+KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsKLSAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiAqICIpOwotICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGls
ZCwgYnVpbGRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChwYXJlbnMgPT0g
R3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyknKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIElmIHJv
b3QgaXMgYW55dGhpbmcgYnV0IGEgU3VtLCBOZWdhdGUsIFByb2R1Y3QsIG9yIEludmVydCBub2Rl
LCBzZXJpYWxpemUgYSBtYXRoIGZ1bmN0aW9uIGZvciB0aGUKLSAgICAgICAgLy8gZnVuY3Rpb24g
Y29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSB0eXBlLCB0cmVhdGluZyB0aGUgbm9kZeKAmXMgY2hp
bGRyZW4gYXMgdGhlIGZ1bmN0aW9u4oCZcwotICAgICAgICAvLyBjb21tYS1zZXBhcmF0ZWQgY2Fs
Y3VsYXRpb24gYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKGZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3Iob3BlcmF0aW9uTm9kZS5jYWxjT3Bl
cmF0b3IoKSkpOwotCi0gICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGls
ZHJlbigpOwotICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgYnVpbGRD
U1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0KCksIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5z
OjpPbWl0KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIsICIpOwotICAgICAgICAg
ICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuW2ldLCBidWlsZGVyLCBHcm91cGluZ1Bh
cmVuczo6T21pdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCcpJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGlzPENTU0NhbGNO
ZWdhdGVOb2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiBuZWdhdGVOb2RlID0gZG93bmNhc3Q8
Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpOwotICAgICAgICAvLyBJZiByb290IGlzIGEgTmVnYXRl
IG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWluaW5nICIoLTEgKiAiLgot
ICAgICAgICBidWlsZGVyLmFwcGVuZCgiLTEgKiIpOwotICAgICAgICBidWlsZENTU1RleHRSZWN1
cnNpdmUobmVnYXRlTm9kZS5jaGlsZCgpLCBidWlsZGVyKTsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KLSAgICAKLSAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KG5vZGUpKSB7Ci0gICAgICAg
IGF1dG8mIGludmVydE5vZGUgPSBkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4obm9kZSk7Ci0g
ICAgICAgIC8vIElmIHJvb3QgaXMgYW4gSW52ZXJ0IG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGlu
aXRpYWxseSBjb250YWluaW5nICIoMSAvICIuCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIxIC8g
Iik7Ci0gICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShpbnZlcnROb2RlLmNoaWxkKCksIGJ1
aWxkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12b2lkIENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICJjYWxjIG9w
ZXJhdGlvbiAiIDw8IG1fb3BlcmF0b3IgPDwgIiAoY2F0ZWdvcnk6ICIgPDwgY2F0ZWdvcnkoKSA8
PCAiLCB0eXBlICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsKLQotICAgIFRleHRTdHJlYW06
Okdyb3VwU2NvcGUgc2NvcGUodHMpOwotICAgIHRzIDw8IG1fY2hpbGRyZW4uc2l6ZSgpIDw8ICIg
Y2hpbGRyZW4iOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICB0
cy5kdW1wUHJvcGVydHkoIm5vZGUiLCBjaGlsZCk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGV4cCkgY29uc3QKLXsK
LSAgICBpZiAodHlwZSgpICE9IGV4cC50eXBlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBvdGhlciA9IHN0YXRpY19jYXN0PGNvbnN0
IENTU0NhbGNPcGVyYXRpb25Ob2RlJj4oZXhwKTsKLQotICAgIGlmIChtX2NoaWxkcmVuLnNpemUo
KSAhPSBvdGhlci5tX2NoaWxkcmVuLnNpemUoKSB8fCBtX29wZXJhdG9yICE9IG90aGVyLm1fb3Bl
cmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoIWNvbXBhcmVDU1NWYWx1
ZShtX2NoaWxkcmVuW2ldLCBvdGhlci5tX2NoaWxkcmVuW2ldKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3AsIGNvbnN0IFZlY3Rv
cjxkb3VibGU+JiBjaGlsZHJlbikKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkFkZDogewotICAgICAgICBkb3VibGUgc3VtID0gMDsKLSAgICAgICAgZm9yIChh
dXRvJiBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAgICAgc3VtICs9IGNoaWxkOwotICAgICAg
ICByZXR1cm4gc3VtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0g
ICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIHJldHVybiBjaGls
ZHJlblswXSAtIGNoaWxkcmVuWzFdOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTog
ewotICAgICAgICBkb3VibGUgcHJvZHVjdCA9IDE7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQg
OiBjaGlsZHJlbikKLSAgICAgICAgICAgIHByb2R1Y3QgKj0gY2hpbGQ7Ci0gICAgICAgIHJldHVy
biBwcm9kdWN0OwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAg
ICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwgY2hpbGRyZW4uc2l6ZSgpID09IDIpOwot
ICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgcmV0dXJuIGNo
aWxkcmVuWzBdIC8gY2hpbGRyZW5bMV07Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogewot
ICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGRvdWJsZSBtaW5p
bXVtID0gY2hpbGRyZW5bMF07Ci0gICAgICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKQot
ICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmltdW0sIGNoaWxkKTsKLSAgICAgICAg
cmV0dXJuIG1pbmltdW07Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6IHsKLSAg
ICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51
bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICBkb3VibGUgbWF4aW11
bSA9IGNoaWxkcmVuWzBdOwotICAgICAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJlbikKLSAg
ICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBjaGlsZCk7Ci0gICAgICAgIHJl
dHVybiBtYXhpbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHsKLSAg
ICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSAhPSAzKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGRvdWJsZSBtaW4g
PSBjaGlsZHJlblswXTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0gY2hpbGRyZW5bMV07Ci0gICAg
ICAgIGRvdWJsZSBtYXggPSBjaGlsZHJlblsyXTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KG1p
biwgc3RkOjptaW4odmFsdWUsIG1heCkpOwotICAgIH0KLSAgICB9Ci0gICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotY2xhc3MgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotICAgICAgICA6
IG1fZGVzdGluYXRpb25DYXRlZ29yeShkZXN0aW5hdGlvbkNhdGVnb3J5KQotICAgIHsgfQotCi0g
ICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcGFyc2VDYWxjKENTU1BhcnNlclRva2Vu
UmFuZ2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24pOwotICAgIAotcHJpdmF0ZToKLSAgICBjaGFyIG9w
ZXJhdG9yVmFsdWUoY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuKQotICAgIHsKLSAgICAgICAg
aWYgKHRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbikKLSAgICAgICAgICAgIHJldHVybiB0
b2tlbi5kZWxpbWl0ZXIoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYm9vbCBw
YXJzZVZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYpOwotICAgIGJvb2wgcGFyc2VWYWx1ZVRlcm0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGlu
dCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKLSAgICBib29sIHBhcnNl
Q2FsY0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlELCBpbnQgZGVwdGgs
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0gICAgYm9vbCBwYXJzZUNhbGNTdW0o
Q1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mKTsKLSAgICBib29sIHBhcnNlQ2FsY1Byb2R1Y3QoQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKLSAgICBib29sIHBh
cnNlQ2FsY1ZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0KLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1fZGVzdGlu
YXRpb25DYXRlZ29yeTsKLX07Ci0KLS8vIDxodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZh
bHVlcy00LyNjYWxjLXN5bnRheD46Ci0vLyA8Y2FsYygpPiAgPSBjYWxjKCA8Y2FsYy1zdW0+ICkK
LS8vIDxtaW4oKT4gICA9IG1pbiggPGNhbGMtc3VtPiMgKQotLy8gPG1heCgpPiAgID0gbWF4KCA8
Y2FsYy1zdW0+IyApCi0vLyA8Y2xhbXAoKT4gPSBjbGFtcCggPGNhbGMtc3VtPiN7M30gKQotLy8g
PHNpbigpPiAgID0gc2luKCA8Y2FsYy1zdW0+ICkKLS8vIDxjb3MoKT4gICA9IGNvcyggPGNhbGMt
c3VtPiApCi0vLyA8dGFuKCk+ICAgPSB0YW4oIDxjYWxjLXN1bT4gKQotLy8gPGFzaW4oKT4gID0g
YXNpbiggPGNhbGMtc3VtPiApCi0vLyA8YWNvcygpPiAgPSBhY29zKCA8Y2FsYy1zdW0+ICkKLS8v
IDxhdGFuKCk+ICA9IGF0YW4oIDxjYWxjLXN1bT4gKQotLy8gPGF0YW4yKCk+ID0gYXRhbjIoIDxj
YWxjLXN1bT4sIDxjYWxjLXN1bT4gKQotLy8gPHBvdygpPiAgID0gcG93KCA8Y2FsYy1zdW0+LCA8
Y2FsYy1zdW0+ICkKLS8vIDxzcXJ0KCk+ICA9IHNxcnQoIDxjYWxjLXN1bT4gKQotLy8gPGh5cG90
KCk+ID0gaHlwb3QoIDxjYWxjLXN1bT4jICkKLS8vIDxjYWxjLXN1bT4gPSA8Y2FsYy1wcm9kdWN0
PiBbIFsgJysnIHwgJy0nIF0gPGNhbGMtcHJvZHVjdD4gXSoKLS8vIDxjYWxjLXByb2R1Y3Q+ID0g
PGNhbGMtdmFsdWU+IFsgWyAnKicgfCAnLycgXSA8Y2FsYy12YWx1ZT4gXSoKLS8vIDxjYWxjLXZh
bHVlPiA9IDxudW1iZXI+IHwgPGRpbWVuc2lvbj4gfCA8cGVyY2VudGFnZT4gfCAoIDxjYWxjLXN1
bT4gKQotUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
UGFyc2VyOjpwYXJzZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tlbnMsIENTU1ZhbHVlSUQg
ZnVuY3Rpb24pCi17Ci0gICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0KLSAgICBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByZXN1bHQ7Ci0gICAgYm9vbCBvayA9IHBhcnNlQ2Fs
Y0Z1bmN0aW9uKHRva2VucywgZnVuY3Rpb24sIDAsIHJlc3VsdCk7Ci0gICAgaWYgKCFvayB8fCAh
dG9rZW5zLmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgaWYgKCFyZXN1
bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTE9HX1dJVEhfU1RSRUFNKENhbGMs
IHN0cmVhbSA8PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgIiA8PCBw
cmV0dHlQcmludE5vZGUoKnJlc3VsdCkpOwotCi0gICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OnNpbXBsaWZ5KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgIExPR19XSVRI
X1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFy
c2VDYWxjIC0gYWZ0ZXIgc2ltcGxpZmljYXRpb24gIiA8PCBwcmV0dHlQcmludE5vZGUoKnJlc3Vs
dCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZW51bSBQYXJzZVN0YXRlIHsKLSAgICBP
SywKLSAgICBUb29EZWVwLAotICAgIE5vTW9yZVRva2VucwotfTsKLQotc3RhdGljIFBhcnNlU3Rh
dGUgY2hlY2tEZXB0aEFuZEluZGV4KGludCBkZXB0aCwgQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tl
bnMpCi17Ci0gICAgaWYgKHRva2Vucy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gTm9Nb3JlVG9r
ZW5zOwotICAgIGlmIChkZXB0aCA+IG1heEV4cHJlc3Npb25EZXB0aCkgewotICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJEZXB0aCAiIDw8IGRlcHRoIDw8ICIgZXhjZWVk
ZWQgbWF4RXhwcmVzc2lvbkRlcHRoICIgPDwgbWF4RXhwcmVzc2lvbkRlcHRoKTsKLSAgICAgICAg
cmV0dXJuIFRvb0RlZXA7Ci0gICAgfQotICAgIHJldHVybiBPSzsKLX0KLQotYm9vbCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFu
Z2UmIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlvbklELCBpbnQgZGVwdGgsIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRl
eChkZXB0aCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8g
ImFyZ3VtZW50cyIgcmVmZXJzIHRvIHRoaW5ncyBiZXR3ZWVuIGNvbW1hcy4KLSAgICB1bnNpZ25l
ZCBtaW5Bcmd1bWVudENvdW50ID0gMTsKLSAgICBPcHRpb25hbDx1bnNpZ25lZD4gbWF4QXJndW1l
bnRDb3VudDsKLQotICAgIHN3aXRjaCAoZnVuY3Rpb25JRCkgewotICAgIGNhc2UgQ1NTVmFsdWVN
aW46Ci0gICAgY2FzZSBDU1NWYWx1ZU1heDoKLSAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IHN0
ZDo6bnVsbG9wdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgotICAg
ICAgICBtaW5Bcmd1bWVudENvdW50ID0gMzsKLSAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IDM7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgotICAgICAgICBtYXhBcmd1
bWVudENvdW50ID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgLy8gVE9ETzogY2xhbXAsIHNpbiwg
Y29zLCB0YW4sIGFzaW4sIGFjb3MsIGF0YW4sIGF0YW4yLCBwb3csIHNxcnQsIGh5cG90LgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAgICBib29sIHJlcXVpcmVDb21tYSA9IGZhbHNl
OwotICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQgPSAwOwotICAgIHdoaWxlICghdG9rZW5zLmF0
RW5kKCkpIHsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIGlm
IChyZXF1aXJlQ29tbWEpIHsKLSAgICAgICAgICAgIGlmICh0b2tlbnMuY29uc3VtZSgpLnR5cGUo
KSAhPSBDb21tYVRva2VuKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
ICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgICAgICB9Ci0KLSAgICAgICAgUmVm
UHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbm9kZTsKLSAgICAgICAgaWYgKCFwYXJzZUNhbGNT
dW0odG9rZW5zLCBkZXB0aCwgbm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgKythcmd1bWVudENvdW50OwotICAgICAgICBpZiAobWF4QXJndW1lbnRDb3VudCAmJiBh
cmd1bWVudENvdW50ID4gbWF4QXJndW1lbnRDb3VudC52YWx1ZSgpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIG5vZGVzLmFwcGVuZChub2RlLnJlbGVhc2VOb25OdWxsKCkp
OwotICAgICAgICByZXF1aXJlQ29tbWEgPSB0cnVlOwotICAgIH0KLSAgICAKLSAgICBpZiAoYXJn
dW1lbnRDb3VudCA8IG1pbkFyZ3VtZW50Q291bnQpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgIHN3aXRjaCAoZnVuY3Rpb25JRCkgewotICAgIGNhc2UgQ1NTVmFsdWVNaW46Ci0gICAgICAg
IHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2Fs
Y09wZXJhdG9yOjpNaW4sIFdURk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTWF4OgotICAgICAgICByZXN1bHQgPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6
TWF4LCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgotICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6Q2xhbXAsIFdU
Rk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoKLSAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKLSAgICAg
ICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKG5vZGVz
KSk7Ci0gICAgICAgIGJyZWFrOwotICAgIC8vIFRPRE86IGNsYW1wLCBzaW4sIGNvcywgdGFuLCBh
c2luLCBhY29zLCBhdGFuLCBhdGFuMiwgcG93LCBzcXJ0LCBoeXBvdAotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAhIXJlc3VsdDsKLX0KLQotYm9vbCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYgdG9rZW5zLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQotewotICAg
IENTU1BhcnNlclRva2VuIHRva2VuID0gdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7Ci0gICAgaWYgKCEodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8IHRva2VuLnR5cGUo
KSA9PSBQZXJjZW50YWdlVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGF1dG8gdHlwZSA9IHRva2VuLnVuaXRU
eXBlKCk7Ci0gICAgaWYgKGNhbGNVbml0Q2F0ZWdvcnkodHlwZSkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICByZXN1bHQgPSBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgdHlwZSkpOwotICAgIAotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjVmFsdWUoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwg
dG9rZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmaW5kRnVu
Y3Rpb25JZCA9IFsmXShDU1NWYWx1ZUlEJiBmdW5jdGlvbklkKSB7Ci0gICAgICAgIGlmICh0b2tl
bnMucGVlaygpLnR5cGUoKSA9PSBMZWZ0UGFyZW50aGVzaXNUb2tlbikgewotICAgICAgICAgICAg
ZnVuY3Rpb25JZCA9IENTU1ZhbHVlQ2FsYzsKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb25JZCA9IHRva2Vucy5wZWVrKCkuZnVuY3Rpb25JZCgp
OwotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihmdW5jdGlvbklk
KTsKLSAgICB9OwotCi0gICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklkOwotICAgIGlmIChmaW5kRnVu
Y3Rpb25JZChmdW5jdGlvbklkKSkgewotICAgICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGlubmVy
UmFuZ2UgPSB0b2tlbnMuY29uc3VtZUJsb2NrKCk7Ci0gICAgICAgIHRva2Vucy5jb25zdW1lV2hp
dGVzcGFjZSgpOwotICAgICAgICBpbm5lclJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAg
ICAgIHJldHVybiBwYXJzZUNhbGNGdW5jdGlvbihpbm5lclJhbmdlLCBmdW5jdGlvbklkLCBkZXB0
aCArIDEsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBhcnNlVmFsdWUodG9rZW5zLCBy
ZXN1bHQpOwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxj
UHJvZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFuZElu
ZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVlOwotICAgIGlmICghcGFyc2VD
YWxjVmFsdWUodG9rZW5zLCBkZXB0aCwgZmlyc3RWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAg
ICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7Ci0gICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0
ZXIgPSBvcGVyYXRvclZhbHVlKHRva2Vucy5wZWVrKCkpOwotICAgICAgICBpZiAob3BlcmF0b3JD
aGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpNdWx0aXBseSkgJiYg
b3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpEaXZp
ZGUpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRva2Vucy5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwotICAgICAgICAKLSAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4gbmV4dFZhbHVlOwotICAgICAgICBpZiAoIXBhcnNlQ2FsY1ZhbHVlKHRva2VucywgZGVw
dGgsIG5leHRWYWx1ZSkgfHwgIW5leHRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2Fs
Y09wZXJhdG9yOjpEaXZpZGUpKQotICAgICAgICAgICAgbmV4dFZhbHVlID0gQ1NTQ2FsY0ludmVy
dE5vZGU6OmNyZWF0ZShuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAgICAgaWYg
KGZpcnN0VmFsdWUpCi0gICAgICAgICAgICBub2Rlcy5hcHBlbmQoZmlyc3RWYWx1ZS5yZWxlYXNl
Tm9uTnVsbCgpKTsKLQotICAgICAgICBub2Rlcy5hcHBlbmQobmV4dFZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIH0KLQotICAgIGlmIChub2Rlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVz
dWx0ID0gV1RGTW92ZShmaXJzdFZhbHVlKTsKLSAgICAgICAgcmV0dXJuICEhcmVzdWx0OwotICAg
IH0KLQotICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdU
Rk1vdmUobm9kZXMpKTsKLSAgICByZXR1cm4gISFyZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNTdW0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9r
ZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17
Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAhPSBPSykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZmly
c3RWYWx1ZTsKLSAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwgZmlyc3RW
YWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7Ci0g
ICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0ZXIgPSBvcGVyYXRvclZhbHVlKHRva2Vucy5wZWVr
KCkpOwotICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4o
Q2FsY09wZXJhdG9yOjpBZGQpICYmIG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNo
YXI+KENhbGNPcGVyYXRvcjo6U3VidHJhY3QpKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg
ICAgaWYgKCgmdG9rZW5zLnBlZWsoKSAtIDEpLT50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCsgMnB4KSBpcyBpbnZhbGlkCi0K
LSAgICAgICAgdG9rZW5zLmNvbnN1bWUoKTsKLSAgICAgICAgaWYgKHRva2Vucy5wZWVrKCkudHlw
ZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2Fs
YygxcHggKzJweCkgaXMgaW52YWxpZAotCi0gICAgICAgIHRva2Vucy5jb25zdW1lSW5jbHVkaW5n
V2hpdGVzcGFjZSgpOwotCi0gICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5l
eHRWYWx1ZTsKLSAgICAgICAgaWYgKCFwYXJzZUNhbGNQcm9kdWN0KHRva2VucywgZGVwdGgsIG5l
eHRWYWx1ZSkgfHwgIW5leHRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJh
dG9yOjpTdWJ0cmFjdCkpCi0gICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjTmVnYXRlTm9k
ZTo6Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgICAgICBpZiAoZmly
c3RWYWx1ZSkKLSAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVhc2VOb25O
dWxsKCkpOwotCi0gICAgICAgIG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHQg
PSBXVEZNb3ZlKGZpcnN0VmFsdWUpOwotICAgICAgICByZXR1cm4gISFyZXN1bHQ7Ci0gICAgfQot
Ci0gICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKG5v
ZGVzKSk7Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlQmxlbmRIYWxmKGNvbnN0IExlbmd0aCYgbGVuZ3Ro
LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0IHByb2dyZXNzKQotewotICAgIHJldHVy
biBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvcjo6TXVsdGlwbHksIGNy
ZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKSwKLSAgICAgICAgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3MsIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKSkpOwotfQotCi1zdGF0aWMgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiBjcmVhdGVDU1MoY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+PiYgbm9kZXMsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBWZWN0
b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKLSAgICB2YWx1ZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShub2Rlcy5zaXplKCkpOwotICAgIGZvciAoYXV0byYgbm9kZSA6IG5v
ZGVzKSB7Ci0gICAgICAgIGF1dG8gY3NzTm9kZSA9IGNyZWF0ZUNTUygqbm9kZSwgc3R5bGUpOwot
ICAgICAgICBpZiAoIWNzc05vZGUpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgdmFs
dWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLSAg
ICByZXR1cm4gdmFsdWVzOwotfQotCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gY3JlYXRlQ1NTKGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQotewotICAgIHN3aXRjaCAobm9kZS50eXBlKCkpIHsKLSAgICBjYXNlIENh
bGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcjogewotICAgICAgICBmbG9hdCB2YWx1ZSA9IGRv
d25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihub2RlKS52YWx1ZSgpOyAvLyBkb3VibGU/Ci0g
ICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKTsKLSAgICB9
Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGg6IHsKLSAgICAgICAgYXV0
byYgbGVuZ3RoID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG5vZGUpLmxlbmd0aCgp
OwotICAgICAgICBpZiAoIWxlbmd0aC5pc1BlcmNlbnQoKSAmJiBsZW5ndGguaXNaZXJvKCkpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5n
dGgsIHN0eWxlKTsKLSAgICB9Ci0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5l
Z2F0aW9uOiB7Ci0gICAgICAgIGF1dG8gY2hpbGROb2RlID0gY3JlYXRlQ1NTKCpkb3duY2FzdDxD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihub2RlKS5jaGlsZCgpLCBzdHlsZSk7Ci0gICAgICAgIGlm
ICghY2hpbGROb2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVy
biBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsK
LSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZlcnNpb246IHsKLSAg
ICAgICAgYXV0byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRvd25jYXN0PENhbGNFeHByZXNzaW9u
SW52ZXJzaW9uPihub2RlKS5jaGlsZCgpLCBzdHlsZSk7Ci0gICAgICAgIGlmICghY2hpbGROb2Rl
KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBDU1NDYWxjSW52
ZXJ0Tm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0gICAg
Y2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb246IHsKLSAgICAgICAgYXV0byYg
b3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihub2RlKTsK
LSAgICAgICAgYXV0byYgb3BlcmF0aW9uQ2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVu
KCk7Ci0gICAgICAgIENhbGNPcGVyYXRvciBvcCA9IG9wZXJhdGlvbk5vZGUuZ2V0T3BlcmF0b3Io
KTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAgICAgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkFkZDogewotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVy
YXRpb25DaGlsZHJlbiwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHko
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIGlmIChjaGls
ZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjaGlsZHJl
blswXSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1
bShXVEZNb3ZlKGNoaWxkcmVuKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6OlN1YnRyYWN0OiB7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6
ZSgpID09IDIpOwotCi0gICAgICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4+IHZhbHVlczsKLSAgICAgICAgICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9w
ZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8g
Zmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKLSAg
ICAgICAgICAgIGF1dG8gc2Vjb25kQ2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVu
WzFdLCBzdHlsZSk7Ci0KLSAgICAgICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7Ci0KLSAgICAgICAgICAgIGF1dG8gbmVnYXRlTm9kZSA9
IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUoc2Vjb25kQ2hpbGQucmVsZWFzZU5vbk51bGwoKSk7
Ci0gICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG5l
Z2F0ZU5vZGU7Ci0KLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoZmlyc3RDaGlsZC5yZWxlYXNl
Tm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoV1RGTW92ZShuZWdhdGVOb2Rl
KSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3Vt
KFdURk1vdmUodmFsdWVzKSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5OiB7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJh
dGlvbkNoaWxkcmVuLCBzdHlsZSk7Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdURk1vdmUoY2hpbGRyZW4pKTsKLSAg
ICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7Ci0gICAgICAgICAg
ICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09IDIpOwotCi0gICAgICAgICAgICBW
ZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKLSAgICAgICAgICAgIHZh
bHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7Ci0g
ICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gZmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3Bl
cmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKLSAgICAgICAgICAgIGlmICghZmlyc3RDaGlsZCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICAgICAgYXV0byBzZWNv
bmRDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMV0sIHN0eWxlKTsKLSAgICAg
ICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBhdXRvIGludmVydE5vZGUgPSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRl
KHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAgICAgICB2YWx1ZXMuYXBw
ZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBw
ZW5kKFdURk1vdmUoaW52ZXJ0Tm9kZSkpOwotCi0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBz
dHlsZSkpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAg
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpD
bGFtcDogewotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25D
aGlsZHJlbiwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKG9wLCBXVEZNb3ZlKGNoaWxkcmVu
KSwgb3BlcmF0aW9uTm9kZS5kZXN0aW5hdGlvbkNhdGVnb3J5KCkpOwotICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotICAgIGNhc2UgQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGg6IHsKLSAgICAgICAgLy8gRklYTUU6IChodHRwOi8v
d2Via2l0Lm9yZy9iLzEyMjAzNikgQ3JlYXRlIGEgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIGVxdWl2
YWxlbnQgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC4KLSAgICAgICAgYXV0byYgYmxlbmQg
PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihub2RlKTsKLSAgICAgICAgZmxv
YXQgcHJvZ3Jlc3MgPSBibGVuZC5wcm9ncmVzcygpOwotICAgICAgICByZXR1cm4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6OkFkZCwgY3JlYXRlQmxlbmRIYWxmKGJs
ZW5kLmZyb20oKSwgc3R5bGUsIDEgLSBwcm9ncmVzcyksIGNyZWF0ZUJsZW5kSGFsZihibGVuZC50
bygpLCBzdHlsZSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpVbmRlZmluZWQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0K
LSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlKQotewotICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUoKSkgewotICAgIGNhc2UgTGVuZ3Ro
VHlwZTo6UGVyY2VudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6OkZpeGVkOgotICAgICAgICByZXR1
cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUobGVuZ3RoLCBzdHlsZSkpOwotICAgIGNhc2UgTGVuZ3RoVHlwZTo6Q2FsY3VsYXRlZDoK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGguY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJl
c3Npb24oKSwgc3R5bGUpOwotICAgIGNhc2UgTGVuZ3RoVHlwZTo6QXV0bzoKLSAgICBjYXNlIExl
bmd0aFR5cGU6OkludHJpbnNpYzoKLSAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkludHJpbnNpYzoK
LSAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkNvbnRlbnQ6Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpN
YXhDb250ZW50OgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6RmlsbEF2YWlsYWJsZToKLSAgICBjYXNl
IExlbmd0aFR5cGU6OkZpdENvbnRlbnQ6Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpSZWxhdGl2ZToK
LSAgICBjYXNlIExlbmd0aFR5cGU6OlVuZGVmaW5lZDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1TdHJpbmcgQ1NTQ2FsY1Zh
bHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7
Ci0gICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dChtX2V4cHJlc3Npb24uZ2V0
KCksIGJ1aWxkZXIpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7Ci19Ci0KLWJvb2wg
Q1NTQ2FsY1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJiBvdGhlcikgY29uc3QKLXsK
LSAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fZXhwcmVzc2lvbiwgb3RoZXIubV9leHByZXNz
aW9uKTsKLX0KLQotaW5saW5lIGRvdWJsZSBDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRS
YW5nZShkb3VibGUgdmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlICYmIHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNW
YWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25zdAotewotICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVk
UmFuZ2UobV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZShwcmltaXRpdmVUeXBlKCkpKTsKLX0KLQot
ZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHJldHVybiBjbGFtcFRv
UGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRh
dGEpKTsKLX0KLQotYm9vbCBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKENTU1ZhbHVlSUQg
ZnVuY3Rpb25JZCkKLXsKLSAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQpIHsKLSAgICBjYXNlIENTU1Zh
bHVlQ2FsYzoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoKLSAgICBjYXNlIENTU1ZhbHVl
TWluOgotICAgIGNhc2UgQ1NTVmFsdWVNYXg6Ci0gICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1NDYWxjVmFsdWU6OmR1bXAoVGV4
dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgaW5kZW50IDw8ICIoIiA8PCAiQ1NTQ2Fs
Y1ZhbHVlIjsKLQotICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOwotICAgIG11bHRpbGlu
ZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5kZW50KCkgKyAyKTsKLQotICAgIG11bHRpbGluZVN0cmVh
bS5kdW1wUHJvcGVydHkoInNob3VsZCBjbGFtcCBub24tbmVnYXRpdmUiLCBtX3Nob3VsZENsYW1w
VG9Ob25OZWdhdGl2ZSk7Ci0gICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgiZXhwcmVz
c2lvbiIsIG1fZXhwcmVzc2lvbi5nZXQoKSk7Ci0KLSAgICB0cyA8PCBtdWx0aWxpbmVTdHJlYW0u
cmVsZWFzZSgpOwotICAgIHRzIDw8ICIpXG4iOwotfQotCi1SZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBD
U1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJU
b2tlblJhbmdlJiB0b2tlbnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29y
eSwgVmFsdWVSYW5nZSByYW5nZSkKLXsKLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIg
cGFyc2VyKGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNl
ci5wYXJzZUNhbGModG9rZW5zLCBmdW5jdGlvbik7Ci0gICAgaWYgKCFleHByZXNzaW9uKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1ND
YWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgpLCByYW5nZSAhPSBWYWx1ZVJhbmdl
OjpBbGwpKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjVmFs
dWU6OmNyZWF0ZSAiIDw8ICpyZXN1bHQpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0gICAgCi1S
ZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShjb25zdCBDYWxjdWxhdGlv
blZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIGF1dG8gZXhw
cmVzc2lvbiA9IGNyZWF0ZUNTUyh2YWx1ZS5leHByZXNzaW9uKCksIHN0eWxlKTsKLSAgICBpZiAo
IWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBzaW1wbGlm
aWVkRXhwcmVzc2lvbiA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShleHByZXNzaW9u
LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZihuZXcgQ1NT
Q2FsY1ZhbHVlKFdURk1vdmUoc2ltcGxpZmllZEV4cHJlc3Npb24pLCB2YWx1ZS5zaG91bGRDbGFt
cFRvTm9uTmVnYXRpdmUoKSkpOwotICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwg
IkNTU0NhbGNWYWx1ZTo6Y3JlYXRlIGZyb20gQ2FsY3VsYXRpb25WYWx1ZTogIiA8PCAqcmVzdWx0
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mIHRzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotewotICAgIHN3aXRjaCAo
Y2F0ZWdvcnkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjogdHMgPDwg
Im51bWJlciI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiB0
cyA8PCAibGVuZ3RoIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50OiB0cyA8PCAicGVyY2VudCI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudE51bWJlcjogdHMgPDwgInBlcmNlbnQtbnVtYmVyIjsgYnJlYWs7Ci0gICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOiB0cyA8PCAicGVyY2VudC1sZW5n
dGgiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOiB0cyA8PCAi
YW5nbGUiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6IHRzIDw8
ICJ0aW1lIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6
IHRzIDw8ICJmcmVxdWVuY3kiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOiB0cyA8PCAib3RoZXIiOyBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHM7Ci19
Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENTU0NhbGNW
YWx1ZSYgdmFsdWUpCi17Ci0gICAgdmFsdWUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxj
dWxhdGlvblZhbHVlLmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NDYWxjdWxhdGlvblZhbHVlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwxNTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgotCi1u
YW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotY2xhc3MgQ1NTUGFyc2VyVG9rZW5SYW5nZTsKLWNsYXNzIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGE7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotY2xhc3MgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiB7Ci1wdWJsaWM6
Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlID0gMSwKLSAg
ICAgICAgQ3NzQ2FsY09wZXJhdGlvbiwKLSAgICAgICAgQ3NzQ2FsY05lZ2F0ZSwKLSAgICAgICAg
Q3NzQ2FsY0ludmVydCwKLSAgICB9OwotCi0gICAgdmlydHVhbCB+Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlKCkgPSBkZWZhdWx0OwotICAgIHZpcnR1YWwgYm9vbCBpc1plcm8oKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxj
RXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5ID09IG90
aGVyLm1fY2F0ZWdvcnk7IH0KLSAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsKLSAg
ICB2aXJ0dWFsIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCA9IDA7Ci0KLSAgICB2
aXJ0dWFsIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNl
dDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdERp
cmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4m
KSBjb25zdCA9IDA7Ci0KLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9jYXRlZ29yeTsgfQotCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZShD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotICAgICAgICA6IG1fY2F0ZWdvcnkoY2F0ZWdv
cnkpCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1f
Y2F0ZWdvcnk7Ci19OwotCi1jbGFzcyBDU1NDYWxjVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFs
dWUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NT
VmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSk7Ci0KLSAgICBzdGF0aWMg
UmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmLCBjb25z
dCBSZW5kZXJTdHlsZSYpOwotCi0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbi0+Y2F0ZWdvcnkoKTsgfQotICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZSgpIGNvbnN0OwotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OwotICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5
cGUoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb24tPnByaW1pdGl2ZVR5cGUoKTsgfQotCi0g
ICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OwotICAgIHZvaWQgc2V0UGVybWl0dGVkVmFs
dWVSYW5nZShWYWx1ZVJhbmdlKTsKLQotICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OwotICAgIHZvaWQg
Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD4mKSBjb25zdDsKLQotICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7Ci0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7Ci0gICAgCi0gICAgc3Rh
dGljIGJvb2wgaXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCk7Ci0KLSAgICB2b2lkIGR1bXAoVGV4
dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENTU0NhbGNWYWx1ZShSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmLCBib29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7Ci0KLSAg
ICBkb3VibGUgY2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSkgY29uc3Q7Ci0KLSAgICBjb25z
dCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247Ci0gICAgYm9vbCBtX3No
b3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKLX07Ci0KLWlubGluZSBDU1NDYWxjVmFsdWU6OkNTU0Nh
bGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGV4cHJlc3Npb24sIGJvb2wgc2hv
dWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQotICAgIDogQ1NTVmFsdWUoQ2FsY3VsYXRpb25DbGFzcykK
LSAgICAsIG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQotICAgICwgbV9zaG91bGRD
bGFtcFRvTm9uTmVnYXRpdmUoc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQotewotfQotCi1pbmxp
bmUgUmVmPENhbGN1bGF0aW9uVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlQ2FsY3VsYXRpb25W
YWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29u
c3QKLXsKLSAgICByZXR1cm4gQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKG1fZXhwcmVzc2lvbi0+
Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpLAotICAgICAgICBtX3Nob3VsZENs
YW1wVG9Ob25OZWdhdGl2ZSA/IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlIDogVmFsdWVSYW5nZTo6
QWxsKTsKLX0KLQotaW5saW5lIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpzZXRQZXJtaXR0ZWRWYWx1ZVJh
bmdlKFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUg
PSByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGw7Ci19Ci0KLWlubGluZSB2b2lkIENTU0NhbGNWYWx1
ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fZXhwcmVzc2lvbi0+Y29sbGVjdERpcmVj
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotaW5saW5lIHZvaWQgQ1NT
Q2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFz
aFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fZXhwcmVzc2lvbi0+
Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Ci19Ci0K
LVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDYWxjdWxhdGlv
bkNhdGVnb3J5KTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0m
LCBjb25zdCBDU1NDYWxjVmFsdWUmKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDYWxjVmFsdWUsIGlzQ2FsY1ZhbHVlKCkp
Ci0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RF
KFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JF
R0lOKFdlYkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlwZShj
b25zdCBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUu
cHJlZGljYXRlOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0dyYWRpZW50VmFsdWUuaCIKIAogI2luY2x1ZGUg
IkFuaW1hdGlvblV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIK
KyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNvbG9y
QmxlbmRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNw
cAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgIkNTU1By
aW1pdGl2ZVZhbHVlLmgiCiAKICNpbmNsdWRlICJDU1NCYXNpY1NoYXBlcy5oIgotI2luY2x1ZGUg
IkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNs
dWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCiAjaW5jbHVkZSAi
Q1NTTWFya3VwLmgiCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKICNpbmNsdWRlICJD
U1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgogI2lu
Y2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJDb2xvci5oIgogI2luY2x1ZGUg
IkNvbG9yU2VyaWFsaXphdGlvbi5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlTWFwcGluZ3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
UHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OSw3ICsyOSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGYW1p
bHkuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkocmV2aXNp
b24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0aW9WYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NDYW52YXNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgiCisKKyNpbmNsdWRl
ICJDU1NVbml0cy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGNVbml0Q2F0ZWdvcnkoQ1NT
VW5pdFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0VYUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFg6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0NNOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfSU46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19STEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19DSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19WSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToK
KyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19U
VVJOOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgorICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfSFo6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKKyAgICAgICAgcmV0
dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgfQorfQorCitDYWxjdWxh
dGlvbkNhdGVnb3J5IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihDU1NVbml0VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVI6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI7Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19D
TToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0lOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUEM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6CisgICAgICAgIHJldHVy
biBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1BFUkNFTlRBR0U6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
OworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfVFVSTjoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUzoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU7CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6
CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k7CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1JFTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0NIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICB9Cit9CisKK0NTU1VuaXRUeXBlIGNh
bm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5KQoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlcjogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOworICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19QWDsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHJldHVybiBDU1NV
bml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpB
bmdsZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfREVHOworICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6VGltZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTVM7CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX0haOwor
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6CisgICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudExlbmd0aDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOworfQorCiti
b29sIGhhc0RvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NI
UzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUFg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19NTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1BUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1RVUk46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19IWjoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfS0haOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ESU1FTlNJT046
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19WSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVk1BWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFBQWDoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfRFBJOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUENNOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19GUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19STEhTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVU5LTk9XTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1RSSU5HOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19GT05UX0ZBTUlMWToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
VVJJOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JREVOVDoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfQVRUUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ09VTlRFUjoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUkVDVDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkdC
Q09MT1I6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BBSVI6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1VOSUNPREVfUkFOR0U6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NPVU5U
RVJfTkFNRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU0hBUEU6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1FVQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVSVJLWV9FTVM6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NBTEM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX05VTUJFUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTEVOR1RIOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19QUk9QRVJUWV9JRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkFMVUVfSUQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NT
Q2FsY0NhdGVnb3J5TWFwcGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2VudW0gY2xhc3MgQ1NTVW5pdFR5cGUgOiB1aW50OF90OworZW51bSBjbGFzcyBD
YWxjdWxhdGlvbkNhdGVnb3J5IDogdWludDhfdDsKKworQ2FsY3VsYXRpb25DYXRlZ29yeSBjYWxj
VW5pdENhdGVnb3J5KENTU1VuaXRUeXBlKTsKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY3VsYXRp
b25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlKTsKK0NTU1VuaXRUeXBlIGNhbm9u
aWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxjdWxhdGlvbkNhdGVnb3J5KTsK
K2Jvb2wgaGFzRG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpOworCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlJiBub2RlKQoreworICAgIG5vZGUuZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOwor
fQorCisjaWYgIUxPR19ESVNBQkxFRAorU3RyaW5nIHByZXR0eVByaW50Tm9kZShjb25zdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJl
YW07CisgICAgbXVsdGlsaW5lU3RyZWFtIDw8IG5vZGU7CisgICAgcmV0dXJuIG11bHRpbGluZVN0
cmVhbS5yZWxlYXNlKCk7Cit9CisKK1N0cmluZyBwcmV0dHlQcmludE5vZGVzKGNvbnN0IFZlY3Rv
cjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzKQoreworICAgIFRleHRTdHJlYW0g
bXVsdGlsaW5lU3RyZWFtOworICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlczsKKyAgICByZXR1
cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKK30KKyNlbmRpZgorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKyNpbmNsdWRlICJD
YWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGE7CisKK2VudW0gQ1NTUHJvcGVydHlJRCA6IHVpbnQxNl90OworCitl
bnVtIGNsYXNzIENTU1VuaXRUeXBlIDogdWludDhfdDsKKworY2xhc3MgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiB7CitwdWJs
aWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlID0gMSwK
KyAgICAgICAgQ3NzQ2FsY09wZXJhdGlvbiwKKyAgICAgICAgQ3NzQ2FsY05lZ2F0ZSwKKyAgICAg
ICAgQ3NzQ2FsY0ludmVydCwKKyAgICB9OworCisgICAgdmlydHVhbCB+Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBpc1plcm8oKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVD
YWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBD
U1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX2NhdGVnb3J5ID09
IG90aGVyLm1fY2F0ZWdvcnk7IH0KKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0ID0gMDsK
KyAgICB2aXJ0dWFsIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCA9IDA7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFz
aFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVj
dERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mKSBjb25zdCA9IDA7CisKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29u
c3QgeyByZXR1cm4gbV9jYXRlZ29yeTsgfQorCisgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIENTU0NhbGNFeHByZXNzaW9uTm9k
ZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQorICAgICAgICA6IG1fY2F0ZWdvcnkoY2F0
ZWdvcnkpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
IG1fY2F0ZWdvcnk7Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKTsKKworI2lmICFMT0dfRElTQUJMRUQKK1N0cmlu
ZyBwcmV0dHlQcmludE5vZGUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJik7CitTdHJpbmcg
cHJldHR5UHJpbnROb2Rlcyhjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
Jik7CisjZW5kaWYKKworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FM
Q0VYUFJFU1NJT05fTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2Rl
KSB7IHJldHVybiBub2RlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VO
RCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCIKKworI2luY2x1ZGUgIkNTU0NhbGND
YXRlZ29yeU1hcHBpbmcuaCIKKyNpbmNsdWRlICJDU1NDYWxjSW52ZXJ0Tm9kZS5oIgorI2luY2x1
ZGUgIkNTU0NhbGNOZWdhdGVOb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY09wZXJhdGlvbk5vZGUu
aCIKKyNpbmNsdWRlICJDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgiCisjaW5jbHVkZSAiQ1NT
Q2FsY1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW4uaCIKKyNpbmNsdWRlICJDU1NQ
YXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heEV4cHJlc3Npb25EZXB0aCA9IDEwMDsK
KworLy8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI2NhbGMtc3ludGF4
PjoKKy8vIDxjYWxjKCk+ICA9IGNhbGMoIDxjYWxjLXN1bT4gKQorLy8gPG1pbigpPiAgID0gbWlu
KCA8Y2FsYy1zdW0+IyApCisvLyA8bWF4KCk+ICAgPSBtYXgoIDxjYWxjLXN1bT4jICkKKy8vIDxj
bGFtcCgpPiA9IGNsYW1wKCA8Y2FsYy1zdW0+I3szfSApCisvLyA8c2luKCk+ICAgPSBzaW4oIDxj
YWxjLXN1bT4gKQorLy8gPGNvcygpPiAgID0gY29zKCA8Y2FsYy1zdW0+ICkKKy8vIDx0YW4oKT4g
ICA9IHRhbiggPGNhbGMtc3VtPiApCisvLyA8YXNpbigpPiAgPSBhc2luKCA8Y2FsYy1zdW0+ICkK
Ky8vIDxhY29zKCk+ICA9IGFjb3MoIDxjYWxjLXN1bT4gKQorLy8gPGF0YW4oKT4gID0gYXRhbigg
PGNhbGMtc3VtPiApCisvLyA8YXRhbjIoKT4gPSBhdGFuMiggPGNhbGMtc3VtPiwgPGNhbGMtc3Vt
PiApCisvLyA8cG93KCk+ICAgPSBwb3coIDxjYWxjLXN1bT4sIDxjYWxjLXN1bT4gKQorLy8gPHNx
cnQoKT4gID0gc3FydCggPGNhbGMtc3VtPiApCisvLyA8aHlwb3QoKT4gPSBoeXBvdCggPGNhbGMt
c3VtPiMgKQorLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+IFsgWyAnKycgfCAnLScgXSA8
Y2FsYy1wcm9kdWN0PiBdKgorLy8gPGNhbGMtcHJvZHVjdD4gPSA8Y2FsYy12YWx1ZT4gWyBbICcq
JyB8ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgorLy8gPGNhbGMtdmFsdWU+ID0gPG51bWJlcj4gfCA8
ZGltZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3VtPiApCitSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyhD
U1NQYXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlvbikKK3sKKyAgICB0
b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKworICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IHJlc3VsdDsKKyAgICBib29sIG9rID0gcGFyc2VDYWxjRnVuY3Rpb24odG9rZW5zLCBm
dW5jdGlvbiwgMCwgcmVzdWx0KTsKKyAgICBpZiAoIW9rIHx8ICF0b2tlbnMuYXRFbmQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVz
dWx0KSk7CisKKyAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkocmVz
dWx0LnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVh
bSA8PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgLSBhZnRlciBzaW1w
bGlmaWNhdGlvbiAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0KSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitjaGFyIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6b3BlcmF0b3JW
YWx1ZShjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4pCit7CisgICAgaWYgKHRva2VuLnR5cGUo
KSA9PSBEZWxpbWl0ZXJUb2tlbikKKyAgICAgICAgcmV0dXJuIHRva2VuLmRlbGltaXRlcigpOwor
ICAgIHJldHVybiAwOworfQorCitlbnVtIFBhcnNlU3RhdGUgeworICAgIE9LLAorICAgIFRvb0Rl
ZXAsCisgICAgTm9Nb3JlVG9rZW5zCit9OworCitzdGF0aWMgUGFyc2VTdGF0ZSBjaGVja0RlcHRo
QW5kSW5kZXgoaW50IGRlcHRoLCBDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucykKK3sKKyAgICBp
ZiAodG9rZW5zLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBOb01vcmVUb2tlbnM7CisgICAgaWYg
KGRlcHRoID4gbWF4RXhwcmVzc2lvbkRlcHRoKSB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShD
YWxjLCBzdHJlYW0gPDwgIkRlcHRoICIgPDwgZGVwdGggPDwgIiBleGNlZWRlZCBtYXhFeHByZXNz
aW9uRGVwdGggIiA8PCBtYXhFeHByZXNzaW9uRGVwdGgpOworICAgICAgICByZXR1cm4gVG9vRGVl
cDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitib29sIENTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBD
U1NWYWx1ZUlEIGZ1bmN0aW9uSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tl
bnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyAiYXJndW1lbnRzIiBy
ZWZlcnMgdG8gdGhpbmdzIGJldHdlZW4gY29tbWFzLgorICAgIHVuc2lnbmVkIG1pbkFyZ3VtZW50
Q291bnQgPSAxOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtYXhBcmd1bWVudENvdW50OworCisg
ICAgc3dpdGNoIChmdW5jdGlvbklEKSB7CisgICAgY2FzZSBDU1NWYWx1ZU1pbjoKKyAgICBjYXNl
IENTU1ZhbHVlTWF4OgorICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gc3RkOjpudWxsb3B0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6CisgICAgICAgIG1pbkFyZ3Vt
ZW50Q291bnQgPSAzOworICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gMzsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBDU1NWYWx1ZUNhbGM6CisgICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSAx
OworICAgICAgICBicmVhazsKKyAgICAvLyBUT0RPOiBjbGFtcCwgc2luLCBjb3MsIHRhbiwgYXNp
biwgYWNvcywgYXRhbiwgYXRhbjIsIHBvdywgc3FydCwgaHlwb3QuCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiBub2RlczsKKworICAgIGJvb2wgcmVxdWlyZUNvbW1hID0gZmFsc2U7CisgICAgdW5zaWdu
ZWQgYXJndW1lbnRDb3VudCA9IDA7CisgICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgeworICAg
ICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgaWYgKHJlcXVpcmVDb21t
YSkgeworICAgICAgICAgICAgaWYgKHRva2Vucy5jb25zdW1lKCkudHlwZSgpICE9IENvbW1hVG9r
ZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgdG9rZW5zLmNv
bnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIH0KKworICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBub2RlOworICAgICAgICBpZiAoIXBhcnNlQ2FsY1N1bSh0b2tlbnMsIGRl
cHRoLCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICArK2FyZ3Vt
ZW50Q291bnQ7CisgICAgICAgIGlmIChtYXhBcmd1bWVudENvdW50ICYmIGFyZ3VtZW50Q291bnQg
PiBtYXhBcmd1bWVudENvdW50LnZhbHVlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgbm9kZXMuYXBwZW5kKG5vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJl
cXVpcmVDb21tYSA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlmIChhcmd1bWVudENvdW50IDwg
bWluQXJndW1lbnRDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChm
dW5jdGlvbklEKSB7CisgICAgY2FzZSBDU1NWYWx1ZU1pbjoKKyAgICAgICAgcmVzdWx0ID0gQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1p
biwgV1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTVmFsdWVNYXg6CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpNYXgsIFdURk1vdmUo
bm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IENTU1ZhbHVlQ2xhbXA6CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpDbGFtcCwgV1RGTW92ZShub2Rlcyks
IG1fZGVzdGluYXRpb25DYXRlZ29yeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFs
dWVXZWJraXRDYWxjOgorICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgorICAgICAgICByZXN1bHQgPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgLy8gVE9ETzogY2xhbXAsIHNpbiwgY29zLCB0YW4sIGFzaW4sIGFjb3MsIGF0
YW4sIGF0YW4yLCBwb3csIHNxcnQsIGh5cG90CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgcmV0dXJuICEhcmVzdWx0OworfQorCitib29sIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCit7CisgICAgLy8gRklYTUU6IEFk
ZCBjb2RlIGhlcmUgdG8gcGFyc2UgQ1NTVmFsaWRJRCBmb3IgbmFtZWQgY29uc3RhbnRzLgorCisg
ICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4gPSB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3Bh
Y2UoKTsKKyAgICBpZiAoISh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4udHlw
ZSgpID09IFBlcmNlbnRhZ2VUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4p
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0byB0eXBlID0gdG9rZW4udW5p
dFR5cGUoKTsKKyAgICBpZiAoY2FsY1VuaXRDYXRlZ29yeSh0eXBlKSA9PSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIHJlc3VsdCA9
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCB0eXBlKSk7CisgICAgCisgICAgcmV0dXJuIHRydWU7
Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZShD
U1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRo
LCB0b2tlbnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZpbmRG
dW5jdGlvbklkID0gWyZdKENTU1ZhbHVlSUQmIGZ1bmN0aW9uSWQpIHsKKyAgICAgICAgaWYgKHRv
a2Vucy5wZWVrKCkudHlwZSgpID09IExlZnRQYXJlbnRoZXNpc1Rva2VuKSB7CisgICAgICAgICAg
ICBmdW5jdGlvbklkID0gQ1NTVmFsdWVDYWxjOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbklkID0gdG9rZW5zLnBlZWsoKS5mdW5jdGlvbklk
KCk7CisgICAgICAgIHJldHVybiBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9u
SWQpOworICAgIH07CisKKyAgICBDU1NWYWx1ZUlEIGZ1bmN0aW9uSWQ7CisgICAgaWYgKGZpbmRG
dW5jdGlvbklkKGZ1bmN0aW9uSWQpKSB7CisgICAgICAgIENTU1BhcnNlclRva2VuUmFuZ2UgaW5u
ZXJSYW5nZSA9IHRva2Vucy5jb25zdW1lQmxvY2soKTsKKyAgICAgICAgdG9rZW5zLmNvbnN1bWVX
aGl0ZXNwYWNlKCk7CisgICAgICAgIGlubmVyUmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAg
ICAgICAgcmV0dXJuIHBhcnNlQ2FsY0Z1bmN0aW9uKGlubmVyUmFuZ2UsIGZ1bmN0aW9uSWQsIGRl
cHRoICsgMSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4gcGFyc2VWYWx1ZSh0b2tlbnMs
IHJlc3VsdCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNh
bGNQcm9kdWN0KENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAgIGlmIChjaGVja0RlcHRoQW5k
SW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFsdWU7CisgICAgaWYgKCFwYXJz
ZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKwor
ICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKKyAgICAgICAgY2hhciBvcGVyYXRvckNoYXJh
Y3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7CisgICAgICAgIGlmIChvcGVyYXRv
ckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KSAm
JiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRp
dmlkZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBuZXh0VmFsdWU7CisgICAgICAgIGlmICghcGFyc2VDYWxjVmFsdWUodG9rZW5zLCBk
ZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihD
YWxjT3BlcmF0b3I6OkRpdmlkZSkpCisgICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjSW52
ZXJ0Tm9kZTo6Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICBp
ZiAoZmlyc3RWYWx1ZSkKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVh
c2VOb25OdWxsKCkpOworCisgICAgICAgIG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgfQorCisgICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkgeworICAgICAgICBy
ZXN1bHQgPSBXVEZNb3ZlKGZpcnN0VmFsdWUpOworICAgICAgICByZXR1cm4gISFyZXN1bHQ7Cisg
ICAgfQorCisgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3Qo
V1RGTW92ZShub2RlcykpOworICAgIHJldHVybiAhIXJlc3VsdDsKK30KKworYm9vbCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiB0
b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkK
K3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBm
aXJzdFZhbHVlOworICAgIGlmICghcGFyc2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBmaXJz
dFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKworICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsK
KyAgICAgICAgY2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBl
ZWsoKSk7CisgICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFy
PihDYWxjT3BlcmF0b3I6OkFkZCkgJiYgb3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8
Y2hhcj4oQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdCkpCisgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICBpZiAoKCZ0b2tlbnMucGVlaygpIC0gMSktPnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4p
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4KyAycHgpIGlzIGludmFsaWQK
KworICAgICAgICB0b2tlbnMuY29uc3VtZSgpOworICAgICAgICBpZiAodG9rZW5zLnBlZWsoKS50
eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBj
YWxjKDFweCArMnB4KSBpcyBpbnZhbGlkCisKKyAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCk7CisKKyAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
bmV4dFZhbHVlOworICAgICAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwg
bmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3Bl
cmF0b3I6OlN1YnRyYWN0KSkKKyAgICAgICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNOZWdhdGVO
b2RlOjpjcmVhdGUobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgICAgIGlmIChm
aXJzdFZhbHVlKQorICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CisKKyAgICAgICAgbm9kZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICB9CisKKyAgICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3Vs
dCA9IFdURk1vdmUoZmlyc3RWYWx1ZSk7CisgICAgICAgIHJldHVybiAhIXJlc3VsdDsKKyAgICB9
CisKKyAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUo
bm9kZXMpKTsKKyAgICByZXR1cm4gISFyZXN1bHQ7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRl
ICJDYWxjT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlOworY2xhc3Mg
Q1NTUGFyc2VyVG9rZW47CitjbGFzcyBDU1NQYXJzZXJUb2tlblJhbmdlOworCitjbGFzcyBDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IENTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcihDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdv
cnkpCisgICAgICAgIDogbV9kZXN0aW5hdGlvbkNhdGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkp
CisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHBhcnNl
Q2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKTsKKyAgICAKK3By
aXZhdGU6CisgICAgY2hhciBvcGVyYXRvclZhbHVlKGNvbnN0IENTU1BhcnNlclRva2VuJik7CisK
KyAgICBib29sIHBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFJlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZVZhbHVlVGVybShDU1NQYXJzZXJUb2tl
blJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOworICAg
IGJvb2wgcGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQs
IGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKyAgICBib29sIHBh
cnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxjUHJvZHVjdChDU1NQYXJzZXJU
b2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwor
ICAgIGJvb2wgcGFyc2VDYWxjVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKworICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5OworfTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDU1NDYWxjSW52ZXJ0Tm9kZS5oIgorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25JbnZl
cnNpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0lu
dmVydE5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAgIGF1dG8gY2hpbGROb2RlID0gbV9j
aGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpOworICAgIHJldHVybiBt
YWtlVW5pcXVlPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihXVEZNb3ZlKGNoaWxkTm9kZSkpOwor
fQorCitkb3VibGUgQ1NTQ2FsY0ludmVydE5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVu
aXRUeXBlKSBjb25zdAoreworICAgIGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmRvdWJsZVZh
bHVlKHVuaXRUeXBlKTsKKyAgICBpZiAoIWNoaWxkVmFsdWUpCisgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgcmV0dXJuIDEuMCAvIGNo
aWxkVmFsdWU7Cit9CisKK2RvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y29tcHV0ZUxlbmd0aFB4
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAor
eworICAgIGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJz
aW9uRGF0YSk7CisgICAgaWYgKCFjaGlsZFZhbHVlKQorICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIHJldHVybiAxLjAgLyBjaGlsZFZh
bHVlOworfQorCit2b2lkIENTU0NhbGNJbnZlcnROb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBj
b25zdAoreworICAgIHRzIDw8ICIxLyIgPDwgbV9jaGlsZC5nZXQoKTsKK30KKworCit9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDU1NDYWxjSW52ZXJ0Tm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0ludmVydE5vZGU+IGNy
ZWF0ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY0ludmVydE5vZGUoV1RGTW92ZShjaGlsZCkpKTsK
KyAgICB9CisKKyAgICBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hp
bGQoKSB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9CisKKyAgICB2b2lkIHNldENoaWxkKFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpIHsgbV9jaGlsZCA9IFdURk1vdmUoY2hpbGQp
OyB9CisKK3ByaXZhdGU6CisgICAgQ1NTQ2FsY0ludmVydE5vZGUoUmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4mJiBjaGlsZCkKKyAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2hpbGQt
PmNhdGVnb3J5KCkpCisgICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKGNoaWxkKSkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2Fs
Y0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFs
OworCisgICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5pc1pl
cm8oKTsgfQorICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7
CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJikgY29uc3QgZmluYWw7CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
VHlwZTo6Q3NzQ2FsY0ludmVydDsgfQorICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBj
b25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5wcmltaXRpdmVUeXBlKCk7IH0KKworICAgIHZv
aWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0
Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQorICAgIHZvaWQgY29sbGVj
dERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RD
b21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9CisKKyAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gbV9jaGlsZDsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQ
UkVTU0lPTl9OT0RFKENTU0NhbGNJbnZlcnROb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0KQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJDU1NDYWxjTmVnYXRlTm9kZS5oIgorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25O
ZWdhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxj
TmVnYXRlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgYXV0byBjaGlsZE5vZGUgPSBt
X2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7CisgICAgcmV0dXJu
IG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4oV1RGTW92ZShjaGlsZE5vZGUpKTsK
K30KKwordm9pZCBDU1NDYWxjTmVnYXRlTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QK
K3sKKyAgICB0cyA8PCAiLSIgPDwgbV9jaGlsZC5nZXQoKTsKK30KKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVk
ZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ1NTQ2FsY05lZ2F0ZU5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNOZWdhdGVOb2RlPiBjcmVhdGUoUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKKyAgICB7CisgICAgICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IENTU0NhbGNOZWdhdGVOb2RlKFdURk1vdmUoY2hpbGQpKSk7CisgICAgfQor
CisgICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hpbGQuZ2V0KCk7IH0KKyAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkgeyBy
ZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRDaGlsZChSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNoaWxkKTsgfQorCitw
cml2YXRlOgorICAgIENTU0NhbGNOZWdhdGVOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiYgY2hpbGQpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNoaWxkLT5jYXRlZ29y
eSgpKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCisgICAgeworICAgIH0KKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNz
aW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKworICAg
IGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+aXNaZXJvKCk7IH0K
KyAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIC1tX2NoaWxkLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7IH0KKyAgICBkb3VibGUg
Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNp
b25EYXRhKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNv
bnZlcnNpb25EYXRhKTsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5
cGU6OkNzc0NhbGNOZWdhdGU7IH0KKyAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9CisKKyAgICB2b2lk
IGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdENv
bXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KKyAgICB2b2lkIGNvbGxlY3RE
aXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29t
cHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQorCisgICAgdm9pZCBkdW1wKFRl
eHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IG1fY2hpbGQ7Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJF
U1NJT05fTk9ERShDU1NDYWxjTmVnYXRlTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY05lZ2F0ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
ICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIgorCisjaW5jbHVkZSAiQ1NT
Q2FsY0NhdGVnb3J5TWFwcGluZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNJbnZlcnROb2RlLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgdGhlICJUbyBhZGQg
dHdvIHR5cGVzIHR5cGUxIGFuZCB0eXBlMiwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOiIg
cnVsZXMuCisKK3N0YXRpYyBjb25zdCBDYWxjdWxhdGlvbkNhdGVnb3J5IGFkZFN1YnRyYWN0UmVz
dWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSldW3N0
YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSldID0geworLy8g
ICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TGVuZ3RoICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aAorICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCAgICAgICAgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIKKyAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCwgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5n
dGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoCisgICAg
eyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCAgICAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQKKyAgICB7IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVy
LCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyIH0sIC8v
ICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcgorICAgIHsgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0
aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoCit9OworCitzdGF0aWMg
Q2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lk
ZSwgQ2FsY09wZXJhdG9yIG9wKQoreworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbGVmdENhdGVn
b3J5ID0gbGVmdFNpZGUuY2F0ZWdvcnkoKTsKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IHJpZ2h0
Q2F0ZWdvcnkgPSByaWdodFNpZGUuY2F0ZWdvcnkoKTsKKyAgICBBU1NFUlQobGVmdENhdGVnb3J5
IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworICAgIEFTU0VSVChyaWdodENhdGVnb3J5
IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworCisgICAgc3dpdGNoIChvcCkgeworICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0
OgorICAgICAgICBpZiAobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUg
JiYgcmlnaHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQorICAgICAgICAg
ICAgcmV0dXJuIGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihsZWZ0Q2F0
ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHRDYXRlZ29yeSldOworICAgICAgICBp
ZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0Q2F0ZWdvcnkpCisgICAgICAgICAgICByZXR1cm4gbGVm
dENhdGVnb3J5OworICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cisg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgorICAgICAgICBpZiAobGVmdENhdGVnb3J5
ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAmJiByaWdodENhdGVnb3J5ICE9IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpOdW1iZXIgPyByaWdodENhdGVnb3J5IDogbGVmdENhdGVnb3J5OworICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIGlmIChyaWdodENhdGVnb3J5ICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCByaWdodFNpZGUuaXNaZXJvKCkpCisgICAgICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgICAgIHJldHVybiBs
ZWZ0Q2F0ZWdvcnk7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoKKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWF4OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cit9CisKKy8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVu
dCBjb3JyZWN0IGNhdGVnb3J5IGNvbXB1dGF0aW9uIHBlcjoKKy8vIDxodHRwczovL2RyYWZ0cy5j
c3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1pbnZlcnQtYS10
eXBlPgorLy8gVG8gaW52ZXJ0IGEgdHlwZSB0eXBlLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3Rl
cHM6CisvLyBMZXQgcmVzdWx0IGJlIGEgbmV3IHR5cGUgd2l0aCBhbiBpbml0aWFsbHkgZW1wdHkg
b3JkZXJlZCBtYXAgYW5kIGFuIGluaXRpYWxseSBudWxsIHBlcmNlbnQgaGludAorLy8gRm9yIGVh
Y2ggdW5pdCDihpIgZXhwb25lbnQgb2YgdHlwZSwgc2V0IHJlc3VsdFt1bml0XSB0byAoLTEgKiBl
eHBvbmVudCkuCitzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeUZvckludmVydChD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQoreworICAgIHJldHVybiBjYXRlZ29yeTsKK30K
Kworc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgVmVj
dG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMsIENhbGNPcGVyYXRvciBvcCkK
K3sKKyAgICBpZiAobm9kZXMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI7CisKKyAgICBhdXRvIGN1cnJlbnRDYXRlZ29yeSA9IG5vZGVzWzBdLT5j
YXRlZ29yeSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG5vZGVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKKyAgICAg
ICAgCisgICAgICAgIGF1dG8gdXNlZE9wZXJhdG9yID0gb3A7CisgICAgICAgIGlmIChub2RlLnR5
cGUoKSA9PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNJbnZlcnQpCisgICAg
ICAgICAgICB1c2VkT3BlcmF0b3IgPSBDYWxjT3BlcmF0b3I6OkRpdmlkZTsKKworICAgICAgICBh
dXRvIG5leHRDYXRlZ29yeSA9IG5vZGUuY2F0ZWdvcnkoKTsKKworICAgICAgICBzd2l0Y2ggKHVz
ZWRPcGVyYXRvcikgeworICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgorICAgICAgICBj
YXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAgICAgICAgICAvLyA8aHR0cHM6Ly9kcmFm
dHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtYWRkLXR3
by10eXBlcz4KKyAgICAgICAgICAgIC8vIEF0IGEgKyBvciAtIHN1Yi1leHByZXNzaW9uLCBhdHRl
bXB0IHRvIGFkZCB0aGUgdHlwZXMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZ3VtZW50cy4KKyAg
ICAgICAgICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWlsdXJlLCB0aGUgZW50aXJlIGNhbGN1bGF0
aW9u4oCZcyB0eXBlIGlzIGZhaWx1cmUuIE90aGVyd2lzZSwgdGhlIHN1Yi1leHByZXNzaW9u4oCZ
cyB0eXBlIGlzIHRoZSByZXR1cm5lZCB0eXBlLgorICAgICAgICAgICAgaWYgKGN1cnJlbnRDYXRl
Z29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlICYmIG5leHRDYXRlZ29yeSA8IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQorICAgICAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9
IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihjdXJyZW50Q2F0ZWdvcnkp
XVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obmV4dENhdGVnb3J5KV07CisgICAgICAgICAgICBlbHNl
IGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gbmV4dENhdGVnb3J5KQorICAgICAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKKyAgICAgICAgICAgIC8vIDxodHRw
czovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1
ZS1tdWx0aXBseS10d28tdHlwZXM+CisgICAgICAgICAgICAvLyBBdCBhICogc3ViLWV4cHJlc3Np
b24sIG11bHRpcGx5IHRoZSB0eXBlcyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYXJndW1lbnRzLiBU
aGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJldHVybmVkIHJlc3VsdC4KKyAgICAg
ICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
ICYmIG5leHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworCisgICAgICAgICAg
ICBjdXJyZW50Q2F0ZWdvcnkgPSBjdXJyZW50Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyID8gbmV4dENhdGVnb3J5IDogY3VycmVudENhdGVnb3J5OworICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogeworICAgICAgICAg
ICAgYXV0byBpbnZlcnRDYXRlZ29yeSA9IGNhdGVnb3J5Rm9ySW52ZXJ0KG5leHRDYXRlZ29yeSk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEF0IGEgLyBzdWItZXhwcmVzc2lvbiwgbGV0
IGxlZnQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRpbmcgdGhlIHR5cGVzIG9mIGl0cyBsZWZ0
IGFyZ3VtZW50LAorICAgICAgICAgICAgLy8gYW5kIHJpZ2h0IHR5cGUgYmUgdGhlIHJlc3VsdCBv
ZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgcmlnaHQgYXJndW1lbnQgYW5kIHRoZW4gaW52ZXJ0
aW5nIGl0LgorICAgICAgICAgICAgLy8gVGhlIHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRo
ZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGxlZnQgdHlwZSBhbmQgcmlnaHQgdHlwZS4KKyAg
ICAgICAgICAgIGlmIChpbnZlcnRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIgfHwgbm9kZS5pc1plcm8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6
CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAgICAgICAgICAgIC8vIFRoZSB0
eXBlIG9mIGEgbWluKCksIG1heCgpLCBvciBjbGFtcCgpIGV4cHJlc3Npb24gaXMgdGhlIHJlc3Vs
dCBvZiBhZGRpbmcgdGhlIHR5cGVzIG9mIGl0cyBjb21tYS1zZXBhcmF0ZWQgY2FsY3VsYXRpb25z
CisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudENhdGVnb3J5OworfQorCitzdGF0aWMgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSByZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xhbXAoQ2FsY3VsYXRp
b25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVn
b3J5KQoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgorICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI6CisgICAgICAgIHJldHVybiBjYXRlZ29yeTsKKworICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdv
cnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg7CisgICAgICAgIGlmIChkZXN0aW5hdGlv
bkNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOworICAgICAgICByZXR1cm4g
Y2F0ZWdvcnk7CisgICAgfQorCisgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVy
OworfQorCitzdGF0aWMgYm9vbCBpc1NhbWVQYWlyKENhbGN1bGF0aW9uQ2F0ZWdvcnkgYSwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBiLCBDYWxjdWxhdGlvbkNhdGVnb3J5IHgsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgeSkKK3sKKyAgICByZXR1cm4gKGEgPT0geCAmJiBiID09IHkpIHx8IChhID09IHkgJiYg
YiA9PSB4KTsKK30KKworZW51bSBjbGFzcyBTb3J0aW5nQ2F0ZWdvcnkgeworICAgIE51bWJlciwK
KyAgICBQZXJjZW50LAorICAgIERpbWVuc2lvbiwKKyAgICBPdGhlcgorfTsKKworc3RhdGljIFNv
cnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnlGb3JUeXBlKENTU1VuaXRUeXBlIHVuaXRUeXBl
KQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGluZ0NhdGVnb3J5IHNvcnRPcmRlcltdID0g
eworICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlciwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAg
ICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsCisgICAgICAgIFNvcnRpbmdDYXRlZ29y
eTo6UGVyY2VudCwgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwKKyAgICAg
ICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyLAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAg
IC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsCisgICAgICAgIFNvcnRpbmdD
YXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUsCisg
ICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6VGltZSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3ksCisgICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6
T3RoZXIsICAgICAgICAgLy8gVU90aGVyCisgICAgfTsKKworICAgIENPTVBJTEVfQVNTRVJUKEFS
UkFZX1NJWkUoc29ydE9yZGVyKSA9PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpICsgMSwgc29ydE9yZGVyX3NpemVfc2hvdWxkX21hdGNoX1VuaXRDYXRl
Z29yeSk7CisgICAgcmV0dXJuIHNvcnRPcmRlcltzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY2FsY1Vu
aXRDYXRlZ29yeSh1bml0VHlwZSkpXTsKK30KKworc3RhdGljIFNvcnRpbmdDYXRlZ29yeSBzb3J0
aW5nQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQoreworICAgIGlm
IChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKKyAgICAgICAgcmV0dXJuIHNv
cnRpbmdDYXRlZ29yeUZvclR5cGUobm9kZS5wcmltaXRpdmVUeXBlKCkpOworCisgICAgcmV0dXJu
IFNvcnRpbmdDYXRlZ29yeTo6T3RoZXI7Cit9CisKK3N0YXRpYyBDU1NVbml0VHlwZSBwcmltaXRp
dmVUeXBlRm9yQ29tYmluYXRpb24oY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQor
eworICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKKyAgICAgICAg
cmV0dXJuIG5vZGUucHJpbWl0aXZlVHlwZSgpOworICAgIAorICAgIHJldHVybiBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047Cit9CisKK3N0YXRpYyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpV
bml0Q29udmVyc2lvbiBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlwZXMoQ1NTVW5pdFR5cGUg
Zmlyc3RUeXBlLCBDU1NVbml0VHlwZSBzZWNvbmRUeXBlKQoreworICAgIGlmIChmaXJzdFR5cGUg
PT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOIHx8IHNlY29uZFR5cGUgPT0gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOKQorICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
VW5pdENvbnZlcnNpb246OkludmFsaWQ7CisKKyAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxj
dWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oZmlyc3RUeXBlKTsKKworICAgIC8vIENvbXBh
dGlibGUgdHlwZXMuCisgICAgaWYgKGZpcnN0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIgJiYgZmlyc3RDYXRlZ29yeSA9PSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmlu
YXRpb24oc2Vjb25kVHlwZSkpCisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOworCisgICAgLy8gTWF0Y2hpbmcgdHlw
ZXMuCisgICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlICYmIGhhc0RvdWJsZVZhbHVlKGZp
cnN0VHlwZSkpCisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0
Q29udmVyc2lvbjo6UHJlc2VydmU7CisKKyAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7Cit9CisKKworc3RhdGljIENTU1ZhbHVlSUQg
ZnVuY3Rpb25Gcm9tT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3Ap
IHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpT
dWJ0cmFjdDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkRpdmlkZToKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2FsYzsKKyAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TWluOgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVNaW47CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDoKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlTWF4OworICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2xhbXA7Cisg
ICAgfQorICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7Cit9CisKK1JlZlB0cjxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3Igb3AsIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZlB0cjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQoreworICAgIGlmICghbGVmdFNpZGUgfHwgIXJpZ2h0
U2lkZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBBU1NFUlQob3AgPT0gQ2FsY09w
ZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7CisKKyAgICBBU1NF
UlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7Cisg
ICAgQVNTRVJUKHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyKTsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNp
ZGUsICpyaWdodFNpZGUsIG9wKTsKKyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8
PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9k
ZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVBy
aW50Tm9kZSgqbGVmdFNpZGUpIDw8ICIgYW5kICIgPDwgKnJpZ2h0U2lkZSk7CisgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIG9wLCBsZWZ0U2lkZS5yZWxlYXNlTm9uTnVsbCgpLCBy
aWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSkpOworfQorCitSZWZQdHI8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oVmVjdG9yPFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKK3sKKyAgICBpZiAodmFsdWVzLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJt
aW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6OkFkZCk7CisgICAgaWYgKG5ld0NhdGVn
b3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7CisgICAgICAgIExPR19XSVRIX1NU
UkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgc3VtIG5vZGUgYmVjYXVzZSB1
bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZh
bHVlcykpOworICAgICAgICBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KHZhbHVlcywg
Q2FsY09wZXJhdG9yOjpBZGQpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKG5ld0NhdGVnb3J5LCBD
YWxjT3BlcmF0b3I6OkFkZCwgV1RGTW92ZSh2YWx1ZXMpKSk7Cit9CisKK1JlZlB0cjxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKK3sKKyAgICBpZiAodmFsdWVz
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5ld0NhdGVn
b3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsK
KyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBw
cm9kdWN0IG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8
PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKG5ld0Nh
dGVnb3J5LCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBXVEZNb3ZlKHZhbHVlcykpKTsKK30KKwor
UmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRl
TWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciBvcCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVn
b3J5KQoreworICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBvcCA9PSBDYWxj
T3BlcmF0b3I6Ok1heCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wKTsKKyAgICBBU1NFUlRf
SU1QTElFUyhvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wLCB2YWx1ZXMuc2l6ZSgpID09IDMpOwor
CisgICAgT3B0aW9uYWw8Q2FsY3VsYXRpb25DYXRlZ29yeT4gY2F0ZWdvcnkgPSBzdGQ6Om51bGxv
cHQ7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgeworICAgICAgICBhdXRvIHZhbHVl
Q2F0ZWdvcnkgPSByZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xhbXAodmFsdWUtPmNhdGVnb3J5
KCksIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworCisgICAgICAgIEFTU0VSVCh2YWx1ZUNhdGVnb3J5
IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworICAgICAgICBpZiAoIWNhdGVnb3J5KSB7
CisgICAgICAgICAgICBpZiAodmFsdWVDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcikgeworICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwg
IkZhaWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgIiA8PCBvcCA8PCAiIG5vZGUg
YmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmlu
dE5vZGVzKHZhbHVlcykpOworICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgY2F0ZWdvcnkgPSB2YWx1ZUNhdGVnb3J5OworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHZhbHVlQ2F0ZWdvcnkpIHsKKyAgICAgICAgICAg
IGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkp
IHsKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgpLCB2YWx1ZUNhdGVnb3J5LCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRO
dW1iZXIpKSB7CisgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2RlKGNhdGVnb3J5LnZhbHVlKCks
IG9wLCBXVEZNb3ZlKHZhbHVlcykpKTsKK30KKwordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCit7CisgICAgQVNTRVJU
KG9wID09IENhbGNPcGVyYXRvcjo6QWRkIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkp
OworCisgICAgYXV0byBoYXNDaGlsZFdpdGhPcGVyYXRvciA9IFsmXSAoQ2FsY09wZXJhdG9yIG9w
KSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9OworCisgICAgaWYgKCFoYXNDaGlsZFdpdGhPcGVyYXRvcihvcCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3
Q2hpbGRyZW47CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAg
aWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewor
ICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9k
ZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
VG9Nb3ZlIDogY2hpbGRyZW4pCisgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdU
Rk1vdmUoY2hpbGRUb01vdmUpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXdDaGls
ZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOworICAgIH0KKyAgICAKKyAgICBuZXdDaGlsZHJl
bi5zaHJpbmtUb0ZpdCgpOworICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsK
K30KKworYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29tYmluZUFsbENoaWxkcmVuKCkg
Y29uc3QKK3sKKyAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG1fY2hpbGRy
ZW5bMF0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGZpcnN0VW5pdFR5cGUg
PSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7CisgICAgYXV0byBmaXJzdENhdGVnb3J5
ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1fY2hpbGRyZW5bMF0tPnByaW1p
dGl2ZVR5cGUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jaGlsZHJlbi5z
aXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBub2RlID0gbV9jaGlsZHJlbltpXTsKKworICAg
ICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbm9kZVVuaXRUeXBlID0gbm9kZS0+cHJp
bWl0aXZlVHlwZSgpOworICAgICAgICBhdXRvIG5vZGVDYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0
ZWdvcnlGb3JDb21iaW5hdGlvbihub2RlVW5pdFR5cGUpOworCisgICAgICAgIGlmIChub2RlQ2F0
ZWdvcnkgIT0gZmlyc3RDYXRlZ29yeSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAobm9kZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyICYmIG5v
ZGVVbml0VHlwZSAhPSBmaXJzdFVuaXRUeXBlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAKKyAgICAgICAgaWYgKCFoYXNEb3VibGVWYWx1ZShub2RlVW5pdFR5cGUpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5lQ2hpbGRyZW4oKQoreworICAgIGlmICht
X2NoaWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChzaG91bGRT
b3J0Q2hpbGRyZW4oKSkgeworICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy12YWx1ZXMtNC8jc29ydC1hLWNhbGN1bGF0aW9ucy1jaGlsZHJlbj4KKyAgICAgICAgc3RkOjpz
dGFibGVfc29ydChtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRyZW4uZW5kKCksIFtdKGNvbnN0
IGF1dG8mIGZpcnN0LCBjb25zdCBhdXRvJiBzZWNvbmQpIHsKKyAgICAgICAgICAgIC8vIFNvcnQg
b3JkZXI6IG51bWJlciwgcGVyY2VudGFnZSwgZGltZW5zaW9uLCBvdGhlci4KKyAgICAgICAgICAg
IFNvcnRpbmdDYXRlZ29yeSBmaXJzdENhdGVnb3J5ID0gc29ydGluZ0NhdGVnb3J5KGZpcnN0Lmdl
dCgpKTsKKyAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBzZWNvbmRDYXRlZ29yeSA9IHNvcnRp
bmdDYXRlZ29yeShzZWNvbmQuZ2V0KCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
Zmlyc3RDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiAmJiBzZWNvbmRDYXRl
Z29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbikgeworICAgICAgICAgICAgICAgIC8v
IElmIG5vZGVzIGNvbnRhaW5zIGFueSBkaW1lbnNpb25zLCByZW1vdmUgdGhlbSBmcm9tIG5vZGVz
LCBzb3J0IHRoZW0gYnkgdGhlaXIgdW5pdHMsIGFuZCBhcHBlbmQgdGhlbSB0byByZXQuCisgICAg
ICAgICAgICAgICAgYXV0byBmaXJzdFVuaXRTdHJpbmcgPSBDU1NQcmltaXRpdmVWYWx1ZTo6dW5p
dFR5cGVTdHJpbmcoZmlyc3QtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgICAgICAgICAgICAgYXV0
byBzZWNvbmRVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBlU3RyaW5nKHNl
Y29uZC0+cHJpbWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gY29kZVBvaW50
Q29tcGFyZUxlc3NUaGFuKGZpcnN0VW5pdFN0cmluZywgc2Vjb25kVW5pdFN0cmluZyk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZmly
c3RDYXRlZ29yeSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2Vjb25kQ2F0ZWdvcnkpOworICAg
ICAgICB9KTsKKworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJwb3N0
LXNvcnQ6ICIgPDwgKnRoaXMpOworICAgIH0KKworICAgIGlmIChjYWxjT3BlcmF0b3IoKSA9PSBD
YWxjT3BlcmF0b3I6OkFkZCkgeworICAgICAgICAvLyBGb3IgZWFjaCBzZXQgb2Ygcm9vdOKAmXMg
Y2hpbGRyZW4gdGhhdCBhcmUgbnVtZXJpYyB2YWx1ZXMgd2l0aCBpZGVudGljYWwgdW5pdHMsCisg
ICAgICAgIC8vIHJlbW92ZSB0aG9zZSBjaGlsZHJlbiBhbmQgcmVwbGFjZSB0aGVtIHdpdGggYSBz
aW5nbGUgbnVtZXJpYyB2YWx1ZSBjb250YWluaW5nCisgICAgICAgIC8vIHRoZSBzdW0gb2YgdGhl
IHJlbW92ZWQgbm9kZXMsIGFuZCB3aXRoIHRoZSBzYW1lIHVuaXQuCisgICAgICAgIFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47CisgICAgICAgIG5ld0NoaWxk
cmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOworICAgICAgICBu
ZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlblswXS5jb3B5UmVmKCkpOworCisg
ICAgICAgIENTU1VuaXRUeXBlIHByZXZpb3VzVHlwZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21iaW5h
dGlvbihuZXdDaGlsZHJlblswXS5nZXQoKSk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8mIGN1cnJl
bnROb2RlID0gbV9jaGlsZHJlbltpXTsKKyAgICAgICAgICAgIENTU1VuaXRUeXBlIGN1cnJlbnRU
eXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlLmdldCgpKTsKKwor
ICAgICAgICAgICAgYXV0byBjb252ZXJzaW9uVHlwZSA9IGNvbnZlcnNpb25Ub0FkZFZhbHVlc1dp
dGhUeXBlcyhwcmV2aW91c1R5cGUsIGN1cnJlbnRUeXBlKTsKKyAgICAgICAgICAgIGlmIChjb252
ZXJzaW9uVHlwZSAhPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6
SW52YWxpZCkgeworICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuYWRkKGRvd25jYXN0PENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KGN1cnJlbnROb2RlLmdldCgpKSwgY29udmVyc2lvblR5cGUpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwcmV2
aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24oY3VycmVudE5vZGUpOworICAg
ICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKGN1cnJlbnROb2RlLmNvcHlSZWYo
KSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0
KCk7CisgICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmIChjYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5KSB7CisgICAgICAgIC8vIElmIHJvb3QgaGFzIG11bHRpcGxlIGNoaWxkcmVuIHRo
YXQgYXJlIG51bWJlcnMgKG5vdCBwZXJjZW50YWdlcyBvciBkaW1lbnNpb25zKSwKKyAgICAgICAg
Ly8gcmVtb3ZlIHRoZW0gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xlIG51bWJlciBjb250
YWluaW5nIHRoZSBwcm9kdWN0IG9mIHRoZSByZW1vdmVkIG5vZGVzLgorICAgICAgICBkb3VibGUg
bXVsdGlwbGllciA9IDE7CisKKyAgICAgICAgLy8gU29ydGluZyB3aWxsIGhhdmUgcHV0IHRoZSBu
dW1iZXIgbm9kZXMgZmlyc3QuCisgICAgICAgIHVuc2lnbmVkIGxlYWRpbmdOdW1iZXJOb2RlQ291
bnQgPSAwOworICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2NoaWxkcmVuKSB7CisgICAgICAg
ICAgICBhdXRvIG5vZGVUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG5vZGUuZ2V0
KCkpOworICAgICAgICAgICAgaWYgKG5vZGVUeXBlICE9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgICAgICBtdWx0
aXBsaWVyICo9IG5vZGUtPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKKyAg
ICAgICAgICAgICsrbGVhZGluZ051bWJlck5vZGVDb3VudDsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsK
KyAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuLnNp
emUoKSk7CisgICAgICAgIAorICAgICAgICAvLyBJZiByb290IGNvbnRhaW5zIG9ubHkgdHdvIGNo
aWxkcmVuLCBvbmUgb2Ygd2hpY2ggaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRhZ2Ugb3IgZGlt
ZW5zaW9uKSBhbmQgdGhlIG90aGVyIG9mCisgICAgICAgIC8vIHdoaWNoIGlzIGEgU3VtIHdob3Nl
IGNoaWxkcmVuIGFyZSBhbGwgbnVtZXJpYyB2YWx1ZXMsIG11bHRpcGx5IGFsbCBvZiB0aGUgU3Vt
4oCZcyBjaGlsZHJlbiBieSB0aGUgbnVtYmVyLCB0aGVuCisgICAgICAgIC8vIHJldHVybiB0aGUg
U3VtLgorICAgICAgICAvLyBUaGUgU3VtJ3MgY2hpbGRyZW4gc2ltcGxpZmljYXRpb24gd2lsbCBo
YXZlIGhhcHBlbmVkIGFscmVhZHkuCisgICAgICAgIGJvb2wgZGlkTXVsdGlwbHkgPSBmYWxzZTsK
KyAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQgJiYgbV9jaGlsZHJlbi5zaXplKCkg
LSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID09IDEpIHsKKyAgICAgICAgICAgIGF1dG8gbXVsdGlw
bGljYW5kQ2F0ZWdvcnkgPSBjYWxjVW5pdENhdGVnb3J5KHByaW1pdGl2ZVR5cGVGb3JDb21iaW5h
dGlvbihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkpOworICAgICAgICAgICAgaWYgKG11bHRpcGxp
Y2FuZENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7CisgICAgICAgICAg
ICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW4ubGFzdCgpLmNvcHlS
ZWYoKSk7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZT4obmV3Q2hpbGRyZW5bMF0uZ2V0KCkpLm11bHRpcGx5KG11bHRpcGxpZXIpOworICAgICAgICAg
ICAgICAgIGRpZE11bHRpcGx5ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKSAmJiBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmNhbGNPcGVyYXRv
cigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg
bXVsdGlwbHlpbmcgd2l0aCBhbm90aGVyIG9wZXJhdGlvbiB0aGF0IGlzIGFuIGFkZGl0aW9uIGFu
ZCBhbGwgdGhlIGFkZGVkIGNoaWxkcmVuCisgICAgICAgICAgICAgICAgLy8gYXJlIHBlcmNlbnRh
Z2VzIG9yIGRpbWVuc2lvbnMsIHdlIHNob3VsZCBtdWx0aXBseSBlYWNoIGNoaWxkIGFuZCBtYWtl
IHRoaXMgZXhwcmVzc2lvbiBhbgorICAgICAgICAgICAgICAgIC8vIGFkZGl0aW9uLgorICAgICAg
ICAgICAgICAgIGF1dG8gYWxsQ2hpbGRyZW5BcmVQcmltaXRpdmVWYWx1ZXMgPSBbXShjb25zdCBW
ZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbikgLT4gYm9vbAorICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNo
aWxkcmVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU+KGNoaWxkLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgIGF1dG8m
IGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFz
dCgpLmdldCgpKS5jaGlsZHJlbigpOworICAgICAgICAgICAgICAgIGlmIChhbGxDaGlsZHJlbkFy
ZVByaW1pdGl2ZVZhbHVlcyhjaGlsZHJlbikpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXdDaGls
ZHJlbi5hcHBlbmQoY2hpbGQuY29weVJlZigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRv
d25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQo
KSkubXVsdGlwbHkobXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgbV9vcGVyYXRvciA9IENhbGNPcGVyYXRvcjo6QWRkOworICAgICAgICAgICAg
ICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkaWRNdWx0aXBseSkgeworICAgICAgICAg
ICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQpIHsKKyAgICAgICAgICAgICAgICBhdXRvIG11
bHRpcGxpZXJOb2RlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUobXVsdGlwbGllciwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKTsK
KyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShtdWx0
aXBsaWVyTm9kZSkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50OyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkK
KyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlbltp
XS5jb3B5UmVmKCkpOworICAgICAgICB9CisKKyAgICAgICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9G
aXQoKTsKKyAgICAgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworICAgIH0K
KworICAgIGlmIChpc01pbk9yTWF4Tm9kZSgpICYmIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigpKSB7
CisgICAgICAgIGF1dG8gY29tYmluZWRVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2
ZVR5cGUoKTsKKyAgICAgICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JD
b21iaW5hdGlvbihjb21iaW5lZFVuaXRUeXBlKTsKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQorICAgICAgICAgICAgY29tYmluZWRVbml0VHlwZSA9
IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRlZ29yeSk7CisKKyAg
ICAgICAgZG91YmxlIHJlc29sdmVkVmFsdWUgPSBkb3VibGVWYWx1ZShjb21iaW5lZFVuaXRUeXBl
KTsKKyAgICAgICAgYXV0byBuZXdDaGlsZCA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNy
ZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc29sdmVkVmFsdWUsIGNvbWJpbmVkVW5p
dFR5cGUpKTsKKworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7CisgICAgICAgIG1fY2hpbGRy
ZW4uYXBwZW5kKFdURk1vdmUobmV3Q2hpbGQpKTsKKyAgICB9Cit9CisKKy8vIGh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBsaWZ5LWEtY2FsY3VsYXRpb24tdHJlZQor
CitSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxp
ZnkoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSkKK3sKKyAgICByZXR1cm4g
c2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShyb290Tm9kZSksIDApOworfQorCitSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnlSZWN1cnNpdmUo
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSwgaW50IGRlcHRoKQoreworICAg
IGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8m
IG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUu
Z2V0KCkpOworICAgICAgICAKKyAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2Rl
LmNoaWxkcmVuKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjaGlsZHJlbi5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBjaGlsZCA9IGNoaWxkcmVuW2ldLmNvcHlS
ZWYoKTsKKyAgICAgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1v
dmUoY2hpbGQpLCBkZXB0aCArIDEpOworICAgICAgICAgICAgaWYgKG5ld05vZGUucHRyKCkgIT0g
Y2hpbGRyZW5baV0ucHRyKCkpCisgICAgICAgICAgICAgICAgY2hpbGRyZW5baV0gPSBXVEZNb3Zl
KG5ld05vZGUpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjTmVnYXRlTm9k
ZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1ND
YWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICBSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBjaGlsZCA9IG5lZ2F0ZU5vZGUuY2hpbGQoKTsKKyAgICAgICAgYXV0byBuZXdO
b2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7CisgICAg
ICAgIGlmIChuZXdOb2RlLnB0cigpICE9ICZuZWdhdGVOb2RlLmNoaWxkKCkpCisgICAgICAgICAg
ICBuZWdhdGVOb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOworICAgIH0gZWxzZSBpZiAo
aXM8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBpbnZlcnRO
b2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgpKTsKKyAgICAg
ICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hpbGQgPSBpbnZlcnROb2RlLmNoaWxkKCk7
CisgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1vdmUoY2hpbGQp
LCBkZXB0aCArIDEpOworICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSAmaW52ZXJ0Tm9kZS5j
aGlsZCgpKQorICAgICAgICAgICAgaW52ZXJ0Tm9kZS5zZXRDaGlsZChXVEZNb3ZlKG5ld05vZGUp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gc2ltcGxpZnlOb2RlKFdURk1vdmUocm9vdE5vZGUpLCBk
ZXB0aCk7Cit9CisKK1JlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25O
b2RlOjpzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSwg
aW50IGRlcHRoKQoreworICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290
Tm9kZSkpIHsKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhIHBlcmNlbnRhZ2UgdGhhdCB3aWxsIGJl
IHJlc29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSwgYW5kIHRoZXJlIGlzIGVub3VnaCBpbmZv
cm1hdGlvbgorICAgICAgICAvLyBhdmFpbGFibGUgdG8gcmVzb2x2ZSBpdCwgZG8gc28sIGFuZCBl
eHByZXNzIHRoZSByZXN1bHRpbmcgbnVtZXJpYyB2YWx1ZSBpbiB0aGUgYXBwcm9wcmlhdGUgY2Fu
b25pY2FsCisgICAgICAgIC8vIHVuaXQuIFJldHVybiB0aGUgdmFsdWUuCisKKyAgICAgICAgLy8g
SWYgcm9vdCBpcyBhIGRpbWVuc2lvbiB0aGF0IGlzIG5vdCBleHByZXNzZWQgaW4gaXRzIGNhbm9u
aWNhbCB1bml0LCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uCisgICAgICAgIC8vIGF2
YWlsYWJsZSB0byBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwgdW5pdCwgZG8gc28sIGFuZCBy
ZXR1cm4gdGhlIHZhbHVlLgorICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZU5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZS5nZXQoKSk7CisgICAgICAg
IHByaW1pdGl2ZVZhbHVlTm9kZS5jYW5vbmljYWxpemVVbml0KCk7CisgICAgICAgIHJldHVybiBX
VEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICAvLyBJZiByb290IGlzIGFuIG9wZXJhdG9y
IG5vZGUgdGhhdOKAmXMgbm90IG9uZSBvZiB0aGUgY2FsYy1vcGVyYXRvciBub2RlcywgYW5kIGFs
bCBvZiBpdHMgY2hpbGRyZW4gYXJlIG51bWVyaWMgdmFsdWVzCisgICAgLy8gd2l0aCBlbm91Z2gg
aW5mb3JtYXRpb24gdG8gY29tcHV0ZWQgdGhlIG9wZXJhdGlvbiByb290IHJlcHJlc2VudHMsIHJl
dHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgcm9vdOKAmXMgb3BlcmF0aW9uCisgICAgLy8gdXNp
bmcgaXRzIGNoaWxkcmVuLCBleHByZXNzZWQgaW4gdGhlIHJlc3VsdOKAmXMgY2Fub25pY2FsIHVu
aXQuCisgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSkpIHsKKyAgICAg
ICAgYXV0byYgY2FsY09wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9k
ZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICAvLyBEb24ndCBzaW1wbGlmeSBhdCB0aGUgcm9v
dCwgb3RoZXJ3aXNlIHdlIGxvc2UgdHJhY2sgb2YgdGhlIG9wZXJhdGlvbiBmb3Igc2VyaWFsaXph
dGlvbi4KKyAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCkuc2l6ZSgpID09
IDEgJiYgZGVwdGgpCisgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjYWxjT3BlcmF0aW9uTm9k
ZS5jaGlsZHJlbigpWzBdKTsKKyAgICAgICAgCisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9k
ZS5pc0NhbGNTdW1Ob2RlKCkpIHsKKyAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmhvaXN0
Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpBZGQpOworICAgICAgICAgICAgY2Fs
Y09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgeworICAgICAgICAgICAg
Y2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5KTsKKyAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJpbmVDaGlsZHJl
bigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUu
aXNNaW5Pck1heE5vZGUoKSkKKyAgICAgICAgICAgIGNhbGNPcGVyYXRpb25Ob2RlLmNvbWJpbmVD
aGlsZHJlbigpOworCisgICAgICAgIC8vIElmIG9ubHkgb25lIGNoaWxkIHJlbWFpbnMsIHJldHVy
biB0aGUgY2hpbGQgKGV4Y2VwdCBhdCB0aGUgcm9vdCkuCisgICAgICAgIGF1dG8gc2hvdWxkQ29t
YmluZVBhcmVudFdpdGhPbmx5Q2hpbGQgPSBbXShjb25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSYg
cGFyZW50LCBpbnQgZGVwdGgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnQuY2hp
bGRyZW4oKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgICAgIC8vIEFsd2F5cyBzaW1wbGlmeSBiZWxvdyB0aGUgcm9vdC4KKyAgICAgICAgICAg
IGlmIChkZXB0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAg
Ly8gQXQgdGhlIHJvb3QsIHByZXNlcnZlIHRoZSByb290IGZ1bmN0aW9uIGJ5IG9ubHkgbWVyZ2lu
ZyBub2RlcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLgorICAgICAgICAgICAgYXV0byYgY2hpbGQg
PSBwYXJlbnQuY2hpbGRyZW4oKS5maXJzdCgpOworICAgICAgICAgICAgaWYgKCFpczxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4oY2hpbGQpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICAgICAgYXV0byBwYXJlbnRGdW5jdGlvbiA9IGZ1bmN0aW9uRnJvbU9wZXJhdG9yKHBh
cmVudC5jYWxjT3BlcmF0b3IoKSk7CisgICAgICAgICAgICBhdXRvIGNoaWxkRnVuY3Rpb24gPSBm
dW5jdGlvbkZyb21PcGVyYXRvcihkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQu
Z2V0KCkpLmNhbGNPcGVyYXRvcigpKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZEZ1bmN0aW9u
ID09IHBhcmVudEZ1bmN0aW9uOworICAgICAgICB9OworCisgICAgICAgIGlmIChzaG91bGRDb21i
aW5lUGFyZW50V2l0aE9ubHlDaGlsZChjYWxjT3BlcmF0aW9uTm9kZSwgZGVwdGgpKQorICAgICAg
ICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKS5maXJzdCgp
KTsKKworICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgaWYg
KGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgY2hpbGRO
b2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlLmdldCgpKS5jaGlsZCgp
OworICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWVyaWMgdmFsdWUsIHJldHVy
biBhbiBlcXVpdmFsZW50IG51bWVyaWMgdmFsdWUsIGJ1dCB3aXRoIHRoZSB2YWx1ZSBuZWdhdGVk
ICgwIC0gdmFsdWUpLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4o
Y2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5v
ZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkubmVnYXRlKCk7CisgICAgICAgICAgICByZXR1cm4g
Y2hpbGROb2RlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBJZiByb2904oCZcyBj
aGlsZCBpcyBhIE5lZ2F0ZSBub2RlLCByZXR1cm4gdGhlIGNoaWxk4oCZcyBjaGlsZC4KKyAgICAg
ICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpKQorICAgICAgICAgICAgcmV0
dXJuIGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUpLmNoaWxkKCk7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgaWYg
KGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgY2hpbGRO
b2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlLmdldCgpKS5jaGlsZCgp
OworICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51bWJlciAobm90IGEgcGVyY2Vu
dGFnZSBvciBkaW1lbnNpb24pIHJldHVybiB0aGUgcmVjaXByb2NhbCBvZiB0aGUgY2hpbGTigJlz
IHZhbHVlLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGRO
b2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpLmlz
TnVtZXJpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KGNoaWxkTm9kZSkuaW52ZXJ0KCk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGRO
b2RlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYW4gSW52
ZXJ0IG5vZGUsIHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgorICAgICAgICBpZiAoaXM8Q1NT
Q2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8
Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsKKworICAgICAgICByZXR1cm4g
V1RGTW92ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUp
OworfQorCitDU1NVbml0VHlwZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6cHJpbWl0aXZlVHlwZSgp
IGNvbnN0Cit7CisgICAgYXV0byB1bml0Q2F0ZWdvcnkgPSBjYXRlZ29yeSgpOworICAgIHN3aXRj
aCAodW5pdENhdGVnb3J5KSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6
CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRy
ZW4pCisgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TnVtYmVyKTsKKyNlbmRpZgorICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVI7CisKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHsKKyAg
ICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIENTU1Vu
aXRUeXBlOjpDU1NfVU5LTk9XTjsKKworICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0g
MikgeworICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMF0tPmNhdGVnb3J5KCkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVu
WzFdLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBpZiAobV9jaGlsZHJlblsxXS0+Y2F0
ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgfQorICAgICAg
ICBDU1NVbml0VHlwZSBmaXJzdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7
CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgICAgICBp
ZiAoZmlyc3RUeXBlICE9IGNoaWxkLT5wcmltaXRpdmVUeXBlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmlyc3RUeXBlOworICAgIH0KKworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJl
cXVlbmN5OgorICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBtX2NoaWxkcmVuLmZpcnN0KCktPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgcmV0
dXJuIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeSh1bml0Q2F0ZWdvcnkp
OworCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktO
T1dOOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gQ1NTVW5p
dFR5cGU6OkNTU19VTktOT1dOOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKyAgICBub2Rl
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIGZvciAo
YXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIGF1dG8gbm9kZSA9IGNoaWxkLT5j
cmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7CisgICAgICAgIGlmICghbm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBub2Rlcy51bmNoZWNrZWRBcHBl
bmQoV1RGTW92ZShub2RlKSk7CisgICAgfQorCisgICAgLy8gUmV2ZXJzZSB0aGUgb3BlcmF0aW9u
IHdlIGRpZCB3aGVuIGNyZWF0aW5nIHRoaXMgbm9kZSwgcmVjb3ZlcmluZyBhIHN1aXRhYmxlIGRl
c3RpbmF0aW9uIGNhdGVnb3J5IGZvciBvdGhlcndpc2UtYW1iaWd1b3VzIG1pbi9tYXgvY2xhbXAg
bm9kZXMuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2F0ZWdvcnkgaXMgcmVhbGx5IG9ubHkgZ29v
ZCBlbm91Z2ggZm9yIHRoYXQgcHVycG9zZSBhbmQgaXMgbm90IGFjY3VyYXRlIGZvciBvdGhlciBu
b2RlIHR5cGVzOyB3ZSBjb3VsZCB1c2UgYSBib29sZWFuIGluc3RlYWQuCisgICAgYXV0byBkZXN0
aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgaWYgKGNh
dGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkKKyAgICAgICAg
ZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDsKKyAgICBl
bHNlIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIp
CisgICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXI7CisKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4oV1RG
TW92ZShub2RlcyksIG1fb3BlcmF0b3IsIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworfQorCitkb3Vi
bGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVuaXRUeXBl
KSBjb25zdAoreworICAgIGJvb2wgYWxsb3dOdW1iZXJzID0gY2FsY09wZXJhdG9yKCkgPT0gQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseTsKKworICAgIHJldHVybiBldmFsdWF0ZShtX2NoaWxkcmVuLm1h
cChbJl0gKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIENTU1VuaXRUeXBlIGNoaWxkVHlwZSA9IHVu
aXRUeXBlOworICAgICAgICBpZiAoYWxsb3dOdW1iZXJzICYmIHVuaXRUeXBlICE9IENTU1VuaXRU
eXBlOjpDU1NfTlVNQkVSICYmIGNoaWxkLT5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTVW5pdFR5cGU6
OkNTU19OVU1CRVIpCisgICAgICAgICAgICBjaGlsZFR5cGUgPSBDU1NVbml0VHlwZTo6Q1NTX05V
TUJFUjsKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5kb3VibGVWYWx1ZShjaGlsZFR5cGUpOworICAg
IH0pKTsKK30KKworZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21wdXRlTGVuZ3RoUHgo
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAoYXV0byYgY2hpbGQpIHsK
KyAgICAgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpOwor
ICAgIH0pKTsKK30KKwordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdENv
bXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBj
b25zdAoreworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICBjaGls
ZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKwor
dm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgY2hpbGQtPmNvbGxlY3RE
aXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQoreworICAgIGF1dG8gc2hvdWxkT3V0
cHV0RW5jbG9zaW5nQ2FsYyA9IFtdKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcm9vdE5v
ZGUpIHsKKyAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSkpIHsK
KyAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4ocm9vdE5vZGUpOworICAgICAgICAgICAgcmV0dXJuIG9wZXJhdGlvbk5vZGUuaXND
YWxjU3VtTm9kZSgpIHx8IG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKTsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KHJvb3RO
b2RlKTsKKyAgICB9OworICAgIAorICAgIGJvb2wgb3V0cHV0Q2FsYyA9IHNob3VsZE91dHB1dEVu
Y2xvc2luZ0NhbGMobm9kZSk7CisgICAgaWYgKG91dHB1dENhbGMpCisgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKCJjYWxjKCIpOworCisgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKG5vZGUsIGJ1aWxk
ZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKKworICAgIGlmIChvdXRwdXRDYWxjKQorICAgICAg
ICBidWlsZGVyLmFwcGVuZCgnKScpOworfQorCitzdGF0aWMgY29uc3QgY2hhciogZnVuY3Rpb25Q
cmVmaXhGb3JPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgewor
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRy
YWN0OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKKyAgICBjYXNlIENhbGNPcGVy
YXRvcjo6RGl2aWRlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuICIiOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHJldHVybiAibWluKCI7CisgICAg
Y2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogcmV0dXJuICJtYXgoIjsKKyAgICBjYXNlIENhbGNPcGVy
YXRvcjo6Q2xhbXA6IHJldHVybiAiY2xhbXAoIjsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICIi
OworfQorCisvLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jc2VyaWFs
aXplLWEtY2FsY3VsYXRpb24tdHJlZT4KK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxk
Q1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIFN0cmlu
Z0J1aWxkZXImIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zIHBhcmVucykKK3sKKyAgICAvLyBJZiBy
b290IGlzIGEgbnVtZXJpYyB2YWx1ZSwgb3IgYSBub24tbWF0aCBmdW5jdGlvbiwgc2VyaWFsaXpl
IHJvb3QgcGVyIHRoZSBub3JtYWwgcnVsZXMgZm9yIGl0IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4K
KyAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpIHsKKyAgICAgICAg
YXV0byYgdmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9k
ZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlTm9kZS5jdXN0b21DU1NUZXh0KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2Rl
Pihub2RlKSkgeworICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KG5vZGUpOworCisgICAgICAgIGlmIChvcGVyYXRpb25Ob2RlLmlzQ2Fs
Y1N1bU5vZGUoKSkgeworICAgICAgICAgICAgLy8gSWYgcm9vdCBpcyBhIFN1bSBub2RlLCBsZXQg
cyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIuCisgICAgICAgICAgICBpZiAo
cGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgIC8vIFNpbXBsaWZpY2F0aW9uIGFscmVhZHkg
c29ydGVkIGNoaWxkcmVuLgorICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25O
b2RlLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpKTsKKyAg
ICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBjaGlsZCwgYW5kIGFwcGVuZCBp
dCB0byBzLgorICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0
KCksIGJ1aWxkZXIpOworCisgICAgICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBvZiByb290IGJl
eW9uZCB0aGUgZmlyc3Q6CisgICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIE5lZ2F0ZSBub2Rl
LCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIE5lZ2F0ZeKAmXMgY2hpbGQg
YW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBh
IG5lZ2F0aXZlIG51bWVyaWMgdmFsdWUsIGFwcGVuZCAiIC0gIiB0byBzLCB0aGVuIHNlcmlhbGl6
ZSB0aGUgbmVnYXRpb24gb2YgY2hpbGQgYXMgbm9ybWFsIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0
byBzLgorICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhcHBlbmQgIiArICIgdG8gcywgdGhlbiBz
ZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlmIChp
czxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgLSAiKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJz
aXZlKGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZC5nZXQoKSkuY2hpbGQoKSwgYnVp
bGRlcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlTm9kZS5pc05lZ2F0
aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgLSAiKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0aGUgbmVnYXRpb24gb2YgY2hp
bGQuCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuaXRUeXBlID0gcHJpbWl0aXZlVmFs
dWVOb2RlLnZhbHVlKCkucHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnVpbGRlci5hcHBlbmQoMCAtIHByaW1pdGl2ZVZhbHVlTm9kZS52YWx1ZSgpLmRvdWJsZVZhbHVl
KCksIENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyh1bml0VHlwZSkpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoIiArICIpOworICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGls
ZCwgYnVpbGRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChwYXJlbnMgPT0g
R3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
JyknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkgeworICAgICAgICAgICAgLy8g
SWYgcm9vdCBpcyBhIFByb2R1Y3Qgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNv
bnRhaW5pbmcgIigiLgorICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6
SW5jbHVkZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKCcpOworCisgICAgICAg
ICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBjaGlsZHJlbi4KKyAgICAgICAg
ICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOworICAgICAgICAg
ICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICAvLyBTZXJpYWxpemUgcm9v
dOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4KKyAgICAgICAgICAgIGJ1aWxk
Q1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyKTsKKworICAgICAgICAg
ICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhlIGZpcnN0OgorICAgICAgICAg
ICAgLy8gSWYgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUsIGFwcGVuZCAiIC8gIiB0byBzLCB0aGVu
IHNlcmlhbGl6ZSB0aGUgSW52ZXJ04oCZcyBjaGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8g
cy4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBwZW5kICIgKiAiIHRvIHMsIHRoZW4gc2Vy
aWFsaXplIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICAgICAgYXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8
Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgiIC8gIik7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2
ZShkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkKCksIGJ1aWxk
ZXIpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICogIik7CisgICAgICAgICAgICAgICAg
YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSkKKyAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhbnl0aGluZyBidXQgYSBTdW0sIE5lZ2F0
ZSwgUHJvZHVjdCwgb3IgSW52ZXJ0IG5vZGUsIHNlcmlhbGl6ZSBhIG1hdGggZnVuY3Rpb24gZm9y
IHRoZQorICAgICAgICAvLyBmdW5jdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBub2RlIHR5cGUs
IHRyZWF0aW5nIHRoZSBub2Rl4oCZcyBjaGlsZHJlbiBhcyB0aGUgZnVuY3Rpb27igJlzCisgICAg
ICAgIC8vIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbiBhcmd1bWVudHMsIGFuZCByZXR1cm4g
dGhlIHJlc3VsdC4KKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVuY3Rpb25QcmVmaXhGb3JPcGVy
YXRvcihvcGVyYXRpb25Ob2RlLmNhbGNPcGVyYXRvcigpKSk7CisKKyAgICAgICAgYXV0byYgY2hp
bGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgIEFTU0VSVChjaGlsZHJl
bi5zaXplKCkpOworICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3Qo
KSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQpOworCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRy
ZW5baV0sIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpKSB7CisgICAgICAgIGF1
dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4obm9kZSk7CisgICAg
ICAgIC8vIElmIHJvb3QgaXMgYSBOZWdhdGUgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlh
bGx5IGNvbnRhaW5pbmcgIigtMSAqICIuCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCItMSAqIik7
CisgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShuZWdhdGVOb2RlLmNoaWxkKCksIGJ1aWxk
ZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIGlmIChpczxDU1NDYWxjSW52
ZXJ0Tm9kZT4obm9kZSkpIHsKKyAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9IGRvd25jYXN0PENT
U0NhbGNJbnZlcnROb2RlPihub2RlKTsKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhbiBJbnZlcnQg
bm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigxIC8gIi4KKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIjEgLyAiKTsKKyAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJz
aXZlKGludmVydE5vZGUuY2hpbGQoKSwgYnVpbGRlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9
Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0Cit7CisgICAgdHMgPDwgImNhbGMgb3BlcmF0aW9uICIgPDwgbV9vcGVyYXRvciA8PCAiIChj
YXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGUgIiA8PCBwcmltaXRpdmVUeXBlKCkg
PDwgIikiOworCisgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBzY29wZSh0cyk7CisgICAgdHMg
PDwgbV9jaGlsZHJlbi5zaXplKCkgPDwgIiBjaGlsZHJlbiI7CisgICAgZm9yIChhdXRvJiBjaGls
ZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0eSgibm9kZSIsIGNoaWxkKTsK
K30KKworYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxzKGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgZXhwKSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gZXhwLnR5cGUoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUm
IG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUmPihleHApOwor
CisgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IG90aGVyLm1fY2hpbGRyZW4uc2l6ZSgpIHx8
IG1fb3BlcmF0b3IgIT0gb3RoZXIubV9vcGVyYXRvcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmICghY29tcGFyZUNTU1ZhbHVlKG1fY2hpbGRyZW5baV0sIG90aGVyLm1fY2hpbGRy
ZW5baV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpldmFsdWF0ZU9wZXJhdG9yKENh
bGNPcGVyYXRvciBvcCwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNoaWxkcmVuKQoreworICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7CisgICAgICAgIGRvdWJs
ZSBzdW0gPSAwOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAg
ICAgICBzdW0gKz0gY2hpbGQ7CisgICAgICAgIHJldHVybiBzdW07CisgICAgfQorICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKKyAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9
PSAyKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC0gY2hpbGRyZW5bMV07CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAgIGRvdWJsZSBwcm9kdWN0ID0gMTsK
KyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAgcHJvZHVj
dCAqPSBjaGlsZDsKKyAgICAgICAgcmV0dXJuIHByb2R1Y3Q7CisgICAgfQorICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMSB8
fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0g
MSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0
X05hTigpOworICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLyBjaGlsZHJlblsxXTsKKyAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWluOiB7CisgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKKyAgICAgICAgZG91YmxlIG1pbmltdW0gPSBjaGlsZHJlblswXTsKKyAgICAgICAgZm9y
IChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBtaW5pbXVtID0gc3RkOjptaW4o
bWluaW11bSwgY2hpbGQpOworICAgICAgICByZXR1cm4gbWluaW11bTsKKyAgICB9CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDogeworICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFO
KCk7CisgICAgICAgIGRvdWJsZSBtYXhpbXVtID0gY2hpbGRyZW5bMF07CisgICAgICAgIGZvciAo
YXV0byBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAgbWF4aW11bSA9IHN0ZDo6bWF4KG1h
eGltdW0sIGNoaWxkKTsKKyAgICAgICAgcmV0dXJuIG1heGltdW07CisgICAgfQorICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpDbGFtcDogeworICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDMp
CisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9O
YU4oKTsKKyAgICAgICAgZG91YmxlIG1pbiA9IGNoaWxkcmVuWzBdOworICAgICAgICBkb3VibGUg
dmFsdWUgPSBjaGlsZHJlblsxXTsKKyAgICAgICAgZG91YmxlIG1heCA9IGNoaWxkcmVuWzJdOwor
ICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4KSk7CisgICAg
fQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlv
bk5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
T3BlcmF0aW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxjT3BlcmF0aW9uTm9kZSBmaW5h
bCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+
IGNyZWF0ZShDYWxjT3BlcmF0b3IsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVm
dFNpZGUsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKTsKKyAgICBz
dGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGVTdW0oVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcyk7CisgICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlUHJvZHVjdChWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+JiYgdmFsdWVzKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25O
b2RlPiBjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yLCBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0
aW9uQ2F0ZWdvcnkpOworCisgICAgc3RhdGljIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNp
bXBsaWZ5KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYpOworCisgICAgc3RhdGljIHZvaWQg
YnVpbGRDU1NUZXh0KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYsIFN0cmluZ0J1aWxkZXIm
KTsKKworICAgIENhbGNPcGVyYXRvciBjYWxjT3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29w
ZXJhdG9yOyB9CisgICAgYm9vbCBpc0NhbGNTdW1Ob2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVy
YXRvciA9PSBDYWxjT3BlcmF0b3I6OkFkZDsgfQorICAgIGJvb2wgaXNDYWxjUHJvZHVjdE5vZGUo
KSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk7IH0K
KyAgICBib29sIGlzTWluT3JNYXhOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBD
YWxjT3BlcmF0b3I6Ok1pbiB8fCBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWF4OyB9Cisg
ICAgYm9vbCBzaG91bGRTb3J0Q2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBpc0NhbGNTdW1Ob2Rl
KCkgfHwgaXNDYWxjUHJvZHVjdE5vZGUoKTsgfQorCisgICAgdm9pZCBob2lzdENoaWxkcmVuV2l0
aE9wZXJhdG9yKENhbGNPcGVyYXRvcik7CisgICAgdm9pZCBjb21iaW5lQ2hpbGRyZW4oKTsKKyAg
ICAKKyAgICBib29sIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNvbnN0OworCisgICAgY29uc3Qg
VmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkcmVuOyB9CisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
PiYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKK3ByaXZhdGU6CisgICAgQ1NT
Q2FsY09wZXJhdGlvbk5vZGUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJh
dG9yIG9wLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkKKyAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUoY2F0ZWdvcnkpCisgICAgICAgICwgbV9vcGVyYXRvcihvcCkKKyAgICB7CisgICAgICAg
IG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKyAgICAgICAgbV9jaGlsZHJl
bi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShsZWZ0U2lkZSkpOworICAgICAgICBtX2NoaWxkcmVu
LnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJpZ2h0U2lkZSkpOworICAgIH0KKworICAgIENTU0Nh
bGNPcGVyYXRpb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENhbGNPcGVyYXRv
ciBvcCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIGNoaWxkcmVuKQorICAg
ICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkKKyAgICAgICAgLCBtX29wZXJh
dG9yKG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpCisgICAgewor
ICAgIH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNPcGVy
YXRpb247IH0KKworICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAg
IHJldHVybiAhZG91YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKTsKKyAgICB9CisKKyAgICBib29s
IGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9u
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKworICAgIENT
U1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgZG91Ymxl
VmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBjb21wdXRlTGVuZ3Ro
UHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1By
b3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFs
OworCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIHN0YXRp
YyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIGdldE51bWJlclNpZGUoQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBsZWZ0U2lkZSwgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUpCisgICAgewor
ICAgICAgICBpZiAobGVmdFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCisgICAgICAgICAgICByZXR1cm4gJmxlZnRTaWRlOworICAgICAgICBpZiAocmlnaHRT
aWRlLmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAg
ICAgcmV0dXJuICZyaWdodFNpZGU7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIGRvdWJsZSBldmFsdWF0ZShjb25zdCBWZWN0b3I8ZG91YmxlPiYgY2hpbGRyZW4pIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZXZhbHVhdGVPcGVyYXRvcihtX29wZXJhdG9yLCBjaGls
ZHJlbik7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBldmFsdWF0ZU9wZXJhdG9yKENhbGNP
cGVyYXRvciwgY29uc3QgVmVjdG9yPGRvdWJsZT4mKTsKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4gc2ltcGxpZnlOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYs
IGludCBkZXB0aCk7CisgICAgc3RhdGljIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNpbXBs
aWZ5UmVjdXJzaXZlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGludCBkZXB0aCk7Cisg
ICAgCisgICAgZW51bSBjbGFzcyBHcm91cGluZ1BhcmVucyB7CisgICAgICAgIE9taXQsCisgICAg
ICAgIEluY2x1ZGUKKyAgICB9OworICAgIHN0YXRpYyB2b2lkIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2
ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmLCBTdHJpbmdCdWlsZGVyJiwgR3JvdXBpbmdQ
YXJlbnMgPSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSk7CisKKyAgICBDYWxjT3BlcmF0b3IgbV9v
cGVyYXRvcjsKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG1fY2hpbGRy
ZW47Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05f
Tk9ERShDU1NDYWxjT3BlcmF0aW9uTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY09wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUu
aCIKKworI2luY2x1ZGUgIkNTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCIKKyNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIK
KyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNz
aW9uTnVtYmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlZjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoV1RG
TW92ZSh2YWx1ZSkpKTsKK30KKworUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShkb3VibGUgdmFsdWUsIENTU1VuaXRUeXBl
IHR5cGUpCit7CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHZhbHVlKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5cGUpKSk7Cit9CisKK1N0cmlu
ZyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gbV92YWx1ZS0+Y3NzVGV4dCgpOworfQorCitDU1NVbml0VHlwZSBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworfQorCitDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkK
KyAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYWxjVW5pdENhdGVnb3J5KHZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkpKQorICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKK3sKK30KKworLy8g
RklYTUU6IFVzZSBjYWxjVW5pdENhdGVnb3J5PworYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjppc051bWVyaWNWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWUtPmlzTGVu
Z3RoKCkgfHwgbV92YWx1ZS0+aXNOdW1iZXIoKSB8fCBtX3ZhbHVlLT5pc1BlcmNlbnRhZ2UoKSB8
fCBtX3ZhbHVlLT5pc0FuZ2xlKCkKKyAgICAgICAgfHwgbV92YWx1ZS0+aXNUaW1lKCkgfHwgbV92
YWx1ZS0+aXNSZXNvbHV0aW9uKCkgfHwgbV92YWx1ZS0+aXNGbGV4KCkgfHwgbV92YWx1ZS0+aXNG
cmVxdWVuY3koKTsKK30KKworYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc05lZ2F0
aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOdW1lcmljVmFsdWUoKSAmJiBtX3ZhbHVlLT5k
b3VibGVWYWx1ZSgpIDwgMC4wOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
Om5lZ2F0ZSgpCit7CisgICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVlKCkpOworICAgIG1fdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuMCAtIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6aW52ZXJ0KCkKK3sKKyAgICBBU1NFUlQoaXNOdW1lcmljVmFsdWUoKSk7CisgICAg
aWYgKCFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpKQorICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCks
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7CisKKyAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZSgxLjAgLyBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3ZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmFkZChj
b25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiBub2RlLCBVbml0Q29udmVyc2lvbiB1bml0
Q29udmVyc2lvbikKK3sKKyAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFsdWUtPnByaW1pdGl2ZVR5
cGUoKTsKKworICAgIHN3aXRjaCAodW5pdENvbnZlcnNpb24pIHsKKyAgICBjYXNlIFVuaXRDb252
ZXJzaW9uOjpJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBVbml0Q29udmVyc2lvbjo6UHJlc2VydmU6CisgICAgICAgIEFTU0VS
VChub2RlLnByaW1pdGl2ZVR5cGUoKSA9PSB2YWx1ZVR5cGUpOworICAgICAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpICsgbm9kZS5k
b3VibGVWYWx1ZSh2YWx1ZVR5cGUpLCB2YWx1ZVR5cGUpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIFVuaXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU6IHsKKyAgICAgICAgYXV0byB2YWx1ZUNh
dGVnb3J5ID0gdW5pdENhdGVnb3J5KHZhbHVlVHlwZSk7CisgICAgICAgIC8vIEZJWE1FOiBJdCdz
IGF3a3dhcmQgdGhhdCBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5KCkgaGFzIHNwZWNpYWwg
aGFuZGxpbmcgZm9yIENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudC4KKyAgICAgICAgYXV0byBjYW5v
bmljYWxUeXBlID0gdmFsdWVDYXRlZ29yeSA9PSBDU1NVbml0Q2F0ZWdvcnk6OlBlcmNlbnQgPyBD
U1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UgOiBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5
KHZhbHVlQ2F0ZWdvcnkpOworICAgICAgICBBU1NFUlQoY2Fub25pY2FsVHlwZSAhPSBDU1NVbml0
VHlwZTo6Q1NTX1VOS05PV04pOworICAgICAgICBkb3VibGUgbGVmdFZhbHVlID0gbV92YWx1ZS0+
ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7CisgICAgICAgIGRvdWJsZSByaWdodFZhbHVlID0g
bm9kZS5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKKyAgICAgICAgbV92YWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVmdFZhbHVlICsgcmlnaHRWYWx1ZSwgY2Fub25pY2FsVHlw
ZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkoZG91YmxlIG11bHRpcGxpZXIpCit7CisgICAgYXV0byB2
YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7CisgICAgQVNTRVJUKGhhc0RvdWJs
ZVZhbHVlKHZhbHVlVHlwZSkpOworICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKHZhbHVlVHlwZSkgKiBtdWx0aXBsaWVyLCB2YWx1ZVR5
cGUpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbnZlcnRUb1VuaXRU
eXBlKENTU1VuaXRUeXBlIHVuaXRUeXBlKQoreworICAgIEFTU0VSVCh1bml0Q2F0ZWdvcnkodW5p
dFR5cGUpID09IHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKTsKKyAgICBk
b3VibGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7CisgICAgbV92
YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmV3VmFsdWUsIHVuaXRUeXBlKTsKK30K
Kwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmljYWxpemVVbml0KCkKK3sK
KyAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1f
dmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgaWYgKGNhdGVnb3J5ID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok90aGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvIGNhbm9uaWNhbFR5
cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOwor
ICAgIGlmIChjYW5vbmljYWxUeXBlID09IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgZG91YmxlIG5ld1ZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFsdWUo
Y2Fub25pY2FsVHlwZSk7CisgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
bmV3VmFsdWUsIGNhbm9uaWNhbFR5cGUpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lv
bihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QK
K3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OdW1i
ZXI+KG1fdmFsdWUtPmZsb2F0VmFsdWUoKSk7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGg6CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3Ro
PihMZW5ndGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lvbkRhdGEpLCBM
ZW5ndGhUeXBlOjpGaXhlZCkpOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6IHsKKyAgICAg
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG1fdmFsdWUtPmNvbnZl
cnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uPihjb252
ZXJzaW9uRGF0YSkpOworICAgIH0KKyAgICAvLyBPbmx5IHR5cGVzIHRoYXQgY291bGQgYmUgcGFy
dCBvZiBhIExlbmd0aCBleHByZXNzaW9uIGNhbiBiZSBjb252ZXJ0ZWQKKyAgICAvLyB0byBhIENh
bGNFeHByZXNzaW9uTm9kZS4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciBtYWtl
cyBubyBzZW5zZSBhcyBhIExlbmd0aC4KKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKKyAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpGcmVxdWVuY3k6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitkb3VibGUgQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Cit7CisgICAg
aWYgKGhhc0RvdWJsZVZhbHVlKHVuaXRUeXBlKSkgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBz
aG91bGQgQVNTRVJUKHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpID09IHVu
aXRDYXRlZ29yeSh1bml0VHlwZSkpLCBidXQgb25seSB3aGVuIGFsbCBjYWxsZXJzIGFyZSBmaXhl
ZCAoZS5nLiB3ZWJraXQub3JnL2IvMjA0ODI2KS4KKyAgICAgICAgaWYgKHVuaXRDYXRlZ29yeSht
X3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpICE9IHVuaXRDYXRlZ29yeSh1bml0VHlwZSkpIHsKKyAg
ICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNhbGxpbmcgZG91Ymxl
VmFsdWUoKSB3aXRoIHVuaXQgIiA8PCB1bml0VHlwZSA8PCAiIG9uIGEgbm9kZSBvZiB1bml0IHR5
cGUgIiA8PCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPDwgIiB3aGljaCBpcyBpbmNvbXBhdGli
bGUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7CisgICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgICAgIHJldHVybiBtX3ZhbHVl
LT5jb21wdXRlTGVuZ3RoPGRvdWJsZT4oY29udmVyc2lvbkRhdGEpOworICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlcjoKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7CisgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVw
ZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBt
X3ZhbHVlLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwor
fQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RSb290Q29t
cHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNv
bnN0Cit7CisgICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5k
ZW5jaWVzKHZhbHVlcyk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNa
ZXJvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdmFsdWUtPmRvdWJsZVZhbHVlKCk7Cit9CisK
K2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZXF1YWxzKGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBl
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWUo
bV92YWx1ZSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSY+KG90
aGVyKS5tX3ZhbHVlKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICJ2YWx1ZSAiIDw8IG1fdmFsdWUt
PmN1c3RvbUNTU1RleHQoKSA8PCAiIChjYXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5
cGU6ICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsKK30KKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJpbWl0aXZlVmFsdWU7CitjbGFzcyBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhOworCitlbnVtIENTU1Byb3BlcnR5SUQgOiB1aW50MTZfdDsKKwor
Y2xhc3MgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4gY3JlYXRlKFJlZjxDU1NQcmlt
aXRpdmVWYWx1ZT4mJik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NVbml0VHlwZSk7CisKKyAgICBTdHJpbmcgY3Vz
dG9tQ1NTVGV4dCgpIGNvbnN0OworCisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNv
bnN0IGZpbmFsOworCisgICAgYm9vbCBpc051bWVyaWNWYWx1ZSgpIGNvbnN0OworICAgIGJvb2wg
aXNOZWdhdGl2ZSgpIGNvbnN0OworCisgICAgdm9pZCBuZWdhdGUoKTsKKyAgICB2b2lkIGludmVy
dCgpOworCisgICAgZW51bSBjbGFzcyBVbml0Q29udmVyc2lvbiB7CisgICAgICAgIEludmFsaWQs
CisgICAgICAgIFByZXNlcnZlLAorICAgICAgICBDYW5vbmljYWxpemUKKyAgICB9OworICAgIHZv
aWQgYWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmLCBVbml0Q29udmVyc2lvbiA9
IFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZSk7CisgICAgdm9pZCBtdWx0aXBseShkb3VibGUpOwor
CisgICAgdm9pZCBjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlwZSk7CisgICAgdm9pZCBjYW5v
bmljYWxpemVVbml0KCk7CisKKyAgICBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc1pl
cm8oKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUmIG90aGVyKSBjb25zdCBmaW5hbDsKKyAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFsdWU7IH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxD
YWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NT
VW5pdFR5cGUpIGNvbnN0IGZpbmFsOworCisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOworCisgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworcHJpdmF0ZToKKyAgICBleHBs
aWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7
CisKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdmFsdWU7Cit9OworCit9CisKK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBl
OjpDc3NDYWxjUHJpbWl0aXZlVmFsdWUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNWYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKKworI2luY2x1
ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oIgorI2luY2x1ZGUgIkNTU0NhbGNJbnZl
cnROb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1ND
YWxjT3BlcmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUu
aCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdl
LmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1ZGUgIkNh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkxlbmd0
aC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisj
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWls
ZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1Mo
Y29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKK3N0YXRpYyBS
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgTGVuZ3RoJiwgY29u
c3QgUmVuZGVyU3R5bGUmKTsKKworc3RhdGljIGlubGluZSBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+IGNyZWF0ZUJsZW5kSGFsZihjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlLCBmbG9hdCBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gQ1NTQ2FsY09wZXJh
dGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBjcmVhdGVDU1MobGVuZ3Ro
LCBzdHlsZSksCisgICAgICAgIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByb2dyZXNzLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikp
KTsKK30KKworc3RhdGljIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gY3JlYXRl
Q1NTKGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5v
ZGVzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgVmVjdG9yPFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CisgICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNp
dHkobm9kZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2RlcykgeworICAgICAg
ICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1MoKm5vZGUsIHN0eWxlKTsKKyAgICAgICAgaWYgKCFj
c3NOb2RlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHZhbHVlcy51bmNoZWNrZWRB
cHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHZhbHVl
czsKK30KKworc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhj
b25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkK
K3sKKyAgICBzd2l0Y2ggKG5vZGUudHlwZSgpKSB7CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpOdW1iZXI6IHsKKyAgICAgICAgZmxvYXQgdmFsdWUgPSBkb3duY2FzdDxDYWxjRXhw
cmVzc2lvbk51bWJlcj4obm9kZSkudmFsdWUoKTsgLy8gZG91YmxlPworICAgICAgICByZXR1cm4g
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7CisgICAgfQorICAgIGNhc2UgQ2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoOiB7CisgICAgICAgIGF1dG8mIGxlbmd0aCA9IGRv
d25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihub2RlKS5sZW5ndGgoKTsKKyAgICAgICAgaWYg
KCFsZW5ndGguaXNQZXJjZW50KCkgJiYgbGVuZ3RoLmlzWmVybygpKQorICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBjcmVhdGVDU1MobGVuZ3RoLCBzdHlsZSk7Cisg
ICAgfQorCisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbjogeworICAg
ICAgICBhdXRvIGNoaWxkTm9kZSA9IGNyZWF0ZUNTUygqZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25O
ZWdhdGlvbj4obm9kZSkuY2hpbGQoKSwgc3R5bGUpOworICAgICAgICBpZiAoIWNoaWxkTm9kZSkK
KyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ1NTQ2FsY05lZ2F0
ZU5vZGU6OmNyZWF0ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorICAgIGNh
c2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uOiB7CisgICAgICAgIGF1dG8gY2hp
bGROb2RlID0gY3JlYXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4obm9k
ZSkuY2hpbGQoKSwgc3R5bGUpOworICAgICAgICBpZiAoIWNoaWxkTm9kZSkKKyAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0
ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorICAgIGNhc2UgQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uOiB7CisgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUg
PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4obm9kZSk7CisgICAgICAgIGF1dG8m
IG9wZXJhdGlvbkNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOworICAgICAgICBD
YWxjT3BlcmF0b3Igb3AgPSBvcGVyYXRpb25Ob2RlLmdldE9wZXJhdG9yKCk7CisgICAgICAgIAor
ICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsK
KyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4s
IHN0eWxlKTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09
IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2hpbGRyZW5bMF0pOworICAgICAg
ICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShjaGls
ZHJlbikpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDog
eworICAgICAgICAgICAgQVNTRVJUKG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSA9PSAyKTsKKwor
ICAgICAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7Cisg
ICAgICAgICAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcGVyYXRpb25DaGlsZHJl
bi5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIGZpcnN0Q2hpbGQgPSBj
cmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzBdLCBzdHlsZSk7CisgICAgICAgICAgICBhdXRv
IHNlY29uZENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblsxXSwgc3R5bGUpOwor
CisgICAgICAgICAgICBpZiAoIXNlY29uZENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBm
aXJzdENoaWxkOworCisgICAgICAgICAgICBhdXRvIG5lZ2F0ZU5vZGUgPSBDU1NDYWxjTmVnYXRl
Tm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAg
aWYgKCFmaXJzdENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBuZWdhdGVOb2RlOworCisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUobmVnYXRlTm9kZSkpOworCisgICAgICAg
ICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKHZhbHVl
cykpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTogewor
ICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwg
c3R5bGUpOworICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3ZlKGNoaWxkcmVuKSk7CisgICAgICAgIH0KKyAgICAg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogeworICAgICAgICAgICAgQVNTRVJUKG9wZXJh
dGlvbkNoaWxkcmVuLnNpemUoKSA9PSAyKTsKKworICAgICAgICAgICAgVmVjdG9yPFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CisgICAgICAgICAgICB2YWx1ZXMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBhdXRvIGZpcnN0Q2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVu
WzBdLCBzdHlsZSk7CisgICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2hpbGQgPSBjcmVh
dGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7CisgICAgICAgICAgICBpZiAoIXNl
Y29uZENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAg
YXV0byBpbnZlcnROb2RlID0gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZShzZWNvbmRDaGlsZC5y
ZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChmaXJzdENoaWxk
LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChXVEZNb3ZlKGlu
dmVydE5vZGUpKTsKKworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVQcm9kdWN0KGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpKTsKKyAgICAg
ICAgfQorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgorICAgICAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWF4OgorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHsKKyAgICAg
ICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxl
KTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChvcCwgV1RGTW92ZShjaGlsZHJlbiksIG9wZXJhdGlvbk5v
ZGUuZGVzdGluYXRpb25DYXRlZ29yeSgpKTsKKyAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6
OkJsZW5kTGVuZ3RoOiB7CisgICAgICAgIC8vIEZJWE1FOiAoaHR0cDovL3dlYmtpdC5vcmcvYi8x
MjIwMzYpIENyZWF0ZSBhIENTU0NhbGNFeHByZXNzaW9uTm9kZSBlcXVpdmFsZW50IG9mIENhbGNF
eHByZXNzaW9uQmxlbmRMZW5ndGguCisgICAgICAgIGF1dG8mIGJsZW5kID0gZG93bmNhc3Q8Q2Fs
Y0V4cHJlc3Npb25CbGVuZExlbmd0aD4obm9kZSk7CisgICAgICAgIGZsb2F0IHByb2dyZXNzID0g
YmxlbmQucHJvZ3Jlc3MoKTsKKyAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGUoQ2FsY09wZXJhdG9yOjpBZGQsIGNyZWF0ZUJsZW5kSGFsZihibGVuZC5mcm9tKCksIHN0
eWxlLCAxIC0gcHJvZ3Jlc3MpLCBjcmVhdGVCbGVuZEhhbGYoYmxlbmQudG8oKSwgc3R5bGUsIHBy
b2dyZXNzKSk7CisgICAgfQorICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6VW5kZWZp
bmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVD
U1MoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAg
ICBzd2l0Y2ggKGxlbmd0aC50eXBlKCkpIHsKKyAgICBjYXNlIExlbmd0aFR5cGU6OlBlcmNlbnQ6
CisgICAgY2FzZSBMZW5ndGhUeXBlOjpGaXhlZDoKKyAgICAgICAgcmV0dXJuIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGxlbmd0aCwg
c3R5bGUpKTsKKyAgICBjYXNlIExlbmd0aFR5cGU6OkNhbGN1bGF0ZWQ6CisgICAgICAgIHJldHVy
biBjcmVhdGVDU1MobGVuZ3RoLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCksIHN0eWxl
KTsKKyAgICBjYXNlIExlbmd0aFR5cGU6OkF1dG86CisgICAgY2FzZSBMZW5ndGhUeXBlOjpJbnRy
aW5zaWM6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpNaW5JbnRyaW5zaWM6CisgICAgY2FzZSBMZW5n
dGhUeXBlOjpNaW5Db250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6TWF4Q29udGVudDoKKyAg
ICBjYXNlIExlbmd0aFR5cGU6OkZpbGxBdmFpbGFibGU6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpG
aXRDb250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6UmVsYXRpdmU6CisgICAgY2FzZSBMZW5n
dGhUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ1NTQ2FsY1ZhbHVlOjpDU1NDYWxjVmFsdWUoUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBleHByZXNzaW9uLCBib29sIHNob3VsZENsYW1wVG9O
b25OZWdhdGl2ZSkKKyAgICA6IENTU1ZhbHVlKENhbGN1bGF0aW9uQ2xhc3MpCisgICAgLCBtX2V4
cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKKyAgICAsIG1fc2hvdWxkQ2xhbXBUb05vbk5l
Z2F0aXZlKHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSkKK3sKK30KKworQ1NTQ2FsY1ZhbHVlOjp+
Q1NTQ2FsY1ZhbHVlKCkgPSBkZWZhdWx0OworCitDYWxjdWxhdGlvbkNhdGVnb3J5IENTU0NhbGNW
YWx1ZTo6Y2F0ZWdvcnkoKSBjb25zdAoreworICAgIHJldHVybiBtX2V4cHJlc3Npb24tPmNhdGVn
b3J5KCk7Cit9CisKK0NTU1VuaXRUeXBlIENTU0NhbGNWYWx1ZTo6cHJpbWl0aXZlVHlwZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIG1fZXhwcmVzc2lvbi0+cHJpbWl0aXZlVHlwZSgpOworfQorCitS
ZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVl
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAor
eworICAgIHJldHVybiBDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUobV9leHByZXNzaW9uLT5jcmVh
dGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSksIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0
aXZlID8gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgOiBWYWx1ZVJhbmdlOjpBbGwpOworfQorCit2
b2lkIENTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5nZShWYWx1ZVJhbmdlIHJhbmdl
KQoreworICAgIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID0gcmFuZ2UgIT0gVmFsdWVSYW5n
ZTo6QWxsOworfQorCit2b2lkIENTU0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAorewor
ICAgIG1fZXhwcmVzc2lvbi0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMo
dmFsdWVzKTsKK30KKwordm9pZCBDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0
Cit7CisgICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXModmFsdWVzKTsKK30KKworU3RyaW5nIENTU0NhbGNWYWx1ZTo6Y3VzdG9tQ1NTVGV4
dCgpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjpidWlsZENTU1RleHQobV9leHByZXNzaW9uLmdldCgpLCBidWlsZGVyKTsKKyAg
ICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitib29sIENTU0NhbGNWYWx1ZTo6ZXF1
YWxzKGNvbnN0IENTU0NhbGNWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbXBh
cmVDU1NWYWx1ZShtX2V4cHJlc3Npb24sIG90aGVyLm1fZXhwcmVzc2lvbik7Cit9CisKK2lubGlu
ZSBkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91YmxlIHZhbHVl
KSBjb25zdAoreworICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAmJiB2YWx1
ZSA8IDAgPyAwIDogdmFsdWU7Cit9CisKK2RvdWJsZSBDU1NDYWxjVmFsdWU6OmRvdWJsZVZhbHVl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdlKG1fZXhwcmVzc2lv
bi0+ZG91YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKSk7Cit9CisKK2RvdWJsZSBDU1NDYWxjVmFs
dWU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252
ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdlKG1f
ZXhwcmVzc2lvbi0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKSk7Cit9CisKK2Jvb2wg
Q1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihDU1NWYWx1ZUlEIGZ1bmN0aW9uSWQpCit7Cisg
ICAgc3dpdGNoIChmdW5jdGlvbklkKSB7CisgICAgY2FzZSBDU1NWYWx1ZUNhbGM6CisgICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdENhbGM6CisgICAgY2FzZSBDU1NWYWx1ZU1pbjoKKyAgICBjYXNlIENT
U1ZhbHVlTWF4OgorICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ZhbHVlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25z
dAoreworICAgIHRzIDw8IGluZGVudCA8PCAiKCIgPDwgIkNTU0NhbGNWYWx1ZSI7CisKKyAgICBU
ZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKKyAgICBtdWx0aWxpbmVTdHJlYW0uc2V0SW5kZW50
KHRzLmluZGVudCgpICsgMik7CisKKyAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJz
aG91bGQgY2xhbXAgbm9uLW5lZ2F0aXZlIiwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUpOwor
ICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoImV4cHJlc3Npb24iLCBtX2V4cHJlc3Np
b24uZ2V0KCkpOworCisgICAgdHMgPDwgbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKKyAgICB0
cyA8PCAiKVxuIjsKK30KKworUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVh
dGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5z
LCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgcmFu
Z2UpCit7CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNlcihkZXN0aW5hdGlv
bkNhdGVnb3J5KTsKKyAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJzZXIucGFyc2VDYWxjKHRva2Vu
cywgZnVuY3Rpb24pOworICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKGV4cHJlc3Np
b24ucmVsZWFzZU5vbk51bGwoKSwgcmFuZ2UgIT0gVmFsdWVSYW5nZTo6QWxsKSk7CisgICAgTE9H
X1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUgIiA8PCAq
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAorUmVmUHRyPENTU0NhbGNWYWx1
ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgdmFsdWUsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBhdXRvIGV4cHJlc3Npb24gPSBjcmVhdGVD
U1ModmFsdWUuZXhwcmVzc2lvbigpLCBzdHlsZSk7CisgICAgaWYgKCFleHByZXNzaW9uKQorICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc2ltcGxpZmllZEV4cHJlc3Npb24gPSBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgp
KTsKKworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1ZShXVEZNb3Zl
KHNpbXBsaWZpZWRFeHByZXNzaW9uKSwgdmFsdWUuc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkp
KTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjVmFsdWU6OmNy
ZWF0ZSBmcm9tIENhbGN1bGF0aW9uVmFsdWU6ICIgPDwgKnJlc3VsdCk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3Qg
Q1NTQ2FsY1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICB2YWx1ZS5kdW1wKHRzKTsKKyAgICByZXR1cm4g
dHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNWYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYv
Rm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGU7CitjbGFzcyBDU1NQYXJzZXJUb2tlblJhbmdl
OworY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKK2NsYXNzIFJlbmRlclN0eWxlOwor
CitlbnVtIGNsYXNzIENTU1VuaXRUeXBlIDogdWludDhfdDsKK2VudW0gY2xhc3MgQ2FsY3VsYXRp
b25DYXRlZ29yeSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIFZhbHVlUmFuZ2UgOiB1aW50OF90Owor
CitjbGFzcyBDU1NDYWxjVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NTVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlv
biwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGlu
YXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSk7CisgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFs
dWU+IGNyZWF0ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsK
KyAgICB+Q1NTQ2FsY1ZhbHVlKCk7CisKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
KCkgY29uc3Q7CisgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3Q7CisgICAgZG91YmxlIGNv
bXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3Q7Cisg
ICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0OworCisgICAgUmVmPENhbGN1bGF0
aW9uVmFsdWU+IGNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYpIGNvbnN0OworICAgIHZvaWQgc2V0UGVybWl0dGVkVmFsdWVSYW5nZShWYWx1ZVJh
bmdlKTsKKworICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMo
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OworICAgIHZvaWQgY29sbGVjdERpcmVjdFJv
b3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25z
dDsKKworICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CisgICAgYm9vbCBlcXVhbHMo
Y29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7CisgICAgCisgICAgc3RhdGljIGJvb2wgaXNDYWxj
RnVuY3Rpb24oQ1NTVmFsdWVJRCk7CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIENTU0NhbGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYmLCBib29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7CisKKyAgICBkb3VibGUgY2xhbXBU
b1Blcm1pdHRlZFJhbmdlKGRvdWJsZSkgY29uc3Q7CisKKyAgICBjb25zdCBSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247CisgICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25O
ZWdhdGl2ZTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0
IENTU0NhbGNWYWx1ZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5jcHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2Vy
SGVscGVycy5oIgogCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbnZhc1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTQ3Jvc3NmYWRlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCkBA
IC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFpbnRJbWFnZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCisjaW5jbHVk
ZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgogI2luY2x1ZGUgIkNvbG9yQ29udmVyc2lvbi5oIgog
I2luY2x1ZGUgIkNvbG9yTHVtaW5hbmNlLmgiCiAjaW5jbHVkZSAiUGFpci5oIgpAQCAtOTQsNyAr
OTUsNyBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1lTnVtYmVyT3JQCiAgICAgcmV0
dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotLy8gRklYTUU6IGNvbnNpZGVyIHB1bGxpbmcgaW4gdGhl
IHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcC4KKy8vIEZJWE1FOiBj
b25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJzaW5nIGxvZ2ljIGZyb20gQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyLgogY2xhc3MgQ2FsY1BhcnNlciB7CiBwdWJsaWM6CiAgICAgZXhwbGljaXQg
Q2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZhbHVlUmFuZ2UgPSBWYWx1ZVJhbmdl
OjpBbGwsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0
b24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUu
Y3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxh
dGlvblZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI4MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0KLSNpbmNsdWRlICJMZW5ndGhG
dW5jdGlvbnMuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxDYWxjdWxhdGlvblZhbHVlPiBD
YWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4gdmFsdWUsIFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
Q2FsY3VsYXRpb25WYWx1ZShXVEZNb3ZlKHZhbHVlKSwgcmFuZ2UpKTsKLX0KLQotZmxvYXQgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXI6OmV2YWx1YXRlKGZsb2F0KSBjb25zdAotewotICAgIHJldHVybiBt
X3ZhbHVlOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9uTnVtYmVyOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAotewotICAgIHRzIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3Rp
bmdJbnRlZ2VycyhtX3ZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6b3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewotICAgIHJl
dHVybiBpczxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0
PENhbGNFeHByZXNzaW9uTnVtYmVyPihvdGhlcik7Ci19Ci0KLWZsb2F0IENhbGN1bGF0aW9uVmFs
dWU6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAgIGZsb2F0IHJlc3VsdCA9
IG1fZXhwcmVzc2lvbi0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgIC8vIEZJWE1FOiBUaGlzIHRl
c3Qgd2FzIG9yaWdpbmFsbHkgbmVlZGVkIHdoZW4gd2UgZGlkIG5vdCBkZXRlY3QgZGl2aXNpb24g
YnkgemVybyBhdCBwYXJzZSB0aW1lLgotICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlz
IG5vdyB1bm5lZWRlZCBjb2RlIGFuZCBjYW4gYmUgcmVtb3ZlZC4KLSAgICBpZiAoc3RkOjppc25h
bihyZXN1bHQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRv
Tm9uTmVnYXRpdmUgJiYgcmVzdWx0IDwgMCA/IDAgOiByZXN1bHQ7Ci19Ci0KLWZsb2F0IENhbGNF
eHByZXNzaW9uTmVnYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAg
IHJldHVybiAtbV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOwotfQotCi1ib29sIENhbGNFeHBy
ZXNzaW9uTmVnYXRpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhl
cikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIp
ICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRpb24+KG90aGVyKTsKLX0K
LQotdm9pZCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25z
dAotewotICAgIHRzIDw8ICItKCI7Ci0gICAgdHMgPDwgKm1fY2hpbGQ7Ci0gICAgdHMgPDwgIiki
OwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYSwg
Y29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYikKLXsKLSAgICByZXR1cm4gKmEuY2hpbGQo
KSA9PSAqYi5jaGlsZCgpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZXZh
bHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIDEuMGYgLyBtX2NoaWxk
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb246
OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIjEuMCAvICIgPDwgIigi
OwotICAgIHRzIDw8ICptX2NoaWxkOwotICAgIHRzIDw8ICIpIjsKLX0KLQotYm9vbCBDYWxjRXhw
cmVzc2lvbkludmVyc2lvbjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90
aGVyKSBjb25zdAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4ob3Ro
ZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcik7
Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYgYSwg
Y29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mIGIpCi17Ci0gICAgcmV0dXJuICphLmNoaWxk
KCkgPT0gKmIuY2hpbGQoKTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246OmV2
YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAgIHN3aXRjaCAobV9vcGVyYXRvcikg
ewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsKLSAgICAgICAgZmxvYXQgc3VtID0gMDsK
LSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBzdW0g
Kz0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIHN1bTsKLSAgICB9
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7Ci0gICAgICAgIC8vIEZJWE1FCi0g
ICAgICAgIEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKTsKLSAgICAgICAgZmxvYXQgbGVm
dCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgZmxvYXQgcmln
aHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBs
ZWZ0IC0gcmlnaHQ7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTogewot
ICAgICAgICBmbG9hdCBwcm9kdWN0ID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1f
Y2hpbGRyZW4pCi0gICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1
ZSk7Ci0gICAgICAgIHJldHVybiBwcm9kdWN0OwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6RGl2aWRlOiB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEFTU0VSVChtX2NoaWxkcmVu
LnNpemUoKSA9PSAxIHx8IG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpOwotICAgICAgICBpZiAobV9j
aGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0IGxlZnQgPSBtX2NoaWxkcmVu
WzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZsb2F0IHJpZ2h0ID0gbV9jaGlsZHJl
blsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICByZXR1cm4gbGVmdCAvIHJpZ2h0Owot
ICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7Ci0gICAgICAgIGlmIChtX2NoaWxk
cmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0IG1pbmltdW0gPSBtX2NoaWxkcmVuWzBd
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxk
cmVuKQotICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmltdW0sIGNoaWxkLT5ldmFs
dWF0ZShtYXhWYWx1ZSkpOwotICAgICAgICByZXR1cm4gbWluaW11bTsKLSAgICB9Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDogewotICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05h
TigpOwotICAgICAgICBmbG9hdCBtYXhpbXVtID0gbV9jaGlsZHJlblswXS0+ZXZhbHVhdGUobWF4
VmFsdWUpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAg
ICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBjaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUp
KTsKLSAgICAgICAgcmV0dXJuIG1heGltdW07Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpDbGFtcDogewotICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgIT0gMykKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0KLSAg
ICAgICAgZmxvYXQgbWluID0gbV9jaGlsZHJlblswXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAg
ICAgICBmbG9hdCB2YWx1ZSA9IG1fY2hpbGRyZW5bMV0tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAg
ICAgICAgZmxvYXQgbWF4ID0gbV9jaGlsZHJlblsyXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAg
ICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4KSk7Ci0gICAgfQot
ICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uT3Bl
cmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihvdGhlcikgJiYgKnRo
aXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKTsKLX0KLQotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJiBhLCBjb25zdCBDYWxj
RXhwcmVzc2lvbk9wZXJhdGlvbiYgYikKLXsKLSAgICBpZiAoYS5nZXRPcGVyYXRvcigpICE9IGIu
Z2V0T3BlcmF0b3IoKSB8fCBhLmRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSAhPSBiLmRlc3RpbmF0aW9u
Q2F0ZWdvcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIC8vIEZJWE1FOiBXb3VsZCBi
ZSBuaWNlIHRvIGhhdmUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGRvaW5nIGEgZGVlcCBjb21wYXJl
IG9uIGEgdmVjdG9yIG9mIHBvaW50ZXJzLgotICAgIGlmIChhLmNoaWxkcmVuKCkuc2l6ZSgpICE9
IGIuY2hpbGRyZW4oKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYS5jaGlsZHJlbigpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlm
ICghKCphLmNoaWxkcmVuKClbaV0gPT0gKmIuY2hpbGRyZW4oKVtpXSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIGlmICht
X29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJh
dG9yOjpNYXgpIHsKLSAgICAgICAgdHMgPDwgbV9vcGVyYXRvciA8PCAiKCI7Ci0gICAgICAgIHNp
emVfdCBjaGlsZHJlbkNvdW50ID0gbV9jaGlsZHJlbi5zaXplKCk7Ci0gICAgICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW5Db3VudDsgaSsrKSB7Ci0gICAgICAgICAgICB0cyA8PCBt
X2NoaWxkcmVuW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKGkgPCBjaGlsZHJlbkNvdW50IC0g
MSkKLSAgICAgICAgICAgICAgICB0cyA8PCAiLCAiOwotICAgICAgICB9Ci0gICAgICAgIHRzIDw8
ICIpIjsKLSAgICB9IGVsc2UKLSAgICAgICAgdHMgPDwgbV9jaGlsZHJlblswXS5nZXQoKSA8PCAi
ICIgPDwgbV9vcGVyYXRvciA8PCAiICIgPDwgbV9jaGlsZHJlblsxXS5nZXQoKTsKLX0KLQotZmxv
YXQgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAot
ewotICAgIHJldHVybiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fbGVuZ3RoLCBtYXhWYWx1ZSk7Ci19
Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25MZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25M
ZW5ndGg+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkxlbmd0aD4o
b3RoZXIpOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAotewotICAgIHRzIDw8IG1fbGVuZ3RoOwotfQotCi1DYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKExlbmd0aCBmcm9tLCBMZW5ndGgg
dG8sIGZsb2F0IHByb2dyZXNzKQotICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNz
aW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQotICAgICwgbV9mcm9tKGZyb20pCi0gICAgLCBtX3Rv
KHRvKQotICAgICwgbV9wcm9ncmVzcyhwcm9ncmVzcykKLXsKLSAgICAvLyBGbGF0dGVuIG5lc3Rp
bmcgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCBhcyBhIHNwZWN1bGF0aXZlIGZpeCBmb3Ig
cmRhcjovL3Byb2JsZW0vMzA1MzMwMDUuCi0gICAgLy8gQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aCBpcyBvbmx5IHVzZWQgYXMgYSByZXN1bHQgb2YgYW5pbWF0aW9uIGFuZCB0aGV5IGRvbid0IG5l
c3QgaW4gbm9ybWFsIGNhc2VzLgotICAgIGlmIChtX2Zyb20uaXNDYWxjdWxhdGVkKCkgJiYgbV9m
cm9tLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkudHlwZSgpID09IENhbGNFeHByZXNz
aW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQotICAgICAgICBtX2Zyb20gPSBkb3duY2FzdDxDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihtX2Zyb20uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Np
b24oKSkuZnJvbSgpOwotICAgIGlmIChtX3RvLmlzQ2FsY3VsYXRlZCgpICYmIG1fdG8uY2FsY3Vs
YXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6QmxlbmRMZW5ndGgpCi0gICAgICAgIG1fdG8gPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoPihtX3RvLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkpLnRvKCk7Ci19
Ci0KLWZsb2F0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZh
bHVlKSBjb25zdAotewotICAgIHJldHVybiAoMS4wZiAtIG1fcHJvZ3Jlc3MpICogZmxvYXRWYWx1
ZUZvckxlbmd0aChtX2Zyb20sIG1heFZhbHVlKSArIG1fcHJvZ3Jlc3MgKiBmbG9hdFZhbHVlRm9y
TGVuZ3RoKG1fdG8sIG1heFZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKSAmJiAqdGhp
cyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihvdGhlcik7Ci19Ci0KLXZv
aWQgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QK
LXsKLSAgICB0cyA8PCAiYmxlbmQoIiA8PCBtX2Zyb20gPDwgIiwgIiA8PCBtX3RvIDw8ICIsICIg
PDwgbV9wcm9ncmVzcyA8PCAiKSI7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6OkFkZDogdHMgPDwgIisiOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6U3VidHJhY3Q6IHRzIDw8ICItIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6
Ok11bHRpcGx5OiB0cyA8PCAiKiI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZp
ZGU6IHRzIDw8ICIvIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogdHMgPDwg
Im1pbiI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6IHRzIDw8ICJtYXgiOyBi
cmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHRzIDw8ICJjbGFtcCI7IGJyZWFr
OwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4
dFN0cmVhbSYgdHMsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlKQotewotICAgIHRzIDw8
ICJjYWxjKCI7Ci0gICAgdHMgPDwgdmFsdWUuZXhwcmVzc2lvbigpOwotICAgIHRzIDw8ICIpIjsK
LSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbk5vZGUpCi17Ci0gICAgZXhw
cmVzc2lvbk5vZGUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1
ZS5oCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxh
dGlvblZhbHVlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyODYgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRp
b24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFt
ZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMg
SVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0g
KiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQot
Ci0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHVuaWZ5IHRoaXMgd2l0aCBDU1NQ
cmltaXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5PwotZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVn
b3J5IDogdWludDhfdCB7Ci0gICAgTnVtYmVyLAotICAgIExlbmd0aCwKLSAgICBQZXJjZW50LAot
ICAgIFBlcmNlbnROdW1iZXIsCi0gICAgUGVyY2VudExlbmd0aCwKLSAgICBBbmdsZSwKLSAgICBU
aW1lLAotICAgIEZyZXF1ZW5jeSwKLSAgICBPdGhlcgotfTsKLQotLy8gRG9uJ3QgY2hhbmdlIHRo
ZXNlIHZhbHVlczsgcGFyc2luZyB1c2VzIHRoZW0uCi1lbnVtIGNsYXNzIENhbGNPcGVyYXRvciA6
IHVpbnQ4X3QgewotICAgIEFkZCA9ICcrJywKLSAgICBTdWJ0cmFjdCA9ICctJywKLSAgICBNdWx0
aXBseSA9ICcqJywKLSAgICBEaXZpZGUgPSAnLycsCi0gICAgTWluID0gMCwKLSAgICBNYXgsCi0g
ICAgQ2xhbXAsCi19OwotCi1lbnVtIGNsYXNzIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgOiB1aW50
OF90IHsKLSAgICBVbmRlZmluZWQsCi0gICAgTnVtYmVyLAotICAgIExlbmd0aCwKLSAgICBPcGVy
YXRpb24sCi0gICAgTmVnYXRpb24sCi0gICAgSW52ZXJzaW9uLAotICAgIEJsZW5kTGVuZ3RoLAot
fTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZSA9IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OlVuZGVmaW5lZCk7Ci0gICAg
dmlydHVhbCB+Q2FsY0V4cHJlc3Npb25Ob2RlKCkgPSBkZWZhdWx0OwotCi0gICAgQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Ci0KLSAgICB2aXJ0
dWFsIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVh
bCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgPSAwOwot
ICAgIHZpcnR1YWwgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKLQotcHJp
dmF0ZToKLSAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIG1fdHlwZTsKLX07Ci0KLWNsYXNzIENh
bGNFeHByZXNzaW9uTnVtYmVyIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1w
dWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25OdW1iZXIoZmxvYXQpOwotCi0gICAg
ZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLXByaXZhdGU6Ci0gICAg
ZmxvYXQgZXZhbHVhdGUoZmxvYXQpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGR1
bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBmbG9hdCBtX3ZhbHVl
OwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25MZW5ndGggZmluYWwgOiBwdWJsaWMgQ2FsY0V4
cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbkxlbmd0
aChMZW5ndGgpOwotCi0gICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgoKSBjb25zdCB7IHJldHVybiBt
X2xlbmd0aDsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVl
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Np
b25Ob2RlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTGVuZ3RoIG1fbGVuZ3RoOwotfTsKLQotY2xhc3MgQ2Fs
Y0V4cHJlc3Npb25OZWdhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewot
cHVibGljOgotICAgIENhbGNFeHByZXNzaW9uTmVnYXRpb24oc3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4mJiBub2RlKQotICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKLSAgICAgICAgLCBtX2NoaWxkKFdURk1vdmUo
bm9kZSkpCi0gICAgewotICAgICAgICBBU1NFUlQobV9jaGlsZCk7Ci0gICAgfQotCi0gICAgZmxv
YXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGR1
bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0gICAgCi0gICAgY29uc3QgQ2FsY0V4
cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxk
OwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTmVnYXRpb24mLCBj
b25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJik7Ci0KLWNsYXNzIENhbGNFeHByZXNzaW9uSW52
ZXJzaW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAg
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24oc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4mJiBub2RlKQotICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpJbnZlcnNpb24pCi0gICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKG5vZGUpKQotICAg
IHsKLSAgICAgICAgQVNTRVJUKG1fY2hpbGQpOwotICAgIH0KLQotICAgIGZsb2F0IGV2YWx1YXRl
KGZsb2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4
dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiBj
aGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiwgY29uc3QgQ2FsY0V4cHJl
c3Npb25JbnZlcnNpb24mKTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24gZmluYWwg
OiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBDYWxjRXhwcmVzc2lv
bk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiYg
Y2hpbGRyZW4sIENhbGNPcGVyYXRvciwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwotCi0gICAgQ2FsY09wZXJhdG9y
IGdldE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvcjsgfQotICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGlu
YXRpb25DYXRlZ29yeTsgfQotCi0gICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9
Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBj
b25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+
IG1fY2hpbGRyZW47Ci0gICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7Ci0gICAgQ2FsY3VsYXRp
b25DYXRlZ29yeSBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlciB9OwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCBmaW5hbCA6IHB1
YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAgIENhbGNFeHByZXNzaW9uQmxl
bmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQgcHJvZ3Jlc3MpOwotCi0gICAg
Y29uc3QgTGVuZ3RoJiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9tOyB9Ci0gICAgY29uc3Qg
TGVuZ3RoJiB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KLSAgICBmbG9hdCBwcm9ncmVzcygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3M7IH0KLQotcHJpdmF0ZToKLSAgICBmbG9hdCBldmFs
dWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZHVt
cChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotICAgIExlbmd0aCBtX2Zyb207
Ci0gICAgTGVuZ3RoIG1fdG87Ci0gICAgZmxvYXQgbV9wcm9ncmVzczsKLX07Ci0KLWNsYXNzIENh
bGN1bGF0aW9uVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWxjdWxhdGlvblZhbHVlPiB7Ci1w
dWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxDYWxjdWxhdGlvblZhbHVlPiBj
cmVhdGUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4sIFZhbHVlUmFuZ2UpOwot
ICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdDsKLQotICAgIGJvb2wgc2hv
dWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9u
TmVnYXRpdmU7IH0KLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIGV4cHJlc3Npb24oKSBj
b25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FsY3VsYXRp
b25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7
Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247
Ci0gICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKLX07Ci0KLWlubGluZSBDYWxj
RXhwcmVzc2lvbk5vZGU6OkNhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
IHR5cGUpCi0gICAgOiBtX3R5cGUodHlwZSkKLXsKLX0KLQotaW5saW5lIENhbGN1bGF0aW9uVmFs
dWU6OkNhbGN1bGF0aW9uVmFsdWUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4g
ZXhwcmVzc2lvbiwgVmFsdWVSYW5nZSByYW5nZSkKLSAgICA6IG1fZXhwcmVzc2lvbihXVEZNb3Zl
KGV4cHJlc3Npb24pKQotICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUocmFuZ2UgPT0g
VmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpCi17Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYSwgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYikKLXsK
LSAgICByZXR1cm4gYS5leHByZXNzaW9uKCkgPT0gYi5leHByZXNzaW9uKCk7Ci19Ci0KLWlubGlu
ZSBDYWxjRXhwcmVzc2lvbk51bWJlcjo6Q2FsY0V4cHJlc3Npb25OdW1iZXIoZmxvYXQgdmFsdWUp
Ci0gICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVy
KQotICAgICwgbV92YWx1ZSh2YWx1ZSkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OdW1iZXIm
IGIpCi17Ci0gICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7Ci19Ci0KLWlubGluZSBD
YWxjRXhwcmVzc2lvbkxlbmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoIGxlbmd0aCkK
LSAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGgp
Ci0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi17Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3Ro
JiBiKQotewotICAgIHJldHVybiBhLmxlbmd0aCgpID09IGIubGVuZ3RoKCk7Ci19Ci0KLWlubGlu
ZSBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24oVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIGNoaWxkcmVuLCBDYWxjT3Bl
cmF0b3Igb3AsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKLSAgICA6
IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCi0g
ICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQotICAgICwgbV9vcGVyYXRvcihvcCkK
LSAgICAsIG1fZGVzdGluYXRpb25DYXRlZ29yeShkZXN0aW5hdGlvbkNhdGVnb3J5KQotewotfQot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mLCBjb25zdCBD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYpOwotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGgmIGIpCi17Ci0gICAgcmV0dXJuIGEucHJvZ3Jlc3MoKSA9PSBiLnByb2dyZXNzKCkgJiYg
YS5mcm9tKCkgPT0gYi5mcm9tKCkgJiYgYS50bygpID09IGIudG8oKTsKLX0KLQotV1RGOjpUZXh0
U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENhbGN1bGF0aW9uVmFs
dWUmKTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmKTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBDYWxjT3BlcmF0b3IpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0K
LSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKFRvVmFs
dWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAotICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBX
ZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0dXJuIG5vZGUucHJlZGljYXRl
OyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQotU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTnVtYmVyLCB0eXBlKCkgPT0g
V2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTGVuZ3RoLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoKQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLCB0
eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTmVn
YXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlv
bikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVz
c2lvbkludmVyc2lvbiwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6
OkludmVyc2lvbikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShD
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Np
b25Ob2RlVHlwZTo6QmxlbmRMZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9M
ZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5j
cHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11
ZWxsZXIgKCBtdWVsbGVyQGtkZS5vcmcgKQotICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMTkgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLTIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFu
ZHJldyBXZWxsaW5ndG9uIChwcm90b25Ad2lyZXRhcHBlZC5uZXQpCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAt
MjYsNiArMjYsOSBAQAogI2luY2x1ZGUgIkxlbmd0aC5oIgogCiAjaW5jbHVkZSAiQW5pbWF0aW9u
VXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oIgorI2lu
Y2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25P
cGVyYXRpb24uaCIKICNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCiAjaW5jbHVkZSA8d3Rm
L0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGguY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoLmgiCisKKyNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisj
aW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6
OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQg
cHJvZ3Jlc3MpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6QmxlbmRMZW5ndGgpCisgICAgLCBtX2Zyb20oZnJvbSkKKyAgICAsIG1fdG8odG8pCisgICAg
LCBtX3Byb2dyZXNzKHByb2dyZXNzKQoreworICAgIC8vIEZsYXR0ZW4gbmVzdGluZyBvZiBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGFzIGEgc3BlY3VsYXRpdmUgZml4IGZvciByZGFyOi8vcHJv
YmxlbS8zMDUzMzAwNS4KKyAgICAvLyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGlzIG9ubHkg
dXNlZCBhcyBhIHJlc3VsdCBvZiBhbmltYXRpb24gYW5kIHRoZXkgZG9uJ3QgbmVzdCBpbiBub3Jt
YWwgY2FzZXMuCisgICAgaWYgKG1fZnJvbS5pc0NhbGN1bGF0ZWQoKSAmJiBtX2Zyb20uY2FsY3Vs
YXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6QmxlbmRMZW5ndGgpCisgICAgICAgIG1fZnJvbSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGg+KG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpKS5mcm9t
KCk7CisgICAgaWYgKG1fdG8uaXNDYWxjdWxhdGVkKCkgJiYgbV90by5jYWxjdWxhdGlvblZhbHVl
KCkuZXhwcmVzc2lvbigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVuZExl
bmd0aCkKKyAgICAgICAgbV90byA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+
KG1fdG8uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSkudG8oKTsKK30KKworZmxvYXQg
Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuICgxLjBmIC0gbV9wcm9ncmVzcykgKiBmbG9hdFZhbHVlRm9yTGVuZ3Ro
KG1fZnJvbSwgbWF4VmFsdWUpICsgbV9wcm9ncmVzcyAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV90
bywgbWF4VmFsdWUpOworfQorCitib29sIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9wZXJh
dG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1
cm4gaXM8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIpICYmICp0aGlzID09IGRvd25j
YXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKTsKK30KKwordm9pZCBDYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRz
IDw8ICJibGVuZCgiIDw8IG1fZnJvbSA8PCAiLCAiIDw8IG1fdG8gPDwgIiwgIiA8PCBtX3Byb2dy
ZXNzIDw8ICIpIjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAiTGVuZ3Ro
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQgcHJv
Z3Jlc3MpOworCisgICAgY29uc3QgTGVuZ3RoJiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9mcm9t
OyB9CisgICAgY29uc3QgTGVuZ3RoJiB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KKyAgICBm
bG9hdCBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3M7IH0KKworcHJpdmF0ZToK
KyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7CisgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworICAg
IHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBMZW5ndGggbV9mcm9t
OworICAgIExlbmd0aCBtX3RvOworICAgIGZsb2F0IG1fcHJvZ3Jlc3M7Cit9OworCitpbmxpbmUg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGEsIGNvbnN0
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGIpCit7CisgICAgcmV0dXJuIGEucHJvZ3Jlc3Mo
KSA9PSBiLnByb2dyZXNzKCkgJiYgYS5mcm9tKCkgPT0gYi5mcm9tKCkgJiYgYS50bygpID09IGIu
dG8oKTsKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05P
REUoQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHBy
ZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbklu
dmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5o
IgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpldmFsdWF0ZShmbG9hdCBtYXhW
YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMS4wZiAvIG1fY2hpbGQtPmV2YWx1YXRlKG1heFZh
bHVlKTsKK30KKwordm9pZCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZHVtcChUZXh0U3RyZWFt
JiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiMS4wIC8gIiA8PCAiKCIgPDwgKm1fY2hpbGQgPDwg
IikiOworfQorCitib29sIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpvcGVyYXRvcj09KGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJl
c3Npb25JbnZlcnNpb24+KG90aGVyKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYgYikK
K3sKKyAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgpOworfQorCit9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbklu
dmVyc2lvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5v
ZGUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2Rl
IHsKK3B1YmxpYzoKKyAgICBDYWxjRXhwcmVzc2lvbkludmVyc2lvbihzdGQ6OnVuaXF1ZV9wdHI8
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5vZGUpCisgICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2Rl
KENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbikKKyAgICAgICAgLCBtX2NoaWxkKFdU
Rk1vdmUobm9kZSkpCisgICAgeworICAgICAgICBBU1NFUlQobV9jaGlsZCk7CisgICAgfQorCisg
ICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1
ZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmlu
YWw7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwor
fTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiwgY29u
c3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mKTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24sIHR5cGUoKSA9
PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZlcnNpb24pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3Ro
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVu
Z3RoLmgiCisKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJl
c3Npb25MZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fbGVuZ3RoLCBtYXhWYWx1ZSk7Cit9CisKK2Jvb2wgQ2Fs
Y0V4cHJlc3Npb25MZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBv
dGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG90aGVy
KSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpOworfQor
Cit2b2lkIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAor
eworICAgIHRzIDw8IG1fbGVuZ3RoOworfQorCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkxlbmd0aC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgIkxlbmd0aC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTGVuZ3RoIGZp
bmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoKTsKKworICAgIGNvbnN0IExlbmd0aCYgbGVuZ3Ro
KCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFs
dWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBMZW5ndGggbV9sZW5ndGg7Cit9OworCitpbmxp
bmUgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9uTGVuZ3RoKExlbmd0aCBsZW5n
dGgpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVu
Z3RoKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbkxl
bmd0aCYgYikKK3sKKyAgICByZXR1cm4gYS5sZW5ndGgoKSA9PSBiLmxlbmd0aCgpOworfQorCit9
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVz
c2lvbkxlbmd0aCwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxl
bmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25O
ZWdhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9u
TmVnYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHJldHVybiAt
bV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOworfQorCitib29sIENhbGNFeHByZXNzaW9uTmVn
YXRpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIpICYmICp0aGlz
ID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRpb24+KG90aGVyKTsKK30KKwordm9pZCBD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAg
IHRzIDw8ICItKCIgPDwgKm1fY2hpbGQgPDwgIikiOworfQorCitib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlv
biYgYikKK3sKKyAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgpOworfQorCit9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTmVnYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lv
bk5vZGUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5v
ZGUgeworcHVibGljOgorICAgIENhbGNFeHByZXNzaW9uTmVnYXRpb24oc3RkOjp1bmlxdWVfcHRy
PENhbGNFeHByZXNzaW9uTm9kZT4mJiBub2RlKQorICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9k
ZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKKyAgICAgICAgLCBtX2NoaWxkKFdU
Rk1vdmUobm9kZSkpCisgICAgeworICAgICAgICBBU1NFUlQobV9jaGlsZCk7CisgICAgfQorICAg
IAorICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSogY2hpbGQoKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVz
c2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0
IGZpbmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGls
ZDsKK307CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiwg
Y29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYpOworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb24pCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuY3Bw
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgor
CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENhbGNFeHBy
ZXNzaW9uTm9kZSYgZXhwcmVzc2lvbk5vZGUpCit7CisgICAgZXhwcmVzc2lvbk5vZGUuZHVtcCh0
cyk7CisgICAgcmV0dXJuIHRzOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3Mg
Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA6IHVpbnQ4X3QgeworICAgIFVuZGVmaW5lZCwKKyAgICBO
dW1iZXIsCisgICAgTGVuZ3RoLAorICAgIE9wZXJhdGlvbiwKKyAgICBOZWdhdGlvbiwKKyAgICBJ
bnZlcnNpb24sCisgICAgQmxlbmRMZW5ndGgsCit9OworCitjbGFzcyBDYWxjRXhwcmVzc2lvbk5v
ZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0
IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlID0gQ2FsY0V4cHJlc3Np
b25Ob2RlVHlwZTo6VW5kZWZpbmVkKTsKKyAgICB2aXJ0dWFsIH5DYWxjRXhwcmVzc2lvbk5vZGUo
KSA9IGRlZmF1bHQ7CisKKyAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4
VmFsdWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxj
RXhwcmVzc2lvbk5vZGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGR1bXAoVGV4dFN0
cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
IG1fdHlwZTsKK307CisKK2lubGluZSBDYWxjRXhwcmVzc2lvbk5vZGU6OkNhbGNFeHByZXNzaW9u
Tm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sK
K30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlJik7CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENF
WFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGlj
IGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkgeyBy
ZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVz
c2lvbk51bWJlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhw
cmVzc2lvbk51bWJlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9uTnVtYmVyOjpldmFsdWF0
ZShmbG9hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KKwordm9pZCBDYWxjRXhw
cmVzc2lvbk51bWJlcjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCBU
ZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMobV92YWx1ZSk7Cit9CisK
K2Jvb2wgQ2FsY0V4cHJlc3Npb25OdW1iZXI6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Np
b25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25OdW1i
ZXI+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3Ro
ZXIpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHBy
ZXNzaW9uTnVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fs
Yy9DYWxjRXhwcmVzc2lvbk51bWJlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxj
RXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhw
cmVzc2lvbk51bWJlciBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTnVtYmVyKGZsb2F0KTsKKworICAgIGZsb2F0
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcml2YXRlOgorICAgIGZsb2F0
IGV2YWx1YXRlKGZsb2F0KSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdCBmaW5hbDsKKworICAgIGZsb2F0IG1fdmFsdWU7Cit9OworCitpbmxpbmUgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXI6OkNhbGNFeHByZXNzaW9uTnVtYmVyKGZsb2F0IHZhbHVlKQorICAg
IDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcikKKyAg
ICAsIG1fdmFsdWUodmFsdWUpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25OdW1iZXImIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTnVtYmVyJiBiKQor
eworICAgIHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOworfQorCit9CisKK1NQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbk51bWJlciwg
dHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcikKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Np
b25PcGVyYXRpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNh
bGNFeHByZXNzaW9uT3BlcmF0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJlc3Npb25PcGVyYXRp
b246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAoreworICAgIHN3aXRjaCAobV9vcGVy
YXRvcikgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsKKyAgICAgICAgZmxvYXQgc3Vt
ID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAg
ICBzdW0gKz0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHN1bTsK
KyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7CisgICAgICAgIC8vIEZJ
WE1FCisgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKTsKKyAgICAgICAgZmxv
YXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgZmxv
YXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBsZWZ0IC0gcmlnaHQ7CisgICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eTogeworICAgICAgICBmbG9hdCBwcm9kdWN0ID0gMTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGls
ZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxkLT5ldmFsdWF0ZSht
YXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBwcm9kdWN0OworICAgIH0KKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6RGl2aWRlOiB7CisgICAgICAgIC8vIEZJWE1FCisgICAgICAgIEFTU0VSVChtX2No
aWxkcmVuLnNpemUoKSA9PSAxIHx8IG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICBp
ZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGZsb2F0IGxlZnQgPSBtX2No
aWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZsb2F0IHJpZ2h0ID0gbV9j
aGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICByZXR1cm4gbGVmdCAvIHJp
Z2h0OworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7CisgICAgICAgIGlmICht
X2NoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGZsb2F0IG1pbmltdW0gPSBtX2NoaWxk
cmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKQorICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmltdW0sIGNoaWxk
LT5ldmFsdWF0ZShtYXhWYWx1ZSkpOworICAgICAgICByZXR1cm4gbWluaW11bTsKKyAgICB9Cisg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogeworICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0Vt
cHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1
aWV0X05hTigpOworICAgICAgICBmbG9hdCBtYXhpbXVtID0gbV9jaGlsZHJlblswXS0+ZXZhbHVh
dGUobWF4VmFsdWUpOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAg
ICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBjaGlsZC0+ZXZhbHVhdGUobWF4
VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG1heGltdW07CisgICAgfQorICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpDbGFtcDogeworICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgIT0gMykKKyAg
ICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7
CisKKyAgICAgICAgZmxvYXQgbWluID0gbV9jaGlsZHJlblswXS0+ZXZhbHVhdGUobWF4VmFsdWUp
OworICAgICAgICBmbG9hdCB2YWx1ZSA9IG1fY2hpbGRyZW5bMV0tPmV2YWx1YXRlKG1heFZhbHVl
KTsKKyAgICAgICAgZmxvYXQgbWF4ID0gbV9jaGlsZHJlblsyXS0+ZXZhbHVhdGUobWF4VmFsdWUp
OworICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1ZSwgbWF4KSk7Cisg
ICAgfQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gc3RkOjpu
dW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworfQorCitib29sIENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihvdGhlcikg
JiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKTsKK30K
KworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJiBhLCBjb25z
dCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYgYikKK3sKKyAgICBpZiAoYS5nZXRPcGVyYXRvcigp
ICE9IGIuZ2V0T3BlcmF0b3IoKSB8fCBhLmRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSAhPSBiLmRlc3Rp
bmF0aW9uQ2F0ZWdvcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChhLmNoaWxk
cmVuKCkuc2l6ZSgpICE9IGIuY2hpbGRyZW4oKS5zaXplKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYS5jaGlsZHJlbigpLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmICghKCphLmNoaWxkcmVuKClbaV0gPT0gKmIuY2hpbGRyZW4oKVtpXSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25z
dAoreworICAgIGlmIChtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1fb3BlcmF0
b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXgpIHsKKyAgICAgICAgdHMgPDwgbV9vcGVyYXRvciA8PCAi
KCI7CisgICAgICAgIHNpemVfdCBjaGlsZHJlbkNvdW50ID0gbV9jaGlsZHJlbi5zaXplKCk7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW5Db3VudDsgaSsrKSB7CisgICAg
ICAgICAgICB0cyA8PCBtX2NoaWxkcmVuW2ldLmdldCgpOworICAgICAgICAgICAgaWYgKGkgPCBj
aGlsZHJlbkNvdW50IC0gMSkKKyAgICAgICAgICAgICAgICB0cyA8PCAiLCAiOworICAgICAgICB9
CisgICAgICAgIHRzIDw8ICIpIjsKKyAgICB9IGVsc2UKKyAgICAgICAgdHMgPDwgbV9jaGlsZHJl
blswXS5nZXQoKSA8PCAiICIgPDwgbV9vcGVyYXRvciA8PCAiICIgPDwgbV9jaGlsZHJlblsxXS5n
ZXQoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbk9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAiQ2FsY09wZXJhdG9yLmgiCisj
aW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKK3B1
YmxpYzoKKyAgICBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PENhbGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciwgQ2FsY3VsYXRp
b25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIpOworCisgICAgQ2FsY09wZXJhdG9yIGdldE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9v
cGVyYXRvcjsgfQorICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSgp
IGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25DYXRlZ29yeTsgfQorCisgICAgY29uc3QgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSBjb25z
dCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYpIGNvbnN0IGZpbmFsOworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+PiBtX2NoaWxkcmVuOworICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOworICAg
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5IHsgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIgfTsKK307CisKKworaW5saW5lIENhbGNFeHByZXNzaW9uT3BlcmF0aW9u
OjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHBy
ZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciBvcCwgQ2FsY3VsYXRpb25DYXRl
Z29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQorICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbikKKyAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShj
aGlsZHJlbikpCisgICAgLCBtX29wZXJhdG9yKG9wKQorICAgICwgbV9kZXN0aW5hdGlvbkNhdGVn
b3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYsIGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJik7
CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNF
eHByZXNzaW9uT3BlcmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2Rl
VHlwZTo6T3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxj
T3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY09wZXJhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jYWxjL0NhbGNPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjT3BlcmF0b3Iu
aCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDYWxjT3BlcmF0
b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6
IHRzIDw8ICIrIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB0cyA8
PCAiLSI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseTogdHMgPDwgIioi
OyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB0cyA8PCAiLyI7IGJyZWFr
OworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHRzIDw8ICJtaW4iOyBicmVhazsKKyAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWF4OiB0cyA8PCAibWF4IjsgYnJlYWs7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkNsYW1wOiB0cyA8PCAiY2xhbXAiOyBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IHRzOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVy
YXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09w
ZXJhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjT3BlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIERvbid0IGNoYW5nZSB0aGVzZSB2YWx1ZXM7IHBhcnNpbmcgdXNlcyB0
aGVtLgorZW51bSBjbGFzcyBDYWxjT3BlcmF0b3IgOiB1aW50OF90IHsKKyAgICBBZGQgPSAnKycs
CisgICAgU3VidHJhY3QgPSAnLScsCisgICAgTXVsdGlwbHkgPSAnKicsCisgICAgRGl2aWRlID0g
Jy8nLAorICAgIE1pbiA9IDAsCisgICAgTWF4LAorICAgIENsYW1wLAorfTsKKworVGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgQ2FsY09wZXJhdG9yKTsKKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnku
Y3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25DYXRlZ29yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5
LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ2FsY3VsYXRp
b25DYXRlZ29yeSBjYXRlZ29yeSkKK3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6IHRzIDw8ICJudW1iZXIiOyBicmVhazsKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDogdHMgPDwgImxlbmd0aCI7IGJyZWFr
OworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogdHMgPDwgInBlcmNlbnQi
OyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6IHRz
IDw8ICJwZXJjZW50LW51bWJlciI7IGJyZWFrOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aDogdHMgPDwgInBlcmNlbnQtbGVuZ3RoIjsgYnJlYWs7CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTogdHMgPDwgImFuZ2xlIjsgYnJlYWs7CisgICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOiB0cyA8PCAidGltZSI7IGJyZWFrOworICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OiB0cyA8PCAiZnJlcXVlbmN5Ijsg
YnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjogdHMgPDwgIm90aGVy
IjsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQorCit9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0
ZWdvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKKy8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHVuaWZ5IHRoaXMgd2l0aCBDU1NQcmltaXRp
dmVWYWx1ZTo6VW5pdENhdGVnb3J5PworZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVnb3J5IDog
dWludDhfdCB7CisgICAgTnVtYmVyLAorICAgIExlbmd0aCwKKyAgICBQZXJjZW50LAorICAgIFBl
cmNlbnROdW1iZXIsCisgICAgUGVyY2VudExlbmd0aCwKKyAgICBBbmdsZSwKKyAgICBUaW1lLAor
ICAgIEZyZXF1ZW5jeSwKKyAgICBPdGhlcgorfTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChU
ZXh0U3RyZWFtJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSk7CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5o
IgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPENhbGN1bGF0aW9uVmFsdWU+IENhbGN1bGF0aW9u
VmFsdWU6OmNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiB2YWx1ZSwg
VmFsdWVSYW5nZSByYW5nZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWxjdWxhdGlv
blZhbHVlKFdURk1vdmUodmFsdWUpLCByYW5nZSkpOworfQorCitDYWxjdWxhdGlvblZhbHVlOjpD
YWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGV4cHJl
c3Npb24sIFZhbHVlUmFuZ2UgcmFuZ2UpCisgICAgOiBtX2V4cHJlc3Npb24oV1RGTW92ZShleHBy
ZXNzaW9uKSkKKyAgICAsIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKHJhbmdlID09IFZhbHVl
UmFuZ2U6Ok5vbk5lZ2F0aXZlKQoreworfQorCitDYWxjdWxhdGlvblZhbHVlOjp+Q2FsY3VsYXRp
b25WYWx1ZSgpID0gZGVmYXVsdDsKKworZmxvYXQgQ2FsY3VsYXRpb25WYWx1ZTo6ZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgZmxvYXQgcmVzdWx0ID0gbV9leHByZXNzaW9u
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgLy8gRklYTUU6IFRoaXMgdGVzdCB3YXMgb3JpZ2lu
YWxseSBuZWVkZWQgd2hlbiB3ZSBkaWQgbm90IGRldGVjdCBkaXZpc2lvbiBieSB6ZXJvIGF0IHBh
cnNlIHRpbWUuCisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgbm93IHVubmVlZGVk
IGNvZGUgYW5kIGNhbiBiZSByZW1vdmVkLgorICAgIGlmIChzdGQ6OmlzbmFuKHJlc3VsdCkpCisg
ICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSAm
JiByZXN1bHQgPCAwID8gMCA6IHJlc3VsdDsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENh
bGN1bGF0aW9uVmFsdWUmIGEsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIGIpCit7CisgICAgcmV0
dXJuIGEuZXhwcmVzc2lvbigpID09IGIuZXhwcmVzc2lvbigpOworfQorCitUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gdHMgPDwgImNhbGMoIiA8PCB2YWx1ZS5leHByZXNzaW9uKCkgPDwgIiki
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJMZW5ndGguaCIKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKyNpbmNsdWRlIDx3
dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHBy
ZXNzaW9uTm9kZTsKKworY2xhc3MgQ2FsY3VsYXRpb25WYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVk
PENhbGN1bGF0aW9uVmFsdWU+IHsKK3B1YmxpYzoKKyAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Np
b25Ob2RlPiwgVmFsdWVSYW5nZSk7CisgICAgV0VCQ09SRV9FWFBPUlQgfkNhbGN1bGF0aW9uVmFs
dWUoKTsKKworICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdDsKKworICAg
IGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9zaG91bGRD
bGFtcFRvTm9uTmVnYXRpdmU7IH0KKyAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIGV4cHJl
c3Npb24oKSBjb25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uOyB9CisKK3ByaXZhdGU6CisgICAg
Q2FsY3VsYXRpb25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFs
dWVSYW5nZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4
cHJlc3Npb247CisgICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKK307CisKK2Jv
b2wgb3BlcmF0b3I9PShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiwgY29uc3QgQ2FsY3VsYXRpb25W
YWx1ZSYpOworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDYWxj
dWxhdGlvblZhbHVlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwpJbmRleDogU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgJKHJldmlzaW9uIDI3ODIz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkJh
c2ljU2hhcGVGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ29udGVudERpc3RyaWJ1dGlv
blZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNT
U0ZvbnRTdHlsZVZhbHVlLmgiCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0
aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5j
bHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25MZW5ndGgu
aCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRT
ZWxlY3Rpb25WYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkdy
aWRQb3NpdGlvbnNSZXNvbHZlci5oIgpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MjQwKQorKysgVG9vbHMvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEtMDUtMjkgIFNhbSBXZWluaWcg
IDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IGNhbGMoKSByZWxhdGVkIGZpbGVz
IGludG8gcHJvcGVyIDEtY2xhc3MgcGVyIGZpbGUgc3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY0MjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9DYWxjdWxhdGlvblZhbHVlLmNwcDoKKyAgICAgICAgVXBkYXRlIHRlc3QgdG8gaW5jbHVk
ZSBhZGRpdG9uYWwgaGVhZGVyIG5vdyBuZWVkZWQuCisKIDIwMjEtMDUtMjggIEFsZXggQ2hyaXN0
ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBQdW55Y29kZSBlbmNv
ZGUgVSswQkU2IHdoZW4gbm90IGluIGNvbnRleHQgb2Ygb3RoZXIgVGFtaWwgY2hhcmFjdGVycwpJ
bmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DYWxj
dWxhdGlvblZhbHVlLmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYg
KzI1LDcgQEAKIAogI2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9DYWxj
RXhwcmVzc2lvbk5vZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuaD4K
ICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430107</attachid>
            <date>2021-05-29 13:39:36 -0700</date>
            <delta_ts>2021-05-29 13:47:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226421-20210529133935.patch</filename>
            <type>text/plain</type>
            <size>328903</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAyMS0wNS0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQg
ZmlsZXMgaW50byAxLWNsYXNzIHBlciBmaWxlIHN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQncyBib3RoZXJlZCBtZSBmb3IgYSB3aGls
ZSB0aGF0IHRoZSBjYWxjIHJlbGF0ZWQgY2xhc3NlcyAoYm90aCBpbiBjc3MvCisgICAgICAgIGFu
ZCBpbiBwbGF0Zm9ybS8pIHdlcmUgYnVuZGxlZCBhbGwgaW4gdHdvIGJpZyBmaWxlcy4gVGhpcyBj
aGFuZ2Ugc3BsaXRzCisgICAgICAgIHRoZW0gYWxsIG91dCBpbnRvIHRoZWlyIG93biBoZWFkZXIg
YW5kIGltcGxlbWVudGF0aW9uIGZpbGVzIHRoYXQgbWF0Y2gKKyAgICAgICAgdGhlaXIgbmFtZSwg
YW5kIHB1dHMgdGhlbSBpbiBuZXcgY2FsYy8gc3ViZGlyZWN0b3JpZXMgKGNzcy9jYWxjLy4uLiBh
bmQKKyAgICAgICAgcGxhdGZvcm0vY2FsYy8uLi4pLiBUaGlzIHNob3VsZCBob3BlZnVsbHkgbWFr
ZSB0aGUgbW9kaWZpY2F0aW9ucyBJIG5lZWQKKyAgICAgICAgdG8gbWFrZSB0byBjYWxjKCkgdG8g
c3VwcG9ydCByZWxhdGl2ZSBjb2xvciBzeW50YXggYSBsaXR0bGUgZWFzaWVyLgorCisgICAgICAg
ICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlvblZhbHVl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAg
ICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlTWFwcGluZ3MuaDoKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuY3BwOgorICAgICAgICAq
IGNzcy9jYWxjOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBw
aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjYWxjVW5pdENhdGVnb3J5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFzRG91YmxlVmFsdWUpOgorICAgICAgICAqIGNzcy9jYWxjL0NT
U0NhbGNDYXRlZ29yeU1hcHBpbmcuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0eVByaW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpwcmV0dHlQcmludE5vZGVzKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lv
bk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6
OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6
OmNhdGVnb3J5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9k
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6b3BlcmF0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjaGVja0RlcHRoQW5kSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1Byb2R1Y3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNT
dW0pOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjSW52
ZXJ0Tm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0ludmVydE5vZGU6
OmNyZWF0ZUNhbGNFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNJ
bnZlcnROb2RlOjpkb3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
SW52ZXJ0Tm9kZTo6Y29tcHV0ZUxlbmd0aFB4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbGNJbnZlcnROb2RlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxj
SW52ZXJ0Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9k
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0
ZUNhbGNFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNOZWdhdGVO
b2RlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdvcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2F0ZWdvcnlGb3JJbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZWRUeXBl
Rm9yTWluT3JNYXhPckNsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2FtZVBhaXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c29ydGluZ0NhdGVnb3J5Rm9yVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpzb3J0aW5nQ2F0ZWdvcnkpOgorICAgICAgICAoV2ViQ29yZTo6cHJpbWl0aXZlVHlwZUZvckNv
bWJpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnNpb25Ub0FkZFZhbHVlc1dpdGhU
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvbkZyb21PcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29tYmluZUFsbENo
aWxkcmVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
b21iaW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6
OnNpbXBsaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1w
bGlmeVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
c2ltcGxpZnlOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpw
cmltaXRpdmVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25O
b2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpldmFsdWF0ZU9wZXJhdG9yKToKKyAgICAg
ICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBj
c3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpwcmltaXRpdmVUeXBl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OkNT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6aXNOdW1lcmljVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOZWdhdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpuZWdhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aW52ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb252ZXJ0VG9Vbml0VHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmljYWxpemVVbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVu
ZGVuY2llcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNaZXJvIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmVxdWFscyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkdW1w
IGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmg6
IEFkZGVkLgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxlbmRIYWxmKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNTUyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNhdGVnb3J5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6cHJpbWl0aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjb2xs
ZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6ZXF1YWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
VmFsdWU6OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
YWxjOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGg6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fs
Y0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxj
RXhwcmVzc2lvbkludmVyc2lvbjo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkludmVyc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTGVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkxl
bmd0aDo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25M
ZW5ndGg6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Np
b25MZW5ndGg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25MZW5ndGguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkxl
bmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpldmFsdWF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTmVnYXRpb246
OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICog
cGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZTo6
dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGU6OkNhbGNF
eHByZXNzaW9uTm9kZSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51
bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OdW1iZXI6
OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTnVtYmVy
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTnVtYmVyOjpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
TnVtYmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OdW1iZXI6
OkNhbGNFeHByZXNzaW9uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpldmFsdWF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
T3BlcmF0b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNh
dGVnb3J5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fs
Y3VsYXRpb25WYWx1ZTo6Q2FsY3VsYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWxj
dWxhdGlvblZhbHVlOjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGN1
bGF0aW9uVmFsdWU6OnNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWxjdWxhdGlvblZhbHVlOjpleHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKwogMjAyMS0wNS0yOSAgQWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBEbyBub3QgaW5jbHVkZSB2
ZXJ0aWNhbCBzcGFjaW5nIHdoZW4gcmVzb2x2aW5nIHBlcmNlbnQgaGVpZ2h0IGZvciB0YWJsZSBj
b250ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM0MSw3ICszNDEsNiBA
QCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBjcnlwdG8vU2Vy
aWFsaXplZENyeXB0b0tleVdyYXAuaAogCi0gICAgY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAog
ICAgIGNzcy9DU1NDb25kaXRpb25SdWxlLmgKICAgICBjc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZS5oCiAgICAgY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCkBAIC0zODksNiArMzg4LDggQEAgc2V0KFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGNzcy9TdHlsZVNoZWV0Q29udGVu
dHMuaAogICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5oCiAKKyAgICBjc3MvY2FsYy9DU1NDYWxjVmFs
dWUuaAorCiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXIuaAogICAgIGNzcy9wYXJzZXIvQ1NTUGFy
c2VyQ29udGV4dC5oCiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXJNb2RlLmgKQEAgLTEwMDMsNyAr
MTAwNCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBs
YXRmb3JtL0Fib3J0YWJsZVRhc2tRdWV1ZS5oCiAgICAgcGxhdGZvcm0vQ1BVTW9uaXRvci5oCi0g
ICAgcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5oCiAgICAgcGxhdGZvcm0vQ29sb3JDaG9vc2Vy
LmgKICAgICBwbGF0Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL0NvbnRl
bnRGaWx0ZXJVbmJsb2NrSGFuZGxlci5oCkBAIC0xMTU2LDYgKzExNTYsOSBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCiAKKyAgICBwbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uTm9kZQorICAgIHBsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5oCisKICAg
ICBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1FbmNyeXB0aW9uU2NoZW1lLmgKICAgICBwbGF0
Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmgKICAgICBwbGF0Zm9ybS9lbmNyeXB0ZWRt
ZWRpYS9DRE1JbnN0YW5jZS5oCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjc4MjM5KQor
KysgU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTcxOCw3ICs3
MTgsNiBAQCBjc3MvQ1NTQXNwZWN0UmF0aW9WYWx1ZS5jcHAKIGNzcy9DU1NCYXNpY1NoYXBlcy5j
cHAKIGNzcy9DU1NCb3JkZXJJbWFnZS5jcHAKIGNzcy9DU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUu
Y3BwCi1jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKIGNzcy9DU1NDYW52YXNWYWx1ZS5jcHAK
IGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCiBjc3MvQ1NTQ29uZGl0aW9uUnVs
ZS5jcHAKQEAgLTgyNSw2ICs4MjQsMTQgQEAgY3NzL1N0eWxlU2hlZXQuY3BwCiBjc3MvU3R5bGVT
aGVldENvbnRlbnRzLmNwcAogY3NzL1N0eWxlU2hlZXRMaXN0LmNwcAogY3NzL1RyYW5zZm9ybUZ1
bmN0aW9ucy5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwCitjc3MvY2Fs
Yy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwCitjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5v
ZGVQYXJzZXIuY3BwCitjc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5jcHAKK2Nzcy9jYWxjL0NT
U0NhbGNOZWdhdGVOb2RlLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCitj
c3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY1Zh
bHVlLmNwcAogY3NzL3BhcnNlci9DU1NBdFJ1bGVJRC5jcHAKIGNzcy9wYXJzZXIvQ1NTRGVmZXJy
ZWRQYXJzZXIuY3BwCiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTE4MTQsNyArMTgyMSw2
IEBAIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVPdmVyZmxvd1Njcm8KIHBhZ2Uvc2Nyb2xs
aW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlLmNwcAogcGFnZS9zY3JvbGxpbmcvU2Nyb2xs
aW5nVHJlZVNjcm9sbGluZ05vZGVEZWxlZ2F0ZS5jcHAKIHBhZ2Uvc2Nyb2xsaW5nL1RocmVhZGVk
U2Nyb2xsaW5nVHJlZS5jcHAKLXBsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuY3BwCiBwbGF0Zm9y
bS9Db250ZW50VHlwZS5jcHAKIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcAogcGxhdGZvcm0vQ29u
dGV4dE1lbnVJdGVtLmNwcApAQCAtMTkyOCw2ICsxOTM0LDE2IEBAIHBsYXRmb3JtL2F1ZGlvL1N0
ZXJlb1Bhbm5lci5jcHAKIHBsYXRmb3JtL2F1ZGlvL1VwU2FtcGxlci5jcHAKIHBsYXRmb3JtL2F1
ZGlvL1ZlY3Rvck1hdGguY3BwCiBwbGF0Zm9ybS9hdWRpby9aZXJvUG9sZS5jcHAKK3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb24uY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3Ro
LmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcAorcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
TnVtYmVyLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAKK3Bs
YXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNh
dGVnb3J5LmNwcAorcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcAogcGxhdGZvcm0v
ZW5jcnlwdGVkbWVkaWEvQ0RNRmFjdG9yeS5jcHAKIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NE
TUxvZ2dpbmcuY3BwCiBwbGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Qcml2YXRlLmNwcApJbmRl
eDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzU0LDcgKzEzNTQsNyBAQAogCQk0
OTlCM0VDNTEyOENDQzQ3MDBFNzI2QzIgLyogUGxhdGZvcm1DQUxheWVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OTlCM0VDMzEyOENDQzQ3MDBFNzI2
QzIgLyogUGxhdGZvcm1DQUxheWVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNDk5QjNFRDcxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5
ZXJDQS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5
QjNFRDUxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5OUIzRUREMTI4REI1MDIwMEU3
MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0OTlCM0VEQzEyOERCNTAxMDBFNzI2QzIgLyogUGxhdGZvcm1D
QUFuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTQ5QUUyRDhGMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ4RDEz
NEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTQ5QUUyRDhGMTM0RUU1MEMwMDcyOTIw
QSAvKiBDU1NDYWxjVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUFFMkQ5NzEz
NEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENh
bGN1bGF0aW9uVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk0OUFGMkQ2OTE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25p
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFG
MkQ2ODE0NDM1RDA1MDAxNkE3ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlDN0I5OTQxMDQyRDJE
MzAwMDlENDQ3IC8qIEpTV2ViR0xCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QzdCOTgxMTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVm
ZmVyLmggKi87IH07CkBAIC00MTkwLDYgKzQxOTAsMjIgQEAKIAkJQkNFRjQ1RjYwRTY4N0I1QzAw
MUMxMjg3IC8qIEpTVGV4dE1ldHJpY3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRUY0NUY0MEU2ODdCNUMwMDFDMTI4NyAvKiBKU1RleHRNZXRyaWNz
LmggKi87IH07CiAJCUJDRUY4NjlGMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1h
Yy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRUY4
NjlFMEU4NDRFOUQwMEE4NUNENSAvKiBTY3JvbGxiYXJUaGVtZU1hYy5tbSAqLzsgfTsKIAkJQkNF
RkUxRUIwRENBNUY2NDAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nvci5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNFRkUxRTkwRENBNUY2NDAwNzM5MjE5
IC8qIEpTWFNMVFByb2Nlc3Nvci5oICovOyB9OworCQlCQ0YxNjQ1MTI2NjI5RkM3MDAwMkY3RUYg
LyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ0RjI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlLmggKi87IH07CisJCUJDRjE2NDU1MjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQ0YxNjQ1MzI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZS5oICovOyB9OworCQlCQ0YxNjQ1OTI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05l
Z2F0ZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRjE2NDU3MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5oICovOyB9Owor
CQlCQ0YxNjQ1RDI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDVCMjY2MkEyMzcw
MDAyRjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9kZS5oICovOyB9OworCQlCQ0YxNjQ2MTI2NjJBMjhE
MDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDVGMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1ND
YWxjT3BlcmF0aW9uTm9kZS5oICovOyB9OworCQlCQ0YxNjQ2NTI2NjJBMzFBMDAwMkY3RUYgLyog
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ2MzI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlUGFyc2VyLmggKi87IH07CisJCUJDRjE2NDZBMjY2MkE5MzQwMDAyRjdFRiAv
KiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ2ODI2NjJBOTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVn
b3J5TWFwcGluZy5oICovOyB9OworCQlCQ0YxNjQ2RTI2NjJBQTUwMDAwMkY3RUYgLyogQ2FsY3Vs
YXRpb25DYXRlZ29yeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGMTY0NkQyNjYyQUE1MDAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuaCAq
LzsgfTsKKwkJQkNGMTY0NzIyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTm9kZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NzAy
NjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTm9kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUJDRjE2NDc2MjY2MkFCMzYwMDAyRjdF
RiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NzQyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNz
aW9uTnVtYmVyLmggKi87IH07CisJCUJDRjE2NDdBMjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhw
cmVzc2lvbkxlbmd0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQkNGMTY0NzgyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmgg
Ki87IH07CisJCUJDRjE2NDdFMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Yx
NjQ3QzI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oICovOyB9Owor
CQlCQ0YxNjQ4MjI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDgwMjY2
MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oICovOyB9OworCQlCQ0Yx
NjQ4NjI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDg0MjY2MkFDQTMw
MDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oICovOyB9OworCQlCQ0YxNjQ4QTI2
NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0ODgyNjYyQUQ1MjAwMDJG
N0VGIC8qIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCAqLzsgfTsKKwkJQkNGMTY0OEUyNjYy
QUREODAwMDJGN0VGIC8qIENhbGNPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0OEMyNjYyQUREODAwMDJGN0VGIC8qIENhbGNPcGVy
YXRvci5oICovOyB9OwogCQlCQ0Y3RTQ5MTEzN0NEN0M3MDAxRERBRTcgLyogQWRqdXN0Vmlld1Np
emVPck5vdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkNGNDhDRTYxMzcwRDExNDAwNEU4N0Q2IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ZBOTMwODEwMzMz
MTkzMDA3QjI1RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRkE5MzA3MTAzMzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJP
dmVyZmxvdy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUJDRkIyRTVFMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQjJFNUQwOTc5
RTQ2NDAwQkE3MDNEIC8qIENhY2hlZFJlc291cmNlQ2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTg0NDMsOCArODQ1OSw4IEBACiAJCTQ5
OUIzRUQ0MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gR3JhcGhpY3NMYXllckNBLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk5QjNFRDUxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNz
TGF5ZXJDQS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaGljc0xheWVy
Q0EuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDk5QjNFREMxMjhEQjUwMTAwRTcy
NkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gUGxhdGZvcm1DQUFuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk0OUFFMkQ4QzEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjdWxhdGlvblZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBB
IC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
OUFFMkQ4QzEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY1ZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxj
dWxhdGlvblZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGN1bGF0aW9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUFFMkQ5
NTEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWxjdWxhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTQ5QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGlzcGxheVJlZnJlc2hNb25p
dG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNDUyMSw2ICsxNDUzNywzOCBA
QAogCQlCQ0VGRTFEQzBEQ0E1Q0ZEMDA3MzkyMTkgLyogWFNMVFByb2Nlc3Nvci5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gWFNMVFByb2Nlc3Nvci5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUJDRUZFMUU4MERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNYU0xUUHJvY2Vzc29yLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNFRkUxRTkwRENBNUY2NDAwNzM5MjE5
IC8qIEpTWFNMVFByb2Nlc3Nvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBK
U1hTTFRQcm9jZXNzb3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NEYy
NjYyOUZDNzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkNGMTY0NTAyNjYyOUZDNzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0YxNjQ1MzI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDU0MjY2MkExMjIwMDAyRjdF
RiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0YxNjQ1NzI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTQ2FsY05lZ2F0ZU5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJQkNGMTY0NTgyNjYyQTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENTU0NhbGNOZWdhdGVOb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQkNGMTY0NUIyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNJbnZlcnROb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRjE2NDVDMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9k
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDVGMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxj
T3BlcmF0aW9uTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2MDI2NjJBMjhEMDAwMkY3RUYgLyog
Q1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY09wZXJh
dGlvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2MzI2NjJB
MzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQ0YxNjQ2NDI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
UGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNl
ci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDY4MjY2MkE5MzQwMDAy
RjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGND
YXRlZ29yeU1hcHBpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0Njky
NjYyQTkzNDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRjE2NDZEMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGN1bGF0aW9uQ2F0ZWdvcnkuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NkYyNjYyQUE2RjAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0
ZWdvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDcwMjY2MkFBQzMwMDAyRjdFRiAvKiBD
YWxjRXhwcmVzc2lvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25Ob2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDcxMjY2MkFBQzMwMDAyRjdFRiAv
KiBDYWxjRXhwcmVzc2lvbk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Np
b25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzQyNjYyQUIz
NjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNF
eHByZXNzaW9uTnVtYmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDc1
MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYWxjRXhwcmVzc2lvbk51bWJlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCUJDRjE2NDc4MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbkxlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ3OTI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25M
ZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3QzI2NjJBQkU3MDAwMkY3RUYgLyog
Q2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDdEMjY2MkFCRTcw
MDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENhbGNFeHByZXNzaW9uTmVnYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0YxNjQ4MDI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODEyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
SW52ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uSW52ZXJzaW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODQyNjYyQUNBMzAwMDJG
N0VGIC8qIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDg1
MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUJDRjE2NDg4MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODkyNjYyQUQ1MjAwMDJGN0VGIC8q
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDhDMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsY09wZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDhEMjY2
MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2Fs
Y09wZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGMzRBMzYxMUEy
MzFDRDAwQzcxODA0IC8qIE5hbWVkTm9kZU1hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBOYW1lZE5vZGVNYXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlCQ0Y0OENFNjEzNzBEMTE0MDA0RTg3RDYgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBZGp1c3RWaWV3U2l6ZU9yTm90Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUJDRkE5MzA3MTAzMzMxOTMwMDdCMjVEMSAvKiBS
ZW5kZXJPdmVyZmxvdy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJP
dmVyZmxvdy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjc4OTEsMTEgKzI3OTM5
LDYyIEBACiAJCQluYW1lID0gQ29uc3RydWN0b3JzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKIAkJfTsKKwkJQkNGMTY0NEQyNjYyOUY5QTAwMDJGN0VGIC8qIGNhbGMgKi8gPSB7CisJCQlp
c2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCUJDRjE2NDY5MjY2MkE5MzQwMDAy
RjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcCAqLywKKwkJCQlCQ0YxNjQ2ODI2NjJB
OTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oICovLAorCQkJCUJDRjE2NDUw
MjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwICovLAorCQkJCUJD
RjE2NDRGMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCAqLywKKwkJ
CQlCQ0YxNjQ2NDI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
LmNwcCAqLywKKwkJCQlCQ0YxNjQ2MzI2NjJBMzFBMDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyLmggKi8sCisJCQkJQkNGMTY0NUMyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0Nh
bGNJbnZlcnROb2RlLmNwcCAqLywKKwkJCQlCQ0YxNjQ1QjI2NjJBMjM3MDAwMkY3RUYgLyogQ1NT
Q2FsY0ludmVydE5vZGUuaCAqLywKKwkJCQlCQ0YxNjQ1ODI2NjJBMUU5MDAwMkY3RUYgLyogQ1NT
Q2FsY05lZ2F0ZU5vZGUuY3BwICovLAorCQkJCUJDRjE2NDU3MjY2MkExRTkwMDAyRjdFRiAvKiBD
U1NDYWxjTmVnYXRlTm9kZS5oICovLAorCQkJCUJDRjE2NDYwMjY2MkEyOEQwMDAyRjdFRiAvKiBD
U1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NUYyNjYyQTI4RDAwMDJGN0VG
IC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmggKi8sCisJCQkJQkNGMTY0NTQyNjYyQTEyMjAwMDJG
N0VGIC8qIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwICovLAorCQkJCUJDRjE2NDUzMjY2
MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmggKi8sCisJCQkJNDlB
RTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5jcHAgKi8sCisJCQkJNDlBRTJE
OEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5oICovLAorCQkJKTsKKwkJCXBhdGgg
PSBjYWxjOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJQkNGMTY0NkMyNjYy
QUEwQTAwMDJGN0VGIC8qIGNhbGMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxk
cmVuID0gKAorCQkJCUJDRjE2NDg5MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoLmNwcCAqLywKKwkJCQlCQ0YxNjQ4ODI2NjJBRDUyMDAwMkY3RUYgLyogQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aC5oICovLAorCQkJCUJDRjE2NDgxMjY2MkFDNTEwMDAyRjdFRiAv
KiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAgKi8sCisJCQkJQkNGMTY0ODAyNjYyQUM1MTAw
MDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmggKi8sCisJCQkJQkNGMTY0NzkyNjYy
QUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmNwcCAqLywKKwkJCQlCQ0YxNjQ3
ODI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguaCAqLywKKwkJCQlCQ0Yx
NjQ3RDI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAgKi8sCisJ
CQkJQkNGMTY0N0MyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAq
LywKKwkJCQlCQ0YxNjQ3MTI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmNw
cCAqLywKKwkJCQlCQ0YxNjQ3MDI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2Rl
LmggKi8sCisJCQkJQkNGMTY0NzUyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVt
YmVyLmNwcCAqLywKKwkJCQlCQ0YxNjQ3NDI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25OdW1iZXIuaCAqLywKKwkJCQlCQ0YxNjQ4NTI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJl
c3Npb25PcGVyYXRpb24uY3BwICovLAorCQkJCUJDRjE2NDg0MjY2MkFDQTMwMDAyRjdFRiAvKiBD
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oICovLAorCQkJCUJDRjE2NDhEMjY2MkFERDgwMDAyRjdF
RiAvKiBDYWxjT3BlcmF0b3IuY3BwICovLAorCQkJCUJDRjE2NDhDMjY2MkFERDgwMDAyRjdFRiAv
KiBDYWxjT3BlcmF0b3IuaCAqLywKKwkJCQlCQ0YxNjQ2RjI2NjJBQTZGMDAwMkY3RUYgLyogQ2Fs
Y3VsYXRpb25DYXRlZ29yeS5jcHAgKi8sCisJCQkJQkNGMTY0NkQyNjYyQUE1MDAwMDJGN0VGIC8q
IENhbGN1bGF0aW9uQ2F0ZWdvcnkuaCAqLywKKwkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3MjkyMEEg
LyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCisJCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBB
IC8qIENhbGN1bGF0aW9uVmFsdWUuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gY2FsYzsKKwkJCXNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCUJDRjFBNUJBMDk3ODMyMDkwMDYxQTEyMyAv
KiBwbGF0Zm9ybSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCiAJ
CQkJNDlFOTEyQTQwRUZBQzhFNjAwOUQwQ0FGIC8qIGFuaW1hdGlvbiAqLywKIAkJCQlGRDMxNjA0
MDEyQjAyNkEzMDBDMUEzNTkgLyogYXVkaW8gKi8sCisJCQkJQkNGMTY0NkMyNjYyQUEwQTAwMDJG
N0VGIC8qIGNhbGMgKi8sCiAJCQkJMUFFNDJGNjcwQUE0QjhDQjAwQzg2MTJEIC8qIGNmICovLAog
CQkJCUE1Qzk3NENFMTE0ODVGREEwMDY2RjJBQiAvKiBjb2NvYSAqLywKIAkJCQlDRDk0QTVDQjFG
NzFDQjQ2MDBGNTI1QzUgLyogZW5jcnlwdGVkbWVkaWEgKi8sCkBAIC0yNzkxMiw4ICsyODAxMSw2
IEBACiAJCQkJQjJDM0Q5RUMwRDAwNkMxRDAwRUY2RjI2IC8qIHRleHQgKi8sCiAJCQkJRTFFRThC
NkIyNDEyQjJBNzAwRTc5NEQ2IC8qIHhyICovLAogCQkJCURGREI5MTJDRjhFODhBNkRBMUFEMjY0
RiAvKiBBYm9ydGFibGVUYXNrUXVldWUuaCAqLywKLQkJCQk0OUFFMkQ5NDEzNEVFNUY5MDA3Mjky
MEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8sCi0JCQkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5
MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCAqLywKIAkJCQlDMzMwQTIyMTEzRUMxOTZCMDAwMEI0
NUIgLyogQ29sb3JDaG9vc2VyLmggKi8sCiAJCQkJQzM3Q0RFQkMxNDlFRjIwMzAwNDIwOTBEIC8q
IENvbG9yQ2hvb3NlckNsaWVudC5oICovLAogCQkJCUJDQzhDRkNBMDk4NkNEMjQwMDE0MEJGMiAv
KiBDb2xvckRhdGEuZ3BlcmYgKi8sCkBAIC0yOTcwNyw2ICsyOTgwNCw3IEBACiAJCUY1MjNEMTg0
MDJERTQyRTgwMTg2MzVDQSAvKiBjc3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCUJDRjE2NDREMjY2MjlGOUEwMDAyRjdFRiAvKiBjYWxjICovLAogCQkJ
CTk0NkQzNzI3MUQ2Q0IyMjUwMDc3MDg0RiAvKiBwYXJzZXIgKi8sCiAJCQkJNEJBRkQwREEyMTky
MUVBRDAwQzBBQjY0IC8qIHR5cGVkb20gKi8sCiAJCQkJRkJENkFGODQxNUVGMjFENDAwOEI3MTEw
IC8qIEJhc2ljU2hhcGVGdW5jdGlvbnMuY3BwICovLApAQCAtMjk3MjAsOCArMjk4MTgsNiBAQAog
CQkJCUUxNkE4NEY4MTRDODVDQ0MwMDI5NzdERiAvKiBDU1NCb3JkZXJJbWFnZS5oICovLAogCQkJ
CUJDMjc0QjMwMTQwRUJFRDgwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuY3Bw
ICovLAogCQkJCUJDMjc0QjJFMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWUuaCAqLywKLQkJCQk0OUFFMkQ4QzEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHAgKi8sCi0JCQkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1
bGF0aW9uVmFsdWUuaCAqLywKIAkJCQlCQzYwNEE0MjBEQjU2MzRFMDAyMDQ3MzkgLyogQ1NTQ2Fu
dmFzVmFsdWUuY3BwICovLAogCQkJCUJDNjA0OUNCMERCNTYwQzIwMDIwNDczOSAvKiBDU1NDYW52
YXNWYWx1ZS5oICovLAogCQkJCUJDRUE0NzdDMDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uY3BwICovLApAQCAtMzE4MTEsNiArMzE5MDcsMTUgQEAKIAkJCQk0
MUQxMjlEMzFGM0QwRjE2MDBEMTVFNDcgLyogQ2FjaGVTdG9yYWdlQ29ubmVjdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDFEMTI5RDUxRjNEMEY2OTAwRDE1RTQ3IC8qIENhY2hlU3RvcmFnZVBy
b3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDNBRjhFNzFBQzVCN0VDMDBDQTcxN0UgLyog
Q2FjaGVWYWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ4QTI2NjJBRDUyMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
QkNGMTY0ODIyNjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmggaW4g
SGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3QTI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25MZW5ndGguaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDdFMjY2MkFCRTcwMDAyRjdFRiAv
KiBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ3MjI2
NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQ0YxNjQ3NjI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDRjE2NDg2MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0OEUyNjYyQUREODAwMDJGN0VG
IC8qIENhbGNPcGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NkUyNjYyQUE1MDAw
MDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5QUUy
RDk3MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QzFFOEQwMTFFRDBDMkRBMDBCMUQ5ODMgLyogQ2FsbGJhY2tSZXN1bHQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUVGQ0M2QzhGMjBGRTkxNDQwMEEyMzIxQiAvKiBDYW52YXNBY3Rpdml0eVJl
Y29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA4MSw3ICszMjE4NiwxNCBAQAogCQkJCUZCRDZB
Rjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTE2QTg0RkExNEM4NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRlckltYWdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzI3NEIyRjE0MEVCRUIyMDBFQURGQTYgLyogQ1NTQm9yZGVySW1hZ2VTbGlj
ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyog
Q1NTQ2FsY3VsYXRpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NkEyNjYyQTkz
NDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDUxMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDRjE2NDY1MjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDVEMjY2MkEyMzcwMDAy
RjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NTky
NjYyQTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQ0YxNjQ2MTI2NjJBMjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDRjE2NDU1MjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQk0OUFFMkQ4RjEzNEVFNTBDMDA3Mjky
MEEgLyogQ1NTQ2FsY1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzYwNDlDQzBEQjU2MEMy
MDAyMDQ3MzkgLyogQ1NTQ2FudmFzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0Nzkw
MDk3Q0FBQzgwMDk0QzlFNCAvKiBDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTkzMEFBQzlBMjUwRUI4NDkwMDEzREE5RiAvKiBDU1NDb25kaXRpb25SdWxl
LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlv
blZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5jcHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1ND
YWxjdWxhdGlvblZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDIxOTAgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5o
IgotCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW5SYW5n
ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgPHd0Zi9NYXRo
RXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgotI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KLQotc3RhdGljIGNvbnN0IGludCBtYXhFeHByZXNzaW9u
RGVwdGggPSAxMDA7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLWNsYXNzIENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU7Ci1jbGFzcyBDU1NDYWxjT3BlcmF0aW9uTm9kZTsKLWNsYXNzIENTU0NhbGNO
ZWdhdGVOb2RlOwotY2xhc3MgQ1NTQ2FsY0ludmVydE5vZGU7Ci19Ci0KLVNQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
LCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxj
UHJpbWl0aXZlVmFsdWUpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9O
X05PREUoQ1NTQ2FsY09wZXJhdGlvbk5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhw
cmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNPcGVyYXRpb24pCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY05lZ2F0ZU5vZGUsIHR5cGUoKSA9PSBX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNOZWdhdGUpCi1TUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY0ludmVydE5v
ZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0Nh
bGNJbnZlcnQpCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIFJlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmLCBjb25z
dCBSZW5kZXJTdHlsZSYpOwotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNy
ZWF0ZUNTUyhjb25zdCBMZW5ndGgmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwotCi1zdGF0aWMgVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlJiBub2RlKQotewotICAgIG5vZGUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwotfQot
Ci1zdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYWxjVW5pdENhdGVnb3J5KENTU1VuaXRUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X05VTUJFUjoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19F
WFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxIUzoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfQ0hTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1ZNQVg6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpMZW5ndGg7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgICAg
IHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OwotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19ERUc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfR1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAg
ICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOwotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19NUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUzoKLSAgICAgICAgcmV0
dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0haOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6Ci0gICAgICAgIHJldHVybiBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIH0KLX0KLQotc3RhdGljIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBl
IHR5cGUpCi17Ci0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X05VTUJFUjoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NN
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19QQzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKLSAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UEVSQ0VOVEFHRToKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19UVVJOOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5n
bGU7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19TOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfSFo6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoK
LSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UkVNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfQ0hTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNQVg6Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIH0KLX0KLQotc3RhdGljIENTU1VuaXRU
eXBlIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxjdWxhdGlvbkNh
dGVnb3J5IGNhdGVnb3J5KQotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKLSAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
OwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiByZXR1cm4gQ1NTVW5pdFR5
cGU6OkNTU19QWDsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHJldHVy
biBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpBbmdsZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfREVHOwotICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6VGltZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTVM7Ci0gICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NT
X0haOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudExlbmd0aDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwot
fQotCi1zdGF0aWMgYm9vbCBoYXNEb3VibGVWYWx1ZShDU1NVbml0VHlwZSB0eXBlKQotewotICAg
IHN3aXRjaCAodHlwZSkgewotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0VNUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19DSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lO
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19UVVJOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSFo6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfRElNRU5TSU9OOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVkg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNQVg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQ
UFg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQSToKLSAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfRFBDTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRlI6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1E6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1VOS05PV046Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NUUklO
RzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRk9OVF9GQU1JTFk6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1VSSToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSURFTlQ6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0FUVFI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NP
VU5URVI6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFQ1Q6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1JHQkNPTE9SOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQUlSOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VTklDT0RFX1JBTkdFOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19DT1VOVEVSX05BTUU6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NIQVBFOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19RVUlSS1lfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19DQUxDX1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUFJPUEVSVFlfSUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZB
TFVFX0lEOgotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfTsKLSAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXN0YXRpYyBDU1NWYWx1ZUlEIGZ1bmN0
aW9uRnJvbU9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0g
ICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJh
Y3Q6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgotICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpEaXZpZGU6Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7Ci0gICAgY2FzZSBDYWxj
T3BlcmF0b3I6Ok1pbjoKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlTWluOwotICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNYXg6Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZU1heDsKLSAgICBjYXNlIENh
bGNPcGVyYXRvcjo6Q2xhbXA6Ci0gICAgICAgIHJldHVybiBDU1NWYWx1ZUNsYW1wOwotICAgIH0K
LSAgICByZXR1cm4gQ1NTVmFsdWVDYWxjOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3RhdGlj
IFN0cmluZyBwcmV0dHlQcmludE5vZGUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2Rl
KQotewotICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOwotICAgIG11bHRpbGluZVN0cmVh
bSA8PCBub2RlOwotICAgIHJldHVybiBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOwotfQotCi1z
dGF0aWMgU3RyaW5nIHByZXR0eVByaW50Tm9kZXMoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+PiYgbm9kZXMpCi17Ci0gICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07
Ci0gICAgbXVsdGlsaW5lU3RyZWFtIDw8IG5vZGVzOwotICAgIHJldHVybiBtdWx0aWxpbmVTdHJl
YW0ucmVsZWFzZSgpOwotfQotI2VuZGlmCi0KLWNsYXNzIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+IGNyZWF0ZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCi0gICAgewot
ICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFdU
Rk1vdmUodmFsdWUpKSk7Ci0gICAgfQotCi0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NVbml0VHlwZSB0eXBlKQotICAg
IHsKLSAgICAgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHZhbHVlKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSkpKTsKLSAgICB9
Ci0KLSAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1
cm4gbV92YWx1ZS0+Y3NzVGV4dCgpOwotICAgIH0KLQotICAgIENTU1VuaXRUeXBlIHByaW1pdGl2
ZVR5cGUoKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPnByaW1p
dGl2ZVR5cGUoKTsKLSAgICB9Ci0KLSAgICBib29sIGlzTnVtZXJpY1ZhbHVlKCkgY29uc3Q7Ci0g
ICAgYm9vbCBpc05lZ2F0aXZlKCkgY29uc3Q7Ci0KLSAgICB2b2lkIG5lZ2F0ZSgpOwotICAgIHZv
aWQgaW52ZXJ0KCk7Ci0KLSAgICBlbnVtIGNsYXNzIFVuaXRDb252ZXJzaW9uIHsKLSAgICAgICAg
SW52YWxpZCwKLSAgICAgICAgUHJlc2VydmUsCi0gICAgICAgIENhbm9uaWNhbGl6ZQotICAgIH07
Ci0gICAgdm9pZCBhZGQoY29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSYsIFVuaXRDb252
ZXJzaW9uID0gVW5pdENvbnZlcnNpb246OlByZXNlcnZlKTsKLSAgICB2b2lkIG11bHRpcGx5KGRv
dWJsZSk7Ci0KLSAgICB2b2lkIGNvbnZlcnRUb1VuaXRUeXBlKENTU1VuaXRUeXBlKTsKLSAgICB2
b2lkIGNhbm9uaWNhbGl6ZVVuaXQoKTsKLQotICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBi
b29sIGlzWmVybygpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gIW1fdmFsdWUt
PmRvdWJsZVZhbHVlKCk7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QgZmluYWw7Ci0gICAgVHlwZSB0eXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKLQotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3Ro
UHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotICAgIHZv
aWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsK
LQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0KLXByaXZhdGU6Ci0g
ICAgZXhwbGljaXQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShSZWY8Q1NTUHJpbWl0aXZlVmFs
dWU+JiYgdmFsdWUpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhbGNVbml0Q2F0
ZWdvcnkodmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkpCi0gICAgICAgICwgbV92YWx1ZShXVEZNb3Zl
KHZhbHVlKSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3Zh
bHVlOwotfTsKLQotLy8gRklYTUU6IFVzZSBjYWxjVW5pdENhdGVnb3J5PwotYm9vbCBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjppc051bWVyaWNWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fdmFsdWUtPmlzTGVuZ3RoKCkgfHwgbV92YWx1ZS0+aXNOdW1iZXIoKSB8fCBtX3ZhbHVlLT5p
c1BlcmNlbnRhZ2UoKSB8fCBtX3ZhbHVlLT5pc0FuZ2xlKCkKLSAgICAgICAgfHwgbV92YWx1ZS0+
aXNUaW1lKCkgfHwgbV92YWx1ZS0+aXNSZXNvbHV0aW9uKCkgfHwgbV92YWx1ZS0+aXNGbGV4KCkg
fHwgbV92YWx1ZS0+aXNGcmVxdWVuY3koKTsKLX0KLQotYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjppc05lZ2F0aXZlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXNOdW1lcmljVmFsdWUo
KSAmJiBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpIDwgMC4wOwotfQotCi12b2lkIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6Om5lZ2F0ZSgpCi17Ci0gICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVlKCkp
OwotICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuMCAtIG1fdmFsdWUt
PmRvdWJsZVZhbHVlKCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci19Ci0KLXZvaWQgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aW52ZXJ0KCkKLXsKLSAgICBBU1NFUlQoaXNOdW1lcmlj
VmFsdWUoKSk7Ci0gICAgaWYgKCFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpKQotICAgICAgICBtX3Zh
bHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OmluZmluaXR5KCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICBtX3ZhbHVl
ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxLjAgLyBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgp
LCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU6OmFkZChjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiBub2RlLCBVbml0
Q29udmVyc2lvbiB1bml0Q29udmVyc2lvbikKLXsKLSAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFs
dWUtPnByaW1pdGl2ZVR5cGUoKTsKLQotICAgIHN3aXRjaCAodW5pdENvbnZlcnNpb24pIHsKLSAg
ICBjYXNlIFVuaXRDb252ZXJzaW9uOjpJbnZhbGlkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6UHJlc2VydmU6
Ci0gICAgICAgIEFTU0VSVChub2RlLnByaW1pdGl2ZVR5cGUoKSA9PSB2YWx1ZVR5cGUpOwotICAg
ICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3VibGVW
YWx1ZSgpICsgbm9kZS5kb3VibGVWYWx1ZSh2YWx1ZVR5cGUpLCB2YWx1ZVR5cGUpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIFVuaXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU6IHsKLSAgICAg
ICAgYXV0byB2YWx1ZUNhdGVnb3J5ID0gdW5pdENhdGVnb3J5KHZhbHVlVHlwZSk7Ci0gICAgICAg
IC8vIEZJWE1FOiBJdCdzIGF3a3dhcmQgdGhhdCBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVnb3J5
KCkgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudC4KLSAg
ICAgICAgYXV0byBjYW5vbmljYWxUeXBlID0gdmFsdWVDYXRlZ29yeSA9PSBDU1NVbml0Q2F0ZWdv
cnk6OlBlcmNlbnQgPyBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UgOiBjYW5vbmljYWxVbml0
VHlwZUZvckNhdGVnb3J5KHZhbHVlQ2F0ZWdvcnkpOwotICAgICAgICBBU1NFUlQoY2Fub25pY2Fs
VHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV04pOwotICAgICAgICBkb3VibGUgbGVmdFZh
bHVlID0gbV92YWx1ZS0+ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7Ci0gICAgICAgIGRvdWJs
ZSByaWdodFZhbHVlID0gbm9kZS5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKLSAgICAgICAg
bV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVmdFZhbHVlICsgcmlnaHRWYWx1
ZSwgY2Fub25pY2FsVHlwZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkoZG91YmxlIG11bHRpcGxpZXIp
Ci17Ci0gICAgYXV0byB2YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAg
QVNTRVJUKGhhc0RvdWJsZVZhbHVlKHZhbHVlVHlwZSkpOwotICAgIG1fdmFsdWUgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKHZhbHVlVHlwZSkgKiBtdWx0
aXBsaWVyLCB2YWx1ZVR5cGUpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
OmNvbnZlcnRUb1VuaXRUeXBlKENTU1VuaXRUeXBlIHVuaXRUeXBlKQotewotICAgIEFTU0VSVCh1
bml0Q2F0ZWdvcnkodW5pdFR5cGUpID09IHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVU
eXBlKCkpKTsKLSAgICBkb3VibGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1bml0
VHlwZSk7Ci0gICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmV3VmFsdWUs
IHVuaXRUeXBlKTsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmlj
YWxpemVVbml0KCkKLXsKLSAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZv
ckNvbWJpbmF0aW9uKG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci0gICAgaWYgKGNhdGVnb3J5
ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGNhbm9uaWNhbFR5cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdv
cnkoY2F0ZWdvcnkpOwotICAgIGlmIChjYW5vbmljYWxUeXBlID09IG1fdmFsdWUtPnByaW1pdGl2
ZVR5cGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZG91YmxlIG5ld1ZhbHVlID0gbV92YWx1
ZS0+ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7Ci0gICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUobmV3VmFsdWUsIGNhbm9uaWNhbFR5cGUpOwotfQotCi1zdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVh
dGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKLSAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2Fs
Y0V4cHJlc3Npb25OdW1iZXI+KG1fdmFsdWUtPmZsb2F0VmFsdWUoKSk7Ci0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNF
eHByZXNzaW9uTGVuZ3RoPihMZW5ndGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4oY29u
dmVyc2lvbkRhdGEpLCBMZW5ndGhUeXBlOjpGaXhlZCkpOwotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRM
ZW5ndGg6IHsKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+
KG1fdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNlbnRD
b252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSkpOwotICAgIH0KLSAgICAvLyBPbmx5IHR5cGVzIHRo
YXQgY291bGQgYmUgcGFydCBvZiBhIExlbmd0aCBleHByZXNzaW9uIGNhbiBiZSBjb252ZXJ0ZWQK
LSAgICAvLyB0byBhIENhbGNFeHByZXNzaW9uTm9kZS4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlciBtYWtlcyBubyBzZW5zZSBhcyBhIExlbmd0aC4KLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpBbmdsZToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6Ci0gICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpPdGhlcjoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBudWxscHRyOwotfQotCi1kb3VibGUgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUp
IGNvbnN0Ci17Ci0gICAgaWYgKGhhc0RvdWJsZVZhbHVlKHVuaXRUeXBlKSkgewotICAgICAgICAv
LyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpID09IHVuaXRDYXRlZ29yeSh1bml0VHlwZSkpLCBidXQgb25seSB3aGVuIGFsbCBj
YWxsZXJzIGFyZSBmaXhlZCAoZS5nLiB3ZWJraXQub3JnL2IvMjA0ODI2KS4KLSAgICAgICAgaWYg
KHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpICE9IHVuaXRDYXRlZ29yeSh1
bml0VHlwZSkpIHsKLSAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwg
IkNhbGxpbmcgZG91YmxlVmFsdWUoKSB3aXRoIHVuaXQgIiA8PCB1bml0VHlwZSA8PCAiIG9uIGEg
bm9kZSBvZiB1bml0IHR5cGUgIiA8PCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPDwgIiB3aGlj
aCBpcyBpbmNvbXBhdGlibGUiKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0K
LSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKLSAgICB9Ci0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWRvdWJsZSBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChjYXRl
Z29yeSgpKSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Ci0gICAgICAg
IHJldHVybiBtX3ZhbHVlLT5jb21wdXRlTGVuZ3RoPGRvdWJsZT4oY29udmVyc2lvbkRhdGEpOwot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVl
KCk7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OkFuZ2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVy
biAwOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJlY3RD
b21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykg
Y29uc3QKLXsKLSAgICBtX3ZhbHVlLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVu
Y2llcyh2YWx1ZXMpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxl
Y3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5
SUQ+JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdFJvb3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6ZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiBjb21wYXJlQ1NTVmFsdWUobV92YWx1ZSwgc3RhdGljX2Nhc3Q8
Y29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSY+KG90aGVyKS5tX3ZhbHVlKTsKLX0KLQot
dm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25z
dAotewotICAgIHRzIDw8ICJ2YWx1ZSAiIDw8IG1fdmFsdWUtPmN1c3RvbUNTU1RleHQoKSA8PCAi
IChjYXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGU6ICIgPDwgcHJpbWl0aXZlVHlw
ZSgpIDw8ICIpIjsKLX0KLQotY2xhc3MgQ1NTQ2FsY05lZ2F0ZU5vZGUgZmluYWwgOiBwdWJsaWMg
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNO
ZWdhdGVOb2RlPiBjcmVhdGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNOZWdhdGVOb2RlKFdURk1v
dmUoY2hpbGQpKSk7Ci0gICAgfQotCi0gICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBj
aGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLSAgICBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmIGNoaWxkKCkgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi0gICAgdm9pZCBz
ZXRDaGlsZChSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBX
VEZNb3ZlKGNoaWxkKTsgfQotCi1wcml2YXRlOgotICAgIENTU0NhbGNOZWdhdGVOb2RlKFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlKGNoaWxkLT5jYXRlZ29yeSgpKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGls
ZCkpCi0gICAgewotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5v
ZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
KSBjb25zdCBmaW5hbDsKLQotICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4g
bV9jaGlsZC0+aXNaZXJvKCk7IH0KLSAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUg
dW5pdFR5cGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIC1tX2NoaWxkLT5kb3VibGVWYWx1ZSh1bml0
VHlwZSk7IH0KLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGls
ZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsgfQotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNzc0NhbGNOZWdhdGU7IH0KLSAgICBDU1NVbml0VHlw
ZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZl
VHlwZSgpOyB9Ci0KLSAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9j
aGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7
IH0KLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhI
YXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQt
PmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsg
fQotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2Fs
Y0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24o
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17
Ci0gICAgYXV0byBjaGlsZE5vZGUgPSBtX2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252
ZXJzaW9uRGF0YSk7Ci0gICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OZWdhdGlv
bj4oV1RGTW92ZShjaGlsZE5vZGUpKTsKLX0KLQotdm9pZCBDU1NDYWxjTmVnYXRlTm9kZTo6ZHVt
cChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiLSIgPDwgbV9jaGlsZC5nZXQo
KTsKLX0KLQotY2xhc3MgQ1NTQ2FsY0ludmVydE5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNJbnZlcnROb2Rl
PiBjcmVhdGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNJbnZlcnROb2RlKFdURk1vdmUoY2hpbGQp
KSk7Ci0gICAgfQotCi0gICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUm
IGNoaWxkKCkgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi0gICAgdm9pZCBzZXRDaGlsZChS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNo
aWxkKTsgfQotCi1wcml2YXRlOgotICAgIENTU0NhbGNJbnZlcnROb2RlKFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgY2hpbGQpCi0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNo
aWxkLT5jYXRlZ29yeSgpKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCi0gICAg
ewotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0
ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBm
aW5hbDsKLQotICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+
aXNaZXJvKCk7IH0KLSAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZp
bmFsOwotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIFR5cGU6OkNzc0NhbGNJbnZlcnQ7IH0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAg
ICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NT
UHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERp
cmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLSAgICB2b2lkIGNv
bGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3Bl
cnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RS
b290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQotCi0gICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKLQotICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1zdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2Rl
PiBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGls
ZE5vZGUgPSBtX2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Ci0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KFdURk1vdmUoY2hp
bGROb2RlKSk7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUoQ1NT
VW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGlsZFZhbHVlID0gbV9jaGls
ZC0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOwotICAgIGlmICghY2hpbGRWYWx1ZSkKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICByZXR1
cm4gMS4wIC8gY2hpbGRWYWx1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNJbnZlcnROb2RlOjpjb21w
dXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRh
dGEpIGNvbnN0Ci17Ci0gICAgYXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+Y29tcHV0ZUxlbmd0
aFB4KGNvbnZlcnNpb25EYXRhKTsKLSAgICBpZiAoIWNoaWxkVmFsdWUpCi0gICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Ci0gICAgcmV0dXJuIDEu
MCAvIGNoaWxkVmFsdWU7Ci19Ci0KLXZvaWQgQ1NTQ2FsY0ludmVydE5vZGU6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgIjEvIiA8PCBtX2NoaWxkLmdldCgpOwotfQot
Ci0vLyBUaGlzIGlzIHRoZSByZXN1bHQgb2YgdGhlICJUbyBhZGQgdHdvIHR5cGVzIHR5cGUxIGFu
ZCB0eXBlMiwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOiIgcnVsZXMuCi0KLXN0YXRpYyBj
b25zdCBDYWxjdWxhdGlvbkNhdGVnb3J5IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVu
c2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSldW3N0YXRpY19jYXN0PHVuc2lnbmVk
PihDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSldID0gewotLy8gICAgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TnVtYmVyICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoICAgICAgICAg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudE51bWJlciAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAotICAgIHsg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIg
fSwgLy8gICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIKLSAgICB7IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgg
fSwgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoCi0gICAgeyBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LCAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRO
dW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudE51bWJlcgotICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3Ro
ZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAg
ICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCB9LCAvLyBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoCi19OwotCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRl
LCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9w
KQotewotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbGVmdENhdGVnb3J5ID0gbGVmdFNpZGUuY2F0
ZWdvcnkoKTsKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IHJpZ2h0Q2F0ZWdvcnkgPSByaWdodFNp
ZGUuY2F0ZWdvcnkoKTsKLSAgICBBU1NFUlQobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpOwotICAgIEFTU0VSVChyaWdodENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpOwotCi0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpBZGQ6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgotICAgICAgICBpZiAobGVm
dENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUgJiYgcmlnaHRDYXRlZ29yeSA8
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQotICAgICAgICAgICAgcmV0dXJuIGFkZFN1YnRy
YWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihsZWZ0Q2F0ZWdvcnkpXVtzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4ocmlnaHRDYXRlZ29yeSldOwotICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09
IHJpZ2h0Q2F0ZWdvcnkpCi0gICAgICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5OwotICAgICAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok11bHRpcGx5OgotICAgICAgICBpZiAobGVmdENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlciAmJiByaWdodENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlcikKLSAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAg
ICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIg
PyByaWdodENhdGVnb3J5IDogbGVmdENhdGVnb3J5OwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpE
aXZpZGU6Ci0gICAgICAgIGlmIChyaWdodENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciB8fCByaWdodFNpZGUuaXNaZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7Ci0gICAg
Y2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICB9Ci0KLSAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
T3RoZXI7Ci19Ci0KLS8vIEZJWE1FOiBOZWVkIHRvIGltcGxlbWVudCBjb3JyZWN0IGNhdGVnb3J5
IGNvbXB1dGF0aW9uIHBlcjoKLS8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3Nz
LXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1pbnZlcnQtYS10eXBlPgotLy8gVG8gaW52ZXJ0
IGEgdHlwZSB0eXBlLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6Ci0vLyBMZXQgcmVzdWx0
IGJlIGEgbmV3IHR5cGUgd2l0aCBhbiBpbml0aWFsbHkgZW1wdHkgb3JkZXJlZCBtYXAgYW5kIGFu
IGluaXRpYWxseSBudWxsIHBlcmNlbnQgaGludAotLy8gRm9yIGVhY2ggdW5pdCDihpIgZXhwb25l
bnQgb2YgdHlwZSwgc2V0IHJlc3VsdFt1bml0XSB0byAoLTEgKiBleHBvbmVudCkuCi1zdGF0aWMg
Q2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeUZvckludmVydChDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5KQotewotICAgIHJldHVybiBjYXRlZ29yeTsKLX0KLQotc3RhdGljIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+PiYgbm9kZXMsIENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBpZiAobm9kZXMu
aXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0K
LSAgICBhdXRvIGN1cnJlbnRDYXRlZ29yeSA9IG5vZGVzWzBdLT5jYXRlZ29yeSgpOwotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG5vZGVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNv
bnN0IGF1dG8mIG5vZGUgPSBub2Rlc1tpXS5nZXQoKTsKLSAgICAgICAgCi0gICAgICAgIGF1dG8g
dXNlZE9wZXJhdG9yID0gb3A7Ci0gICAgICAgIGlmIChub2RlLnR5cGUoKSA9PSBDU1NDYWxjRXhw
cmVzc2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNJbnZlcnQpCi0gICAgICAgICAgICB1c2VkT3BlcmF0
b3IgPSBDYWxjT3BlcmF0b3I6OkRpdmlkZTsKLQotICAgICAgICBhdXRvIG5leHRDYXRlZ29yeSA9
IG5vZGUuY2F0ZWdvcnkoKTsKLQotICAgICAgICBzd2l0Y2ggKHVzZWRPcGVyYXRvcikgewotICAg
ICAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6
U3VidHJhY3Q6Ci0gICAgICAgICAgICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhvdWRpbmkub3Jn
L2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtYWRkLXR3by10eXBlcz4KLSAgICAgICAg
ICAgIC8vIEF0IGEgKyBvciAtIHN1Yi1leHByZXNzaW9uLCBhdHRlbXB0IHRvIGFkZCB0aGUgdHlw
ZXMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZ3VtZW50cy4KLSAgICAgICAgICAgIC8vIElmIHRo
aXMgcmV0dXJucyBmYWlsdXJlLCB0aGUgZW50aXJlIGNhbGN1bGF0aW9u4oCZcyB0eXBlIGlzIGZh
aWx1cmUuIE90aGVyd2lzZSwgdGhlIHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1
cm5lZCB0eXBlLgotICAgICAgICAgICAgaWYgKGN1cnJlbnRDYXRlZ29yeSA8IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OkFuZ2xlICYmIG5leHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFu
Z2xlKQotICAgICAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29yeSA9IGFkZFN1YnRyYWN0UmVzdWx0
W3N0YXRpY19jYXN0PHVuc2lnbmVkPihjdXJyZW50Q2F0ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNp
Z25lZD4obmV4dENhdGVnb3J5KV07Ci0gICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2F0ZWdv
cnkgIT0gbmV4dENhdGVnb3J5KQotICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpNdWx0aXBseToKLSAgICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91
ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1tdWx0aXBseS10d28tdHlw
ZXM+Ci0gICAgICAgICAgICAvLyBBdCBhICogc3ViLWV4cHJlc3Npb24sIG11bHRpcGx5IHRoZSB0
eXBlcyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYXJndW1lbnRzLiBUaGUgc3ViLWV4cHJlc3Npb27i
gJlzIHR5cGUgaXMgdGhlIHJldHVybmVkIHJlc3VsdC4KLSAgICAgICAgICAgIGlmIChjdXJyZW50
Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICYmIG5leHRDYXRlZ29yeSAh
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotCi0gICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnkg
PSBjdXJyZW50Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyID8gbmV4dENh
dGVnb3J5IDogY3VycmVudENhdGVnb3J5OwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg
Y2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogewotICAgICAgICAgICAgYXV0byBpbnZlcnRDYXRl
Z29yeSA9IGNhdGVnb3J5Rm9ySW52ZXJ0KG5leHRDYXRlZ29yeSk7Ci0gICAgICAgICAgICAKLSAg
ICAgICAgICAgIC8vIEF0IGEgLyBzdWItZXhwcmVzc2lvbiwgbGV0IGxlZnQgdHlwZSBiZSB0aGUg
cmVzdWx0IG9mIGZpbmRpbmcgdGhlIHR5cGVzIG9mIGl0cyBsZWZ0IGFyZ3VtZW50LAotICAgICAg
ICAgICAgLy8gYW5kIHJpZ2h0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBl
cyBvZiBpdHMgcmlnaHQgYXJndW1lbnQgYW5kIHRoZW4gaW52ZXJ0aW5nIGl0LgotICAgICAgICAg
ICAgLy8gVGhlIHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXN1bHQgb2YgbXVsdGlw
bHlpbmcgdGhlIGxlZnQgdHlwZSBhbmQgcmlnaHQgdHlwZS4KLSAgICAgICAgICAgIGlmIChpbnZl
cnRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgbm9kZS5pc1plcm8o
KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpNaW46Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0gICAgICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpDbGFtcDoKLSAgICAgICAgICAgIC8vIFRoZSB0eXBlIG9mIGEgbWluKCksIG1h
eCgpLCBvciBjbGFtcCgpIGV4cHJlc3Npb24gaXMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgdGhlIHR5
cGVzIG9mIGl0cyBjb21tYS1zZXBhcmF0ZWQgY2FsY3VsYXRpb25zCi0gICAgICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBy
ZXR1cm4gY3VycmVudENhdGVnb3J5OwotfQotCi1zdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBy
ZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xhbXAoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29y
eSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotewotICAgIHN3aXRj
aCAoY2F0ZWdvcnkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6RnJlcXVlbmN5OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0g
ICAgICAgIHJldHVybiBjYXRlZ29yeTsKLQotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudDoKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnRMZW5ndGg7Ci0gICAgICAgIGlmIChkZXN0aW5hdGlvbkNhdGVnb3J5ID09IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TnVtYmVyOwotICAgICAgICByZXR1cm4gY2F0ZWdvcnk7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotfQotCi1zdGF0aWMgYm9v
bCBpc1NhbWVQYWlyKENhbGN1bGF0aW9uQ2F0ZWdvcnkgYSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBi
LCBDYWxjdWxhdGlvbkNhdGVnb3J5IHgsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgeSkKLXsKLSAgICBy
ZXR1cm4gKGEgPT0geCAmJiBiID09IHkpIHx8IChhID09IHkgJiYgYiA9PSB4KTsKLX0KLQotY2xh
c3MgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGUoQ2FsY09wZXJhdG9yLCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYmIHJpZ2h0U2lkZSk7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9u
Tm9kZT4gY3JlYXRlU3VtKFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1
ZXMpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZVByb2R1
Y3QoVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcyk7Ci0gICAgc3Rh
dGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlTWluT3JNYXhPckNsYW1wKENh
bGNPcGVyYXRvciwgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywg
Q2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KTsKLQotICAgIHN0YXRpYyBS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlmeShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYmKTsKLQotICAgIHN0YXRpYyB2b2lkIGJ1aWxkQ1NTVGV4dChjb25zdCBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUmLCBTdHJpbmdCdWlsZGVyJik7Ci0KLSAgICBDYWxjT3BlcmF0b3IgY2FsY09w
ZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvcjsgfQotICAgIGJvb2wgaXNDYWxjU3Vt
Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpBZGQ7IH0K
LSAgICBib29sIGlzQ2FsY1Byb2R1Y3ROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciA9
PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OyB9Ci0gICAgYm9vbCBpc01pbk9yTWF4Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRv
ciA9PSBDYWxjT3BlcmF0b3I6Ok1heDsgfQotICAgIGJvb2wgc2hvdWxkU29ydENoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gaXNDYWxjU3VtTm9kZSgpIHx8IGlzQ2FsY1Byb2R1Y3ROb2RlKCk7IH0K
LQotICAgIHZvaWQgaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3IpOwotICAg
IHZvaWQgY29tYmluZUNoaWxkcmVuKCk7Ci0gICAgCi0gICAgYm9vbCBjYW5Db21iaW5lQWxsQ2hp
bGRyZW4oKSBjb25zdDsKLQotICAgIGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQotICAgIFZlY3Rv
cjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGls
ZHJlbjsgfQotCi1wcml2YXRlOgotICAgIENTU0NhbGNPcGVyYXRpb25Ob2RlKENhbGN1bGF0aW9u
Q2F0ZWdvcnkgY2F0ZWdvcnksIENhbGNPcGVyYXRvciBvcCwgUmVmPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mJiBsZWZ0U2lkZSwgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUp
Ci0gICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5KQotICAgICAgICAsIG1f
b3BlcmF0b3Iob3ApCi0gICAgewotICAgICAgICBtX2NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2Fw
YWNpdHkoMik7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobGVm
dFNpZGUpKTsKLSAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdo
dFNpZGUpKTsKLSAgICB9Ci0KLSAgICBDU1NDYWxjT3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNh
dGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4mJiBjaGlsZHJlbikKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUo
Y2F0ZWdvcnkpCi0gICAgICAgICwgbV9vcGVyYXRvcihvcCkKLSAgICAgICAgLCBtX2NoaWxkcmVu
KFdURk1vdmUoY2hpbGRyZW4pKQotICAgIHsKLSAgICB9Ci0KLSAgICBUeXBlIHR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBDc3NDYWxjT3BlcmF0aW9uOyB9Ci0KLSAgICBib29sIGlzWmVybygp
IGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gIWRvdWJsZVZhbHVlKHByaW1pdGl2
ZVR5cGUoKSk7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlJikgY29uc3QgZmluYWw7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Np
b25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29u
c3QgZmluYWw7Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5h
bDsKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOwotICAg
IHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8
Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JikgY29uc3QgZmluYWw7Ci0KLSAgICBzdGF0aWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKiBnZXRO
dW1iZXJTaWRlKENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNpZGUsIENTU0NhbGNFeHByZXNz
aW9uTm9kZSYgcmlnaHRTaWRlKQotICAgIHsKLSAgICAgICAgaWYgKGxlZnRTaWRlLmNhdGVnb3J5
KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuICZs
ZWZ0U2lkZTsKLSAgICAgICAgaWYgKHJpZ2h0U2lkZS5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAgICAgIHJldHVybiAmcmlnaHRTaWRlOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICBkb3VibGUgZXZhbHVhdGUoY29uc3QgVmVj
dG9yPGRvdWJsZT4mIGNoaWxkcmVuKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIGV2YWx1
YXRlT3BlcmF0b3IobV9vcGVyYXRvciwgY2hpbGRyZW4pOwotICAgIH0KLQotICAgIHN0YXRpYyBk
b3VibGUgZXZhbHVhdGVPcGVyYXRvcihDYWxjT3BlcmF0b3IsIGNvbnN0IFZlY3Rvcjxkb3VibGU+
Jik7Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNpbXBsaWZ5Tm9kZShS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmLCBpbnQgZGVwdGgpOwotICAgIHN0YXRpYyBSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlmeVJlY3Vyc2l2ZShSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiYmLCBpbnQgZGVwdGgpOwotICAgIAotICAgIGVudW0gY2xhc3MgR3JvdXBpbmdQ
YXJlbnMgewotICAgICAgICBPbWl0LAotICAgICAgICBJbmNsdWRlCi0gICAgfTsKLSAgICBzdGF0
aWMgdm9pZCBidWlsZENTU1RleHRSZWN1cnNpdmUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
JiwgU3RyaW5nQnVpbGRlciYsIEdyb3VwaW5nUGFyZW5zID0gR3JvdXBpbmdQYXJlbnM6OkluY2x1
ZGUpOwotCi0gICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7Ci0gICAgVmVjdG9yPFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+PiBtX2NoaWxkcmVuOwotfTsKLQotUmVmUHRyPENTU0NhbGNPcGVy
YXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvciBvcCwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpCi17Ci0gICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmln
aHRTaWRlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFTU0VSVChvcCA9PSBDYWxj
T3BlcmF0b3I6OkFkZCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKLQotICAgIEFT
U0VSVChsZWZ0U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsK
LSAgICBBU1NFUlQocmlnaHRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
T3RoZXIpOwotCi0gICAgYXV0byBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0
U2lkZSwgKnJpZ2h0U2lkZSwgb3ApOwotICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFt
IDw8ICJGYWlsZWQgdG8gY3JlYXRlIENTU0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBu
b2RlIGJlY2F1c2UgdW5hYmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5
UHJpbnROb2RlKCpsZWZ0U2lkZSkgPDwgIiBhbmQgIiA8PCAqcmlnaHRTaWRlKTsKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxj
T3BlcmF0aW9uTm9kZShuZXdDYXRlZ29yeSwgb3AsIGxlZnRTaWRlLnJlbGVhc2VOb25OdWxsKCks
IHJpZ2h0U2lkZS5yZWxlYXNlTm9uTnVsbCgpKSk7Ci19Ci0KLVJlZlB0cjxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKQotewotICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRl
cm1pbmVDYXRlZ29yeSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6QWRkKTsKLSAgICBpZiAobmV3Q2F0
ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKLSAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBzdW0gbm9kZSBiZWNhdXNl
IHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXMo
dmFsdWVzKSk7Ci0gICAgICAgIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVz
LCBDYWxjT3BlcmF0b3I6OkFkZCk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQot
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnks
IENhbGNPcGVyYXRvcjo6QWRkLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotUmVmUHRyPENTU0Nh
bGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChWZWN0
b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKQotewotICAgIGlmICh2YWx1
ZXMuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gbmV3Q2F0
ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6TXVsdGlwbHkp
OwotICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRl
IHByb2R1Y3Qgbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAi
IDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwot
ICAgIH0KLQotICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3
Q2F0ZWdvcnksIENhbGNPcGVyYXRvcjo6TXVsdGlwbHksIFdURk1vdmUodmFsdWVzKSkpOwotfQot
Ci1SZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVh
dGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+JiYgdmFsdWVzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0
ZWdvcnkpCi17Ci0gICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG9wID09IENh
bGNPcGVyYXRvcjo6TWF4IHx8IG9wID09IENhbGNPcGVyYXRvcjo6Q2xhbXApOwotICAgIEFTU0VS
VF9JTVBMSUVTKG9wID09IENhbGNPcGVyYXRvcjo6Q2xhbXAsIHZhbHVlcy5zaXplKCkgPT0gMyk7
Ci0KLSAgICBPcHRpb25hbDxDYWxjdWxhdGlvbkNhdGVnb3J5PiBjYXRlZ29yeSA9IHN0ZDo6bnVs
bG9wdDsKLSAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7Ci0gICAgICAgIGF1dG8gdmFs
dWVDYXRlZ29yeSA9IHJlc29sdmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCh2YWx1ZS0+Y2F0ZWdv
cnkoKSwgZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0KLSAgICAgICAgQVNTRVJUKHZhbHVlQ2F0ZWdv
cnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7Ci0gICAgICAgIGlmICghY2F0ZWdvcnkp
IHsKLSAgICAgICAgICAgIGlmICh2YWx1ZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyKSB7Ci0gICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8
PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9k
ZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVBy
aW50Tm9kZXModmFsdWVzKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBjYXRlZ29yeSA9IHZhbHVlQ2F0ZWdvcnk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gdmFsdWVDYXRlZ29yeSkgewotICAgICAgICAg
ICAgaWYgKGlzU2FtZVBhaXIoY2F0ZWdvcnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3Ro
KSkgewotICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnks
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dE51bWJlcikpIHsKLSAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXI7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoY2F0ZWdvcnkudmFsdWUo
KSwgb3AsIFdURk1vdmUodmFsdWVzKSkpOwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2Rl
Ojpob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBBU1NF
UlQob3AgPT0gQ2FsY09wZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eSk7Ci0KLSAgICBhdXRvIGhhc0NoaWxkV2l0aE9wZXJhdG9yID0gWyZdIChDYWxjT3BlcmF0b3Ig
b3ApIHsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAg
ICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0
PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3Ap
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH07Ci0KLSAgICBpZiAoIWhhc0NoaWxkV2l0aE9wZXJhdG9yKG9wKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBu
ZXdDaGlsZHJlbjsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7
Ci0gICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25O
b2RlPihjaGlsZC5nZXQoKSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIGZvciAoYXV0byYgY2hp
bGRUb01vdmUgOiBjaGlsZHJlbikKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQo
V1RGTW92ZShjaGlsZFRvTW92ZSkpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5ld0No
aWxkcmVuLmFwcGVuZChXVEZNb3ZlKGNoaWxkKSk7Ci0gICAgfQotICAgIAotICAgIG5ld0NoaWxk
cmVuLnNocmlua1RvRml0KCk7Ci0gICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4p
OwotfQotCi1lbnVtIGNsYXNzIFNvcnRpbmdDYXRlZ29yeSB7Ci0gICAgTnVtYmVyLAotICAgIFBl
cmNlbnQsCi0gICAgRGltZW5zaW9uLAotICAgIE90aGVyCi19OwotCi1zdGF0aWMgU29ydGluZ0Nh
dGVnb3J5IHNvcnRpbmdDYXRlZ29yeUZvclR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpCi17Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBTb3J0aW5nQ2F0ZWdvcnkgc29ydE9yZGVyW10gPSB7Ci0gICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyLAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpQZXJj
ZW50LCAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LAotICAgICAgICBTb3J0
aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXIsCi0gICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5
OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwKLSAgICAgICAg
U29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpU
aW1lLAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpPdGhlciwg
ICAgICAgICAvLyBVT3RoZXIKLSAgICB9OwotCi0gICAgQ09NUElMRV9BU1NFUlQoQVJSQVlfU0la
RShzb3J0T3JkZXIpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcikgKyAxLCBzb3J0T3JkZXJfc2l6ZV9zaG91bGRfbWF0Y2hfVW5pdENhdGVnb3J5KTsK
LSAgICByZXR1cm4gc29ydE9yZGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihjYWxjVW5pdENhdGVn
b3J5KHVuaXRUeXBlKSldOwotfQotCi1zdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdDYXRl
Z29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCi17Ci0gICAgaWYgKGlzPENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQotICAgICAgICByZXR1cm4gc29ydGluZ0Nh
dGVnb3J5Rm9yVHlwZShub2RlLnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICByZXR1cm4gU29ydGlu
Z0NhdGVnb3J5OjpPdGhlcjsKLX0KLQotc3RhdGljIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGVG
b3JDb21iaW5hdGlvbihjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCi17Ci0gICAg
aWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQotICAgICAgICByZXR1cm4g
bm9kZS5wcmltaXRpdmVUeXBlKCk7Ci0gICAgCi0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1Nf
VU5LTk9XTjsKLX0KLQotc3RhdGljIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252
ZXJzaW9uIGNvbnZlcnNpb25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhDU1NVbml0VHlwZSBmaXJzdFR5
cGUsIENTU1VuaXRUeXBlIHNlY29uZFR5cGUpCi17Ci0gICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NV
bml0VHlwZTo6Q1NTX1VOS05PV04gfHwgc2Vjb25kVHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV04pCi0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29u
dmVyc2lvbjo6SW52YWxpZDsKLQotICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9u
Q2F0ZWdvcnlGb3JDb21iaW5hdGlvbihmaXJzdFR5cGUpOwotCi0gICAgLy8gQ29tcGF0aWJsZSB0
eXBlcy4KLSAgICBpZiAoZmlyc3RDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
ciAmJiBmaXJzdENhdGVnb3J5ID09IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihz
ZWNvbmRUeXBlKSkKLSAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVu
aXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU7Ci0KLSAgICAvLyBNYXRjaGluZyB0eXBlcy4KLSAg
ICBpZiAoZmlyc3RUeXBlID09IHNlY29uZFR5cGUgJiYgaGFzRG91YmxlVmFsdWUoZmlyc3RUeXBl
KSkKLSAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJz
aW9uOjpQcmVzZXJ2ZTsKLQotICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpV
bml0Q29udmVyc2lvbjo6SW52YWxpZDsKLX0KLQotYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
Y2FuQ29tYmluZUFsbENoaWxkcmVuKCkgY29uc3QKLXsKLSAgICBpZiAobV9jaGlsZHJlbi5zaXpl
KCkgPCAyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoIWlzPENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KG1fY2hpbGRyZW5bMF0pKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBhdXRvIGZpcnN0VW5pdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7
Ci0gICAgYXV0byBmaXJzdENhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0
aW9uKG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKSk7Ci0KLSAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBhdXRvJiBub2Rl
ID0gbV9jaGlsZHJlbltpXTsKLQotICAgICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU+KG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8g
bm9kZVVuaXRUeXBlID0gbm9kZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBhdXRvIG5vZGVD
YXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihub2RlVW5pdFR5cGUp
OwotCi0gICAgICAgIGlmIChub2RlQ2F0ZWdvcnkgIT0gZmlyc3RDYXRlZ29yeSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAobm9kZUNhdGVnb3J5ID09IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyICYmIG5vZGVVbml0VHlwZSAhPSBmaXJzdFVuaXRUeXBlKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFoYXNEb3VibGVW
YWx1ZShub2RlVW5pdFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQot
ICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5l
Q2hpbGRyZW4oKQotewotICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA8IDIpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmIChzaG91bGRTb3J0Q2hpbGRyZW4oKSkgewotICAgICAgICAvLyA8aHR0
cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jc29ydC1hLWNhbGN1bGF0aW9ucy1j
aGlsZHJlbj4KLSAgICAgICAgc3RkOjpzdGFibGVfc29ydChtX2NoaWxkcmVuLmJlZ2luKCksIG1f
Y2hpbGRyZW4uZW5kKCksIFtdKGNvbnN0IGF1dG8mIGZpcnN0LCBjb25zdCBhdXRvJiBzZWNvbmQp
IHsKLSAgICAgICAgICAgIC8vIFNvcnQgb3JkZXI6IG51bWJlciwgcGVyY2VudGFnZSwgZGltZW5z
aW9uLCBvdGhlci4KLSAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBmaXJzdENhdGVnb3J5ID0g
c29ydGluZ0NhdGVnb3J5KGZpcnN0LmdldCgpKTsKLSAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29y
eSBzZWNvbmRDYXRlZ29yeSA9IHNvcnRpbmdDYXRlZ29yeShzZWNvbmQuZ2V0KCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAoZmlyc3RDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6
OkRpbWVuc2lvbiAmJiBzZWNvbmRDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lv
bikgewotICAgICAgICAgICAgICAgIC8vIElmIG5vZGVzIGNvbnRhaW5zIGFueSBkaW1lbnNpb25z
LCByZW1vdmUgdGhlbSBmcm9tIG5vZGVzLCBzb3J0IHRoZW0gYnkgdGhlaXIgdW5pdHMsIGFuZCBh
cHBlbmQgdGhlbSB0byByZXQuCi0gICAgICAgICAgICAgICAgYXV0byBmaXJzdFVuaXRTdHJpbmcg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcoZmlyc3QtPnByaW1pdGl2ZVR5cGUo
KSk7Ci0gICAgICAgICAgICAgICAgYXV0byBzZWNvbmRVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OnVuaXRUeXBlU3RyaW5nKHNlY29uZC0+cHJpbWl0aXZlVHlwZSgpKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGZpcnN0VW5pdFN0cmluZywg
c2Vjb25kVW5pdFN0cmluZyk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oZmlyc3RDYXRlZ29yeSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oc2Vjb25kQ2F0ZWdvcnkpOwotICAgICAgICB9KTsKLQotICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQ2FsYywgc3RyZWFtIDw8ICJwb3N0LXNvcnQ6ICIgPDwgKnRoaXMpOwotICAgIH0KLQotICAg
IGlmIChjYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6OkFkZCkgewotICAgICAgICAvLyBG
b3IgZWFjaCBzZXQgb2Ygcm9vdOKAmXMgY2hpbGRyZW4gdGhhdCBhcmUgbnVtZXJpYyB2YWx1ZXMg
d2l0aCBpZGVudGljYWwgdW5pdHMsCi0gICAgICAgIC8vIHJlbW92ZSB0aG9zZSBjaGlsZHJlbiBh
bmQgcmVwbGFjZSB0aGVtIHdpdGggYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBjb250YWluaW5nCi0g
ICAgICAgIC8vIHRoZSBzdW0gb2YgdGhlIHJlbW92ZWQgbm9kZXMsIGFuZCB3aXRoIHRoZSBzYW1l
IHVuaXQuCi0gICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hp
bGRyZW47Ci0gICAgICAgIG5ld0NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGls
ZHJlbi5zaXplKCkpOwotICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGls
ZHJlblswXS5jb3B5UmVmKCkpOwotCi0gICAgICAgIENTU1VuaXRUeXBlIHByZXZpb3VzVHlwZSA9
IHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihuZXdDaGlsZHJlblswXS5nZXQoKSk7Ci0KLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsK
LSAgICAgICAgICAgIGF1dG8mIGN1cnJlbnROb2RlID0gbV9jaGlsZHJlbltpXTsKLSAgICAgICAg
ICAgIENTU1VuaXRUeXBlIGN1cnJlbnRUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9u
KGN1cnJlbnROb2RlLmdldCgpKTsKLQotICAgICAgICAgICAgYXV0byBjb252ZXJzaW9uVHlwZSA9
IGNvbnZlcnNpb25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhwcmV2aW91c1R5cGUsIGN1cnJlbnRUeXBl
KTsKLSAgICAgICAgICAgIGlmIChjb252ZXJzaW9uVHlwZSAhPSBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjpVbml0Q29udmVyc2lvbjo6SW52YWxpZCkgewotICAgICAgICAgICAgICAgIGRvd25j
YXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQoKSku
YWRkKGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGN1cnJlbnROb2RlLmdldCgp
KSwgY29udmVyc2lvblR5cGUpOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBwcmV2aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmlu
YXRpb24oY3VycmVudE5vZGUpOwotICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBw
ZW5kKGN1cnJlbnROb2RlLmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7Ci0gICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3Zl
KG5ld0NoaWxkcmVuKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChjYWxjT3Bl
cmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KSB7Ci0gICAgICAgIC8vIElmIHJvb3Qg
aGFzIG11bHRpcGxlIGNoaWxkcmVuIHRoYXQgYXJlIG51bWJlcnMgKG5vdCBwZXJjZW50YWdlcyBv
ciBkaW1lbnNpb25zKSwKLSAgICAgICAgLy8gcmVtb3ZlIHRoZW0gYW5kIHJlcGxhY2UgdGhlbSB3
aXRoIGEgc2luZ2xlIG51bWJlciBjb250YWluaW5nIHRoZSBwcm9kdWN0IG9mIHRoZSByZW1vdmVk
IG5vZGVzLgotICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDE7Ci0KLSAgICAgICAgLy8gU29y
dGluZyB3aWxsIGhhdmUgcHV0IHRoZSBudW1iZXIgbm9kZXMgZmlyc3QuCi0gICAgICAgIHVuc2ln
bmVkIGxlYWRpbmdOdW1iZXJOb2RlQ291bnQgPSAwOwotICAgICAgICBmb3IgKGF1dG8mIG5vZGUg
OiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgICAgICBhdXRvIG5vZGVUeXBlID0gcHJpbWl0aXZlVHlw
ZUZvckNvbWJpbmF0aW9uKG5vZGUuZ2V0KCkpOwotICAgICAgICAgICAgaWYgKG5vZGVUeXBlICE9
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBtdWx0aXBsaWVyICo9IG5vZGUtPmRvdWJsZVZhbHVlKENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKTsKLSAgICAgICAgICAgICsrbGVhZGluZ051bWJlck5vZGVDb3Vu
dDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKLSAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eShtX2NoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiBy
b290IGNvbnRhaW5zIG9ubHkgdHdvIGNoaWxkcmVuLCBvbmUgb2Ygd2hpY2ggaXMgYSBudW1iZXIg
KG5vdCBhIHBlcmNlbnRhZ2Ugb3IgZGltZW5zaW9uKSBhbmQgdGhlIG90aGVyIG9mCi0gICAgICAg
IC8vIHdoaWNoIGlzIGEgU3VtIHdob3NlIGNoaWxkcmVuIGFyZSBhbGwgbnVtZXJpYyB2YWx1ZXMs
IG11bHRpcGx5IGFsbCBvZiB0aGUgU3Vt4oCZcyBjaGlsZHJlbiBieSB0aGUgbnVtYmVyLCB0aGVu
Ci0gICAgICAgIC8vIHJldHVybiB0aGUgU3VtLgotICAgICAgICAvLyBUaGUgU3VtJ3MgY2hpbGRy
ZW4gc2ltcGxpZmljYXRpb24gd2lsbCBoYXZlIGhhcHBlbmVkIGFscmVhZHkuCi0gICAgICAgIGJv
b2wgZGlkTXVsdGlwbHkgPSBmYWxzZTsKLSAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291
bnQgJiYgbV9jaGlsZHJlbi5zaXplKCkgLSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID09IDEpIHsK
LSAgICAgICAgICAgIGF1dG8gbXVsdGlwbGljYW5kQ2F0ZWdvcnkgPSBjYWxjVW5pdENhdGVnb3J5
KHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkpOwot
ICAgICAgICAgICAgaWYgKG11bHRpcGxpY2FuZENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyKSB7Ci0gICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5k
KG1fY2hpbGRyZW4ubGFzdCgpLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgZG93bmNhc3Q8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW5bMF0uZ2V0KCkpLm11bHRpcGx5
KG11bHRpcGxpZXIpOwotICAgICAgICAgICAgICAgIGRpZE11bHRpcGx5ID0gdHJ1ZTsKLSAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFz
dCgpLmdldCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5s
YXN0KCkuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7Ci0gICAg
ICAgICAgICAgICAgLy8gSWYgd2UncmUgbXVsdGlwbHlpbmcgd2l0aCBhbm90aGVyIG9wZXJhdGlv
biB0aGF0IGlzIGFuIGFkZGl0aW9uIGFuZCBhbGwgdGhlIGFkZGVkIGNoaWxkcmVuCi0gICAgICAg
ICAgICAgICAgLy8gYXJlIHBlcmNlbnRhZ2VzIG9yIGRpbWVuc2lvbnMsIHdlIHNob3VsZCBtdWx0
aXBseSBlYWNoIGNoaWxkIGFuZCBtYWtlIHRoaXMgZXhwcmVzc2lvbiBhbgotICAgICAgICAgICAg
ICAgIC8vIGFkZGl0aW9uLgotICAgICAgICAgICAgICAgIGF1dG8gYWxsQ2hpbGRyZW5BcmVQcmlt
aXRpdmVWYWx1ZXMgPSBbXShjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
JiBjaGlsZHJlbikgLT4gYm9vbAotICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkLmdldCgpKSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICAgICAgfTsK
LQotICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJh
dGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKS5jaGlsZHJlbigpOwotICAgICAgICAg
ICAgICAgIGlmIChhbGxDaGlsZHJlbkFyZVByaW1pdGl2ZVZhbHVlcyhjaGlsZHJlbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQuY29weVJlZigpKTsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+
KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQoKSkubXVsdGlwbHkobXVsdGlwbGllcik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgbV9vcGVyYXRvciA9IENhbGNPcGVy
YXRvcjo6QWRkOwotICAgICAgICAgICAgICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCFk
aWRNdWx0aXBseSkgewotICAgICAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQpIHsK
LSAgICAgICAgICAgICAgICBhdXRvIG11bHRpcGxpZXJOb2RlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobXVsdGlwbGllciwgQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVIpKTsKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShtdWx0aXBsaWVyTm9kZSkpOwotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50OyBpIDwg
bV9jaGlsZHJlbi5zaXplKCk7ICsraSkKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNo
ZWNrZWRBcHBlbmQobV9jaGlsZHJlbltpXS5jb3B5UmVmKCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jaGlsZHJlbiA9IFdURk1v
dmUobmV3Q2hpbGRyZW4pOwotICAgIH0KLQotICAgIGlmIChpc01pbk9yTWF4Tm9kZSgpICYmIGNh
bkNvbWJpbmVBbGxDaGlsZHJlbigpKSB7Ci0gICAgICAgIGF1dG8gY29tYmluZWRVbml0VHlwZSA9
IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgYXV0byBjYXRlZ29yeSA9
IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihjb21iaW5lZFVuaXRUeXBlKTsKLSAg
ICAgICAgaWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQotICAgICAg
ICAgICAgY29tYmluZWRVbml0VHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25D
YXRlZ29yeShjYXRlZ29yeSk7Ci0KLSAgICAgICAgZG91YmxlIHJlc29sdmVkVmFsdWUgPSBkb3Vi
bGVWYWx1ZShjb21iaW5lZFVuaXRUeXBlKTsKLSAgICAgICAgYXV0byBuZXdDaGlsZCA9IENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJl
c29sdmVkVmFsdWUsIGNvbWJpbmVkVW5pdFR5cGUpKTsKLQotICAgICAgICBtX2NoaWxkcmVuLmNs
ZWFyKCk7Ci0gICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUobmV3Q2hpbGQpKTsKLSAg
ICB9Ci19Ci0KLS8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBs
aWZ5LWEtY2FsY3VsYXRpb24tdHJlZQotCi1SZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBy
b290Tm9kZSkKLXsKLSAgICByZXR1cm4gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShyb290Tm9k
ZSksIDApOwotfQotCi1SZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6c2ltcGxpZnlSZWN1cnNpdmUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290
Tm9kZSwgaW50IGRlcHRoKQotewotICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9v
dE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
T3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICAKLSAgICAgICAgYXV0byYg
Y2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byBj
aGlsZCA9IGNoaWxkcmVuW2ldLmNvcHlSZWYoKTsKLSAgICAgICAgICAgIGF1dG8gbmV3Tm9kZSA9
IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICAg
ICAgaWYgKG5ld05vZGUucHRyKCkgIT0gY2hpbGRyZW5baV0ucHRyKCkpCi0gICAgICAgICAgICAg
ICAgY2hpbGRyZW5baV0gPSBXVEZNb3ZlKG5ld05vZGUpOwotICAgICAgICB9Ci0gICAgfSBlbHNl
IGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIG5l
Z2F0ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwot
ICAgICAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjaGlsZCA9IG5lZ2F0ZU5vZGUuY2hp
bGQoKTsKLSAgICAgICAgYXV0byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShj
aGlsZCksIGRlcHRoICsgMSk7Ci0gICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9ICZuZWdhdGVO
b2RlLmNoaWxkKCkpCi0gICAgICAgICAgICBuZWdhdGVOb2RlLnNldENoaWxkKFdURk1vdmUobmV3
Tm9kZSkpOwotICAgIH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlKSkg
ewotICAgICAgICBhdXRvJiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+
KHJvb3ROb2RlLmdldCgpKTsKLSAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hp
bGQgPSBpbnZlcnROb2RlLmNoaWxkKCk7Ci0gICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5
UmVjdXJzaXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICBpZiAobmV3Tm9k
ZS5wdHIoKSAhPSAmaW52ZXJ0Tm9kZS5jaGlsZCgpKQotICAgICAgICAgICAgaW52ZXJ0Tm9kZS5z
ZXRDaGlsZChXVEZNb3ZlKG5ld05vZGUpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2ltcGxpZnlO
b2RlKFdURk1vdmUocm9vdE5vZGUpLCBkZXB0aCk7Ci19Ci0KLVJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJiByb290Tm9kZSwgaW50IGRlcHRoKQotewotICAgIGlmIChpczxDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgLy8gSWYgcm9vdCBpcyBh
IHBlcmNlbnRhZ2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSwg
YW5kIHRoZXJlIGlzIGVub3VnaCBpbmZvcm1hdGlvbgotICAgICAgICAvLyBhdmFpbGFibGUgdG8g
cmVzb2x2ZSBpdCwgZG8gc28sIGFuZCBleHByZXNzIHRoZSByZXN1bHRpbmcgbnVtZXJpYyB2YWx1
ZSBpbiB0aGUgYXBwcm9wcmlhdGUgY2Fub25pY2FsCi0gICAgICAgIC8vIHVuaXQuIFJldHVybiB0
aGUgdmFsdWUuCi0KLSAgICAgICAgLy8gSWYgcm9vdCBpcyBhIGRpbWVuc2lvbiB0aGF0IGlzIG5v
dCBleHByZXNzZWQgaW4gaXRzIGNhbm9uaWNhbCB1bml0LCBhbmQgdGhlcmUgaXMgZW5vdWdoIGlu
Zm9ybWF0aW9uCi0gICAgICAgIC8vIGF2YWlsYWJsZSB0byBjb252ZXJ0IGl0IHRvIHRoZSBjYW5v
bmljYWwgdW5pdCwgZG8gc28sIGFuZCByZXR1cm4gdGhlIHZhbHVlLgotICAgICAgICBhdXRvJiBw
cmltaXRpdmVWYWx1ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihy
b290Tm9kZS5nZXQoKSk7Ci0gICAgICAgIHByaW1pdGl2ZVZhbHVlTm9kZS5jYW5vbmljYWxpemVV
bml0KCk7Ci0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKLSAgICB9Ci0KLSAgICAv
LyBJZiByb290IGlzIGFuIG9wZXJhdG9yIG5vZGUgdGhhdOKAmXMgbm90IG9uZSBvZiB0aGUgY2Fs
Yy1vcGVyYXRvciBub2RlcywgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIG51bWVyaWMgdmFs
dWVzCi0gICAgLy8gd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY29tcHV0ZWQgdGhlIG9wZXJh
dGlvbiByb290IHJlcHJlc2VudHMsIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgcm9vdOKA
mXMgb3BlcmF0aW9uCi0gICAgLy8gdXNpbmcgaXRzIGNoaWxkcmVuLCBleHByZXNzZWQgaW4gdGhl
IHJlc3VsdOKAmXMgY2Fub25pY2FsIHVuaXQuCi0gICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25O
b2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgYXV0byYgY2FsY09wZXJhdGlvbk5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICAvLyBE
b24ndCBzaW1wbGlmeSBhdCB0aGUgcm9vdCwgb3RoZXJ3aXNlIHdlIGxvc2UgdHJhY2sgb2YgdGhl
IG9wZXJhdGlvbiBmb3Igc2VyaWFsaXphdGlvbi4KLSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25O
b2RlLmNoaWxkcmVuKCkuc2l6ZSgpID09IDEgJiYgZGVwdGgpCi0gICAgICAgICAgICByZXR1cm4g
V1RGTW92ZShjYWxjT3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpWzBdKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkpIHsKLSAgICAgICAgICAg
IGNhbGNPcGVyYXRpb25Ob2RlLmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9y
OjpBZGQpOwotICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVj
dE5vZGUoKSkgewotICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldp
dGhPcGVyYXRvcihDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKLSAgICAgICAgICAgIGNhbGNPcGVy
YXRpb25Ob2RlLmNvbWJpbmVDaGlsZHJlbigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNNaW5Pck1heE5vZGUoKSkKLSAgICAgICAgICAgIGNh
bGNPcGVyYXRpb25Ob2RlLmNvbWJpbmVDaGlsZHJlbigpOwotCi0gICAgICAgIC8vIElmIG9ubHkg
b25lIGNoaWxkIHJlbWFpbnMsIHJldHVybiB0aGUgY2hpbGQgKGV4Y2VwdCBhdCB0aGUgcm9vdCku
Ci0gICAgICAgIGF1dG8gc2hvdWxkQ29tYmluZVBhcmVudFdpdGhPbmx5Q2hpbGQgPSBbXShjb25z
dCBDU1NDYWxjT3BlcmF0aW9uTm9kZSYgcGFyZW50LCBpbnQgZGVwdGgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIGlmIChwYXJlbnQuY2hpbGRyZW4oKS5zaXplKCkgIT0gMSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgICAgIC8vIEFsd2F5cyBzaW1wbGlmeSBiZWxv
dyB0aGUgcm9vdC4KLSAgICAgICAgICAgIGlmIChkZXB0aCkKLSAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgICAgICAgICAgLy8gQXQgdGhlIHJvb3QsIHByZXNlcnZlIHRoZSByb290
IGZ1bmN0aW9uIGJ5IG9ubHkgbWVyZ2luZyBub2RlcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLgot
ICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBwYXJlbnQuY2hpbGRyZW4oKS5maXJzdCgpOwotICAg
ICAgICAgICAgaWYgKCFpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgYXV0byBwYXJlbnRGdW5jdGlvbiA9
IGZ1bmN0aW9uRnJvbU9wZXJhdG9yKHBhcmVudC5jYWxjT3BlcmF0b3IoKSk7Ci0gICAgICAgICAg
ICBhdXRvIGNoaWxkRnVuY3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihkb3duY2FzdDxDU1ND
YWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpKTsKLSAgICAgICAg
ICAgIHJldHVybiBjaGlsZEZ1bmN0aW9uID09IHBhcmVudEZ1bmN0aW9uOwotICAgICAgICB9Owot
Ci0gICAgICAgIGlmIChzaG91bGRDb21iaW5lUGFyZW50V2l0aE9ubHlDaGlsZChjYWxjT3BlcmF0
aW9uTm9kZSwgZGVwdGgpKQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlv
bk5vZGUuY2hpbGRyZW4oKS5maXJzdCgpKTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290
Tm9kZSk7Ci0gICAgfQotCi0gICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkp
IHsKLSAgICAgICAgYXV0byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+
KHJvb3ROb2RlLmdldCgpKS5jaGlsZCgpOwotICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBp
cyBhIG51bWVyaWMgdmFsdWUsIHJldHVybiBhbiBlcXVpdmFsZW50IG51bWVyaWMgdmFsdWUsIGJ1
dCB3aXRoIHRoZSB2YWx1ZSBuZWdhdGVkICgwIC0gdmFsdWUpLgotICAgICAgICBpZiAoaXM8Q1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKLSAgICAgICAg
ICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkubmVnYXRl
KCk7Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlOwotICAgICAgICB9Ci0gICAgICAgIAot
ICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIE5lZ2F0ZSBub2RlLCByZXR1cm4gdGhl
IGNoaWxk4oCZcyBjaGlsZC4KLSAgICAgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihjaGls
ZE5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihj
aGlsZE5vZGUpLmNoaWxkKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290
Tm9kZSk7Ci0gICAgfQotCi0gICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZSkp
IHsKLSAgICAgICAgYXV0byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+
KHJvb3ROb2RlLmdldCgpKS5jaGlsZCgpOwotICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBp
cyBhIG51bWJlciAobm90IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24pIHJldHVybiB0aGUgcmVj
aXByb2NhbCBvZiB0aGUgY2hpbGTigJlzIHZhbHVlLgotICAgICAgICBpZiAoaXM8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlPihjaGlsZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKLSAgICAgICAgICAgIGRv
d25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaW52ZXJ0KCk7Ci0g
ICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYg
cm9vdOKAmXMgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUsIHJldHVybiB0aGUgY2hpbGTigJlzIGNo
aWxkLgotICAgICAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkpCi0gICAg
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkuY2hp
bGQoKTsKLQotICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci0gICAgfQotCi0gICAg
cmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOwotfQotCi1DU1NVbml0VHlwZSBDU1NDYWxjT3BlcmF0
aW9uTm9kZTo6cHJpbWl0aXZlVHlwZSgpIGNvbnN0Ci17Ci0gICAgYXV0byB1bml0Q2F0ZWdvcnkg
PSBjYXRlZ29yeSgpOwotICAgIHN3aXRjaCAodW5pdENhdGVnb3J5KSB7Ci0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0jaWYgQVNTRVJUX0VOQUJMRUQKLSAgICAgICAgZm9y
IChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmNh
dGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKLSNlbmRpZgotICAgICAg
ICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7Ci0KLSAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQ6IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQot
ICAgICAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLQotICAgICAgICBp
ZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMikgewotICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5b
MF0tPmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NoaWxkcmVuWzFdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgICAg
ICBpZiAobV9jaGlsZHJlblsxXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5
cGUoKTsKLSAgICAgICAgfQotICAgICAgICBDU1NVbml0VHlwZSBmaXJzdFR5cGUgPSBtX2NoaWxk
cmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2No
aWxkcmVuKSB7Ci0gICAgICAgICAgICBpZiAoZmlyc3RUeXBlICE9IGNoaWxkLT5wcmltaXRpdmVU
eXBlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm4gZmlyc3RUeXBlOwotICAgIH0KLQotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6QW5nbGU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgotICAgICAgICBpZiAobV9jaGlsZHJlbi5z
aXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuLmZpcnN0KCktPnByaW1p
dGl2ZVR5cGUoKTsKLSAgICAgICAgcmV0dXJuIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRp
b25DYXRlZ29yeSh1bml0Q2F0ZWdvcnkpOwotCi0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51
bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAgICAgICByZXR1
cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwotfQotCi1zdGQ6OnVu
aXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRl
Q2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEpIGNvbnN0Ci17Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lv
bk5vZGU+PiBub2RlczsKLSAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRy
ZW4uc2l6ZSgpKTsKLQotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAg
ICAgIGF1dG8gbm9kZSA9IGNoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0
YSk7Ci0gICAgICAgIGlmICghbm9kZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICBub2Rlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShub2RlKSk7Ci0gICAgfQotCi0gICAg
Ly8gUmV2ZXJzZSB0aGUgb3BlcmF0aW9uIHdlIGRpZCB3aGVuIGNyZWF0aW5nIHRoaXMgbm9kZSwg
cmVjb3ZlcmluZyBhIHN1aXRhYmxlIGRlc3RpbmF0aW9uIGNhdGVnb3J5IGZvciBvdGhlcndpc2Ut
YW1iaWd1b3VzIG1pbi9tYXgvY2xhbXAgbm9kZXMuCi0gICAgLy8gTm90ZSB0aGF0IHRoaXMgY2F0
ZWdvcnkgaXMgcmVhbGx5IG9ubHkgZ29vZCBlbm91Z2ggZm9yIHRoYXQgcHVycG9zZSBhbmQgaXMg
bm90IGFjY3VyYXRlIGZvciBvdGhlciBub2RlIHR5cGVzOyB3ZSBjb3VsZCB1c2UgYSBib29sZWFu
IGluc3RlYWQuCi0gICAgYXV0byBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXI7Ci0gICAgaWYgKGNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudExlbmd0aCkKLSAgICAgICAgZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aDsKLSAgICBlbHNlIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIpCi0gICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI7Ci0KLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxj
RXhwcmVzc2lvbk9wZXJhdGlvbj4oV1RGTW92ZShub2RlcyksIG1fb3BlcmF0b3IsIGRlc3RpbmF0
aW9uQ2F0ZWdvcnkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAotewotICAgIGJvb2wgYWxsb3dOdW1iZXJz
ID0gY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsKLQotICAgIHJldHVy
biBldmFsdWF0ZShtX2NoaWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7Ci0gICAgICAgIENT
U1VuaXRUeXBlIGNoaWxkVHlwZSA9IHVuaXRUeXBlOwotICAgICAgICBpZiAoYWxsb3dOdW1iZXJz
ICYmIHVuaXRUeXBlICE9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSICYmIGNoaWxkLT5wcmltaXRp
dmVUeXBlKCkgPT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICBjaGlsZFR5
cGUgPSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjsKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5kb3Vi
bGVWYWx1ZShjaGlsZFR5cGUpOwotICAgIH0pKTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4u
bWFwKFsmXSAoYXV0byYgY2hpbGQpIHsKLSAgICAgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTGVu
Z3RoUHgoY29udmVyc2lvbkRhdGEpOwotICAgIH0pKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0
aW9uTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIGZvciAoYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKQotICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXModmFsdWVzKTsKLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVj
dERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikK
LSAgICAgICAgY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2ll
cyh2YWx1ZXMpOwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQo
Y29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVy
KQotewotICAgIGF1dG8gc2hvdWxkT3V0cHV0RW5jbG9zaW5nQ2FsYyA9IFtdKGNvbnN0IENTU0Nh
bGNFeHByZXNzaW9uTm9kZSYgcm9vdE5vZGUpIHsKLSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVy
YXRpb25Ob2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUg
PSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpOwotICAgICAgICAgICAg
cmV0dXJuIG9wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9kZSgpIHx8IG9wZXJhdGlvbk5vZGUuaXND
YWxjUHJvZHVjdE5vZGUoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gIWlzPENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KHJvb3ROb2RlKTsKLSAgICB9OwotICAgIAotICAgIGJvb2wgb3V0
cHV0Q2FsYyA9IHNob3VsZE91dHB1dEVuY2xvc2luZ0NhbGMobm9kZSk7Ci0gICAgaWYgKG91dHB1
dENhbGMpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJjYWxjKCIpOwotCi0gICAgYnVpbGRDU1NU
ZXh0UmVjdXJzaXZlKG5vZGUsIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKLQotICAg
IGlmIChvdXRwdXRDYWxjKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwotfQotCi1zdGF0
aWMgY29uc3QgY2hhciogZnVuY3Rpb25QcmVmaXhGb3JPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3Ap
Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAg
Y2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0
aXBseToKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuICIiOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpN
aW46IHJldHVybiAibWluKCI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogcmV0dXJuICJt
YXgoIjsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHJldHVybiAiY2xhbXAoIjsKLSAg
ICB9Ci0gICAgCi0gICAgcmV0dXJuICIiOwotfQotCi0vLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cu
b3JnL2Nzcy12YWx1ZXMtNC8jc2VyaWFsaXplLWEtY2FsY3VsYXRpb24tdHJlZT4KLXZvaWQgQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUmIG5vZGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5z
IHBhcmVucykKLXsKLSAgICAvLyBJZiByb290IGlzIGEgbnVtZXJpYyB2YWx1ZSwgb3IgYSBub24t
bWF0aCBmdW5jdGlvbiwgc2VyaWFsaXplIHJvb3QgcGVyIHRoZSBub3JtYWwgcnVsZXMgZm9yIGl0
IGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZT4obm9kZSkpIHsKLSAgICAgICAgYXV0byYgdmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSk7Ci0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVl
Tm9kZS5jdXN0b21DU1NUZXh0KCkpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYg
KGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiBvcGVyYXRp
b25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUpOwotCi0gICAgICAg
IGlmIChvcGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5vZGUoKSkgewotICAgICAgICAgICAgLy8gSWYg
cm9vdCBpcyBhIFN1bSBub2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmlu
ZyAiKCIuCi0gICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRl
KQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcoJyk7Ci0KLSAgICAgICAgICAgIC8v
IFNpbXBsaWZpY2F0aW9uIGFscmVhZHkgc29ydGVkIGNoaWxkcmVuLgotICAgICAgICAgICAgYXV0
byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBBU1NF
UlQoY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBm
aXJzdCBjaGlsZCwgYW5kIGFwcGVuZCBpdCB0byBzLgotICAgICAgICAgICAgYnVpbGRDU1NUZXh0
UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0KCksIGJ1aWxkZXIpOwotCi0gICAgICAgICAgICAvLyBG
b3IgZWFjaCBjaGlsZCBvZiByb290IGJleW9uZCB0aGUgZmlyc3Q6Ci0gICAgICAgICAgICAvLyBJ
ZiBjaGlsZCBpcyBhIE5lZ2F0ZSBub2RlLCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxp
emUgdGhlIE5lZ2F0ZeKAmXMgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAg
ICAgICAgICAvLyBJZiBjaGlsZCBpcyBhIG5lZ2F0aXZlIG51bWVyaWMgdmFsdWUsIGFwcGVuZCAi
IC0gIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSB0aGUgbmVnYXRpb24gb2YgY2hpbGQgYXMgbm9ybWFs
IGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBh
cHBlbmQgIiArICIgdG8gcywgdGhlbiBzZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVz
dWx0IHRvIHMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4u
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ld
OwotICAgICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgLSAiKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihj
aGlsZC5nZXQoKSkuY2hpbGQoKSwgYnVpbGRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+KGNoaWxkLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlTm9kZS5pc05lZ2F0aXZlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIgLSAiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlh
bGl6ZSB0aGUgbmVnYXRpb24gb2YgY2hpbGQuCi0gICAgICAgICAgICAgICAgICAgICAgICBhdXRv
IHVuaXRUeXBlID0gcHJpbWl0aXZlVmFsdWVOb2RlLnZhbHVlKCkucHJpbWl0aXZlVHlwZSgpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoMCAtIHByaW1pdGl2ZVZhbHVl
Tm9kZS52YWx1ZSgpLmRvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0
cmluZyh1bml0VHlwZSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0g
ICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiArICIpOwotICAgICAgICAgICAgICAgIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZCwgYnVpbGRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5v
ZGUoKSkgewotICAgICAgICAgICAgLy8gSWYgcm9vdCBpcyBhIFByb2R1Y3Qgbm9kZSwgbGV0IHMg
YmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigiLgotICAgICAgICAgICAgaWYgKHBh
cmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSkKLSAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgnKCcpOwotCi0gICAgICAgICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNv
cnRlZCBjaGlsZHJlbi4KLSAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9k
ZS5jaGlsZHJlbigpOwotICAgICAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7Ci0gICAg
ICAgICAgICAvLyBTZXJpYWxpemUgcm9vdOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQg
dG8gcy4KLSAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgp
LCBidWlsZGVyKTsKLQotICAgICAgICAgICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlv
bmQgdGhlIGZpcnN0OgotICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUs
IGFwcGVuZCAiIC8gIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSB0aGUgSW52ZXJ04oCZcyBjaGlsZCBh
bmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBw
ZW5kICIgKiAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3Vs
dCB0byBzLgotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsK
LSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkKSkgewotICAg
ICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC8gIik7Ci0gICAgICAgICAgICAgICAg
ICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hp
bGQuZ2V0KCkpLmNoaWxkKCksIGJ1aWxkZXIpOwotICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgi
ICogIik7Ci0gICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWls
ZGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGlu
Z1BhcmVuczo6SW5jbHVkZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLy8gSWYgcm9vdCBpcyBh
bnl0aGluZyBidXQgYSBTdW0sIE5lZ2F0ZSwgUHJvZHVjdCwgb3IgSW52ZXJ0IG5vZGUsIHNlcmlh
bGl6ZSBhIG1hdGggZnVuY3Rpb24gZm9yIHRoZQotICAgICAgICAvLyBmdW5jdGlvbiBjb3JyZXNw
b25kaW5nIHRvIHRoZSBub2RlIHR5cGUsIHRyZWF0aW5nIHRoZSBub2Rl4oCZcyBjaGlsZHJlbiBh
cyB0aGUgZnVuY3Rpb27igJlzCi0gICAgICAgIC8vIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlv
biBhcmd1bWVudHMsIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KLSAgICAgICAgYnVpbGRlci5hcHBl
bmQoZnVuY3Rpb25QcmVmaXhGb3JPcGVyYXRvcihvcGVyYXRpb25Ob2RlLmNhbGNPcGVyYXRvcigp
KSk7Ci0KLSAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7
Ci0gICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkpOwotICAgICAgICBidWlsZENTU1RleHRS
ZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQp
OwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsr
aSkgewotICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7Ci0gICAgICAgICAgICBidWls
ZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW5baV0sIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpP
bWl0KTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsK
LSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5v
ZGU+KG5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
TmVnYXRlTm9kZT4obm9kZSk7Ci0gICAgICAgIC8vIElmIHJvb3QgaXMgYSBOZWdhdGUgbm9kZSwg
bGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigtMSAqICIuCi0gICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCItMSAqIik7Ci0gICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShu
ZWdhdGVOb2RlLmNoaWxkKCksIGJ1aWxkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAg
IAotICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4obm9kZSkpIHsKLSAgICAgICAgYXV0byYg
aW52ZXJ0Tm9kZSA9IGRvd25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihub2RlKTsKLSAgICAgICAg
Ly8gSWYgcm9vdCBpcyBhbiBJbnZlcnQgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5
IGNvbnRhaW5pbmcgIigxIC8gIi4KLSAgICAgICAgYnVpbGRlci5hcHBlbmQoIjEgLyAiKTsKLSAg
ICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGludmVydE5vZGUuY2hpbGQoKSwgYnVpbGRlcik7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgImNhbGMgb3BlcmF0aW9u
ICIgPDwgbV9vcGVyYXRvciA8PCAiIChjYXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5
cGUgIiA8PCBwcmltaXRpdmVUeXBlKCkgPDwgIikiOwotCi0gICAgVGV4dFN0cmVhbTo6R3JvdXBT
Y29wZSBzY29wZSh0cyk7Ci0gICAgdHMgPDwgbV9jaGlsZHJlbi5zaXplKCkgPDwgIiBjaGlsZHJl
biI7Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgIHRzLmR1bXBQ
cm9wZXJ0eSgibm9kZSIsIGNoaWxkKTsKLX0KLQotYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
ZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgZXhwKSBjb25zdAotewotICAgIGlm
ICh0eXBlKCkgIT0gZXhwLnR5cGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgY29u
c3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUmIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGUmPihleHApOwotCi0gICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IG90
aGVyLm1fY2hpbGRyZW4uc2l6ZSgpIHx8IG1fb3BlcmF0b3IgIT0gb3RoZXIubV9vcGVyYXRvcikK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2No
aWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGlmICghY29tcGFyZUNTU1ZhbHVlKG1fY2hp
bGRyZW5baV0sIG90aGVyLm1fY2hpbGRyZW5baV0pKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotZG91YmxlIENTU0NhbGNPcGVyYXRpb25O
b2RlOjpldmFsdWF0ZU9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCwgY29uc3QgVmVjdG9yPGRvdWJs
ZT4mIGNoaWxkcmVuKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6QWRkOiB7Ci0gICAgICAgIGRvdWJsZSBzdW0gPSAwOwotICAgICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW4pCi0gICAgICAgICAgICBzdW0gKz0gY2hpbGQ7Ci0gICAgICAgIHJldHVy
biBzdW07Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAgICAgICAg
QVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9PSAyKTsKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBd
IC0gY2hpbGRyZW5bMV07Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Ci0gICAg
ICAgIGRvdWJsZSBwcm9kdWN0ID0gMTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxk
cmVuKQotICAgICAgICAgICAgcHJvZHVjdCAqPSBjaGlsZDsKLSAgICAgICAgcmV0dXJuIHByb2R1
Y3Q7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0gICAgICAgIEFTU0VS
VChjaGlsZHJlbi5zaXplKCkgPT0gMSB8fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAg
IGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW5b
MF0gLyBjaGlsZHJlblsxXTsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7Ci0gICAgICAg
IGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZG91YmxlIG1pbmltdW0gPSBj
aGlsZHJlblswXTsKLSAgICAgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAg
ICAgICBtaW5pbXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQpOwotICAgICAgICByZXR1cm4g
bWluaW11bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogewotICAgICAgICBp
ZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGRvdWJsZSBtYXhpbXVtID0gY2hp
bGRyZW5bMF07Ci0gICAgICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAg
ICAgbWF4aW11bSA9IHN0ZDo6bWF4KG1heGltdW0sIGNoaWxkKTsKLSAgICAgICAgcmV0dXJuIG1h
eGltdW07Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogewotICAgICAgICBp
ZiAoY2hpbGRyZW4uc2l6ZSgpICE9IDMpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZG91YmxlIG1pbiA9IGNoaWxk
cmVuWzBdOwotICAgICAgICBkb3VibGUgdmFsdWUgPSBjaGlsZHJlblsxXTsKLSAgICAgICAgZG91
YmxlIG1heCA9IGNoaWxkcmVuWzJdOwotICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6
Om1pbih2YWx1ZSwgbWF4KSk7Ci0gICAgfQotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICByZXR1cm4gMDsKLX0KLQotCi1jbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXIgewotcHVibGljOgotICAgIGV4cGxpY2l0IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcihD
YWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi0gICAgICAgIDogbV9kZXN0
aW5hdGlvbkNhdGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi0gICAgeyB9Ci0KLSAgICBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBwYXJzZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSwg
Q1NTVmFsdWVJRCBmdW5jdGlvbik7Ci0gICAgCi1wcml2YXRlOgotICAgIGNoYXIgb3BlcmF0b3JW
YWx1ZShjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4pCi0gICAgewotICAgICAgICBpZiAodG9r
ZW4udHlwZSgpID09IERlbGltaXRlclRva2VuKQotICAgICAgICAgICAgcmV0dXJuIHRva2VuLmRl
bGltaXRlcigpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBib29sIHBhcnNlVmFs
dWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7
Ci0gICAgYm9vbCBwYXJzZVZhbHVlVGVybShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRo
LCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VDYWxjRnVu
Y3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENTU1ZhbHVlSUQsIGludCBkZXB0aCwgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKLSAgICBib29sIHBhcnNlQ2FsY1N1bShDU1NQYXJz
ZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYp
OwotICAgIGJvb2wgcGFyc2VDYWxjUHJvZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRl
cHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VDYWxj
VmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mKTsKLQotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9kZXN0aW5hdGlvbkNh
dGVnb3J5OwotfTsKLQotLy8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQv
I2NhbGMtc3ludGF4PjoKLS8vIDxjYWxjKCk+ICA9IGNhbGMoIDxjYWxjLXN1bT4gKQotLy8gPG1p
bigpPiAgID0gbWluKCA8Y2FsYy1zdW0+IyApCi0vLyA8bWF4KCk+ICAgPSBtYXgoIDxjYWxjLXN1
bT4jICkKLS8vIDxjbGFtcCgpPiA9IGNsYW1wKCA8Y2FsYy1zdW0+I3szfSApCi0vLyA8c2luKCk+
ICAgPSBzaW4oIDxjYWxjLXN1bT4gKQotLy8gPGNvcygpPiAgID0gY29zKCA8Y2FsYy1zdW0+ICkK
LS8vIDx0YW4oKT4gICA9IHRhbiggPGNhbGMtc3VtPiApCi0vLyA8YXNpbigpPiAgPSBhc2luKCA8
Y2FsYy1zdW0+ICkKLS8vIDxhY29zKCk+ICA9IGFjb3MoIDxjYWxjLXN1bT4gKQotLy8gPGF0YW4o
KT4gID0gYXRhbiggPGNhbGMtc3VtPiApCi0vLyA8YXRhbjIoKT4gPSBhdGFuMiggPGNhbGMtc3Vt
PiwgPGNhbGMtc3VtPiApCi0vLyA8cG93KCk+ICAgPSBwb3coIDxjYWxjLXN1bT4sIDxjYWxjLXN1
bT4gKQotLy8gPHNxcnQoKT4gID0gc3FydCggPGNhbGMtc3VtPiApCi0vLyA8aHlwb3QoKT4gPSBo
eXBvdCggPGNhbGMtc3VtPiMgKQotLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+IFsgWyAn
KycgfCAnLScgXSA8Y2FsYy1wcm9kdWN0PiBdKgotLy8gPGNhbGMtcHJvZHVjdD4gPSA8Y2FsYy12
YWx1ZT4gWyBbICcqJyB8ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgotLy8gPGNhbGMtdmFsdWU+ID0g
PG51bWJlcj4gfCA8ZGltZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3VtPiApCi1S
ZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6
OnBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlv
bikKLXsKLSAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKLQotICAgIFJlZlB0cjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+IHJlc3VsdDsKLSAgICBib29sIG9rID0gcGFyc2VDYWxjRnVuY3Rp
b24odG9rZW5zLCBmdW5jdGlvbiwgMCwgcmVzdWx0KTsKLSAgICBpZiAoIW9rIHx8ICF0b2tlbnMu
YXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBpZiAoIXJlc3VsdCkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFt
IDw8ICJDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAiIDw8IHByZXR0eVBy
aW50Tm9kZSgqcmVzdWx0KSk7Ci0KLSAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
c2ltcGxpZnkocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgTE9HX1dJVEhfU1RSRUFN
KENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMg
LSBhZnRlciBzaW1wbGlmaWNhdGlvbiAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0KSk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1lbnVtIFBhcnNlU3RhdGUgewotICAgIE9LLAotICAg
IFRvb0RlZXAsCi0gICAgTm9Nb3JlVG9rZW5zCi19OwotCi1zdGF0aWMgUGFyc2VTdGF0ZSBjaGVj
a0RlcHRoQW5kSW5kZXgoaW50IGRlcHRoLCBDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucykKLXsK
LSAgICBpZiAodG9rZW5zLmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBOb01vcmVUb2tlbnM7Ci0g
ICAgaWYgKGRlcHRoID4gbWF4RXhwcmVzc2lvbkRlcHRoKSB7Ci0gICAgICAgIExPR19XSVRIX1NU
UkVBTShDYWxjLCBzdHJlYW0gPDwgIkRlcHRoICIgPDwgZGVwdGggPDwgIiBleGNlZWRlZCBtYXhF
eHByZXNzaW9uRGVwdGggIiA8PCBtYXhFeHByZXNzaW9uRGVwdGgpOwotICAgICAgICByZXR1cm4g
VG9vRGVlcDsKLSAgICB9Ci0gICAgcmV0dXJuIE9LOwotfQotCi1ib29sIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9r
ZW5zLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRo
LCB0b2tlbnMpICE9IE9LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyAiYXJndW1l
bnRzIiByZWZlcnMgdG8gdGhpbmdzIGJldHdlZW4gY29tbWFzLgotICAgIHVuc2lnbmVkIG1pbkFy
Z3VtZW50Q291bnQgPSAxOwotICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtYXhBcmd1bWVudENvdW50
OwotCi0gICAgc3dpdGNoIChmdW5jdGlvbklEKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZU1pbjoKLSAg
ICBjYXNlIENTU1ZhbHVlTWF4OgotICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gc3RkOjpudWxs
b3B0OwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6Ci0gICAgICAgIG1p
bkFyZ3VtZW50Q291bnQgPSAzOwotICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gMzsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUNhbGM6Ci0gICAgICAgIG1heEFyZ3VtZW50Q291
bnQgPSAxOwotICAgICAgICBicmVhazsKLSAgICAvLyBUT0RPOiBjbGFtcCwgc2luLCBjb3MsIHRh
biwgYXNpbiwgYWNvcywgYXRhbiwgYXRhbjIsIHBvdywgc3FydCwgaHlwb3QuCi0gICAgZGVmYXVs
dDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+PiBub2RlczsKLQotICAgIGJvb2wgcmVxdWlyZUNvbW1hID0gZmFsc2U7Ci0gICAg
dW5zaWduZWQgYXJndW1lbnRDb3VudCA9IDA7Ci0gICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkg
ewotICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKHJlcXVp
cmVDb21tYSkgewotICAgICAgICAgICAgaWYgKHRva2Vucy5jb25zdW1lKCkudHlwZSgpICE9IENv
bW1hVG9rZW4pCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdG9r
ZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAgIH0KLQotICAgICAgICBSZWZQdHI8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiBub2RlOwotICAgICAgICBpZiAoIXBhcnNlQ2FsY1N1bSh0b2tl
bnMsIGRlcHRoLCBub2RlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAr
K2FyZ3VtZW50Q291bnQ7Ci0gICAgICAgIGlmIChtYXhBcmd1bWVudENvdW50ICYmIGFyZ3VtZW50
Q291bnQgPiBtYXhBcmd1bWVudENvdW50LnZhbHVlKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgbm9kZXMuYXBwZW5kKG5vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAg
ICAgIHJlcXVpcmVDb21tYSA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIGlmIChhcmd1bWVudENv
dW50IDwgbWluQXJndW1lbnRDb3VudCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgc3dp
dGNoIChmdW5jdGlvbklEKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZU1pbjoKLSAgICAgICAgcmVzdWx0
ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0
b3I6Ok1pbiwgV1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0gICAgICAg
IGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVNYXg6Ci0gICAgICAgIHJlc3VsdCA9IENTU0NhbGNP
cGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpNYXgsIFdU
Rk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgICAgICBicmVhazsKLSAg
ICBjYXNlIENTU1ZhbHVlQ2xhbXA6Ci0gICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25O
b2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpDbGFtcCwgV1RGTW92ZShu
b2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
Q1NTVmFsdWVXZWJraXRDYWxjOgotICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgotICAgICAgICByZXN1
bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgLy8gVE9ETzogY2xhbXAsIHNpbiwgY29zLCB0YW4sIGFzaW4sIGFj
b3MsIGF0YW4sIGF0YW4yLCBwb3csIHNxcnQsIGh5cG90Ci0gICAgZGVmYXVsdDoKLSAgICAgICAg
YnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi1ib29sIENTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tl
bnMsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgQ1NTUGFy
c2VyVG9rZW4gdG9rZW4gPSB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAg
ICBpZiAoISh0b2tlbi50eXBlKCkgPT0gTnVtYmVyVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IFBl
cmNlbnRhZ2VUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0gRGltZW5zaW9uVG9rZW4pKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgYXV0byB0eXBlID0gdG9rZW4udW5pdFR5cGUoKTsK
LSAgICBpZiAoY2FsY1VuaXRDYXRlZ29yeSh0eXBlKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIHJlc3VsdCA9IENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHRva2Vu
Lm51bWVyaWNWYWx1ZSgpLCB0eXBlKSk7Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZShDU1NQYXJzZXJU
b2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4mIHJlc3VsdCkKLXsKLSAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMp
ICE9IE9LKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvIGZpbmRGdW5jdGlvbklk
ID0gWyZdKENTU1ZhbHVlSUQmIGZ1bmN0aW9uSWQpIHsKLSAgICAgICAgaWYgKHRva2Vucy5wZWVr
KCkudHlwZSgpID09IExlZnRQYXJlbnRoZXNpc1Rva2VuKSB7Ci0gICAgICAgICAgICBmdW5jdGlv
bklkID0gQ1NTVmFsdWVDYWxjOwotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0K
LQotICAgICAgICBmdW5jdGlvbklkID0gdG9rZW5zLnBlZWsoKS5mdW5jdGlvbklkKCk7Ci0gICAg
ICAgIHJldHVybiBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKGZ1bmN0aW9uSWQpOwotICAg
IH07Ci0KLSAgICBDU1NWYWx1ZUlEIGZ1bmN0aW9uSWQ7Ci0gICAgaWYgKGZpbmRGdW5jdGlvbklk
KGZ1bmN0aW9uSWQpKSB7Ci0gICAgICAgIENTU1BhcnNlclRva2VuUmFuZ2UgaW5uZXJSYW5nZSA9
IHRva2Vucy5jb25zdW1lQmxvY2soKTsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNl
KCk7Ci0gICAgICAgIGlubmVyUmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICAgICAgcmV0
dXJuIHBhcnNlQ2FsY0Z1bmN0aW9uKGlubmVyUmFuZ2UsIGZ1bmN0aW9uSWQsIGRlcHRoICsgMSwg
cmVzdWx0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcGFyc2VWYWx1ZSh0b2tlbnMsIHJlc3VsdCk7
Ci19Ci0KLWJvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9kdWN0
KENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQotewotICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVw
dGgsIHRva2VucykgIT0gT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFsdWU7Ci0gICAgaWYgKCFwYXJzZUNhbGNWYWx1
ZSh0b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKLQotICAgIHdoaWxl
ICghdG9rZW5zLmF0RW5kKCkpIHsKLSAgICAgICAgY2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9w
ZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7Ci0gICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3Rl
ciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KSAmJiBvcGVyYXRv
ckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRpdmlkZSkpCi0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7Ci0gICAgICAgIAotICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBu
ZXh0VmFsdWU7Ci0gICAgICAgIGlmICghcGFyc2VDYWxjVmFsdWUodG9rZW5zLCBkZXB0aCwgbmV4
dFZhbHVlKSB8fCAhbmV4dFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0
b3I6OkRpdmlkZSkpCi0gICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjSW52ZXJ0Tm9kZTo6
Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgICAgICBpZiAoZmlyc3RW
YWx1ZSkKLSAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVhc2VOb25OdWxs
KCkpOwotCi0gICAgICAgIG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7
Ci0gICAgfQotCi0gICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkgewotICAgICAgICByZXN1bHQgPSBX
VEZNb3ZlKGZpcnN0VmFsdWUpOwotICAgICAgICByZXR1cm4gISFyZXN1bHQ7Ci0gICAgfQotCi0g
ICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoV1RGTW92ZShu
b2RlcykpOwotICAgIHJldHVybiAhIXJlc3VsdDsKLX0KLQotYm9vbCBDU1NDYWxjRXhwcmVzc2lv
bk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGlu
dCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBp
ZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVl
OwotICAgIGlmICghcGFyc2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiBub2RlczsKLQotICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKLSAgICAgICAg
Y2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7Ci0g
ICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3Bl
cmF0b3I6OkFkZCkgJiYgb3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2Fs
Y09wZXJhdG9yOjpTdWJ0cmFjdCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBpZiAo
KCZ0b2tlbnMucGVlaygpIC0gMSktPnR5cGUoKSAhPSBXaGl0ZXNwYWNlVG9rZW4pCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4KyAycHgpIGlzIGludmFsaWQKLQotICAgICAg
ICB0b2tlbnMuY29uc3VtZSgpOwotICAgICAgICBpZiAodG9rZW5zLnBlZWsoKS50eXBlKCkgIT0g
V2hpdGVzcGFjZVRva2VuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCAr
MnB4KSBpcyBpbnZhbGlkCi0KLSAgICAgICAgdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNw
YWNlKCk7Ci0KLSAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbmV4dFZhbHVl
OwotICAgICAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwgbmV4dFZhbHVl
KSB8fCAhbmV4dFZhbHVlKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlm
IChvcGVyYXRvckNoYXJhY3RlciA9PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1
YnRyYWN0KSkKLSAgICAgICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVh
dGUobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAgIGlmIChmaXJzdFZhbHVl
KQotICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7
Ci0KLSAgICAgICAgbm9kZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAg
ICB9Ci0KLSAgICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9IFdURk1v
dmUoZmlyc3RWYWx1ZSk7Ci0gICAgICAgIHJldHVybiAhIXJlc3VsdDsKLSAgICB9Ci0KLSAgICBy
ZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsK
LSAgICByZXR1cm4gISFyZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENTU0NhbGNP
cGVyYXRpb25Ob2RlPiBjcmVhdGVCbGVuZEhhbGYoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0
IFJlbmRlclN0eWxlJiBzdHlsZSwgZmxvYXQgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpjcmVhdGUoQ2FsY09wZXJhdG9yOjpNdWx0aXBseSwgY3JlYXRlQ1NT
KGxlbmd0aCwgc3R5bGUpLAotICAgICAgICBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVh
dGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19O
VU1CRVIpKSk7Ci19Ci0KLXN0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
IGNyZWF0ZUNTUyhjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4+JiBub2RlcywgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIFZlY3RvcjxSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gdmFsdWVzOwotICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KG5vZGVzLnNpemUoKSk7Ci0gICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsK
LSAgICAgICAgYXV0byBjc3NOb2RlID0gY3JlYXRlQ1NTKCpub2RlLCBzdHlsZSk7Ci0gICAgICAg
IGlmICghY3NzTm9kZSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB2YWx1ZXMudW5j
aGVja2VkQXBwZW5kKGNzc05vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotICAgIHJldHVy
biB2YWx1ZXM7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVh
dGVDU1MoY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpCi17Ci0gICAgc3dpdGNoIChub2RlLnR5cGUoKSkgewotICAgIGNhc2UgQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZTo6TnVtYmVyOiB7Ci0gICAgICAgIGZsb2F0IHZhbHVlID0gZG93bmNhc3Q8
Q2FsY0V4cHJlc3Npb25OdW1iZXI+KG5vZGUpLnZhbHVlKCk7IC8vIGRvdWJsZT8KLSAgICAgICAg
cmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHZhbHVlLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOwotICAgIH0KLSAgICBj
YXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxlbmd0aDogewotICAgICAgICBhdXRvJiBsZW5n
dGggPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkxlbmd0aD4obm9kZSkubGVuZ3RoKCk7Ci0gICAg
ICAgIGlmICghbGVuZ3RoLmlzUGVyY2VudCgpICYmIGxlbmd0aC5pc1plcm8oKSkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gY3JlYXRlQ1NTKGxlbmd0aCwgc3R5
bGUpOwotICAgIH0KLQotICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb246
IHsKLSAgICAgICAgYXV0byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRvd25jYXN0PENhbGNFeHBy
ZXNzaW9uTmVnYXRpb24+KG5vZGUpLmNoaWxkKCksIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjaGls
ZE5vZGUpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0Nh
bGNOZWdhdGVOb2RlOjpjcmVhdGUoY2hpbGROb2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0K
LSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbjogewotICAgICAgICBh
dXRvIGNoaWxkTm9kZSA9IGNyZWF0ZUNTUygqZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNp
b24+KG5vZGUpLmNoaWxkKCksIHN0eWxlKTsKLSAgICAgICAgaWYgKCFjaGlsZE5vZGUpCi0gICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIENTU0NhbGNJbnZlcnROb2Rl
OjpjcmVhdGUoY2hpbGROb2RlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLSAgICBjYXNlIENh
bGNFeHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbjogewotICAgICAgICBhdXRvJiBvcGVyYXRp
b25Ob2RlID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG5vZGUpOwotICAgICAg
ICBhdXRvJiBvcGVyYXRpb25DaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAg
ICAgICAgQ2FsY09wZXJhdG9yIG9wID0gb3BlcmF0aW9uTm9kZS5nZXRPcGVyYXRvcigpOwotICAg
ICAgICAKLSAgICAgICAgc3dpdGNoIChvcCkgewotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6
QWRkOiB7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNo
aWxkcmVuLCBzdHlsZSk7Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNp
emUoKSA9PSAxKQotICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNoaWxkcmVuWzBdKTsK
LSAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1v
dmUoY2hpbGRyZW4pKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3Vi
dHJhY3Q6IHsKLSAgICAgICAgICAgIEFTU0VSVChvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkgPT0g
Mik7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gdmFs
dWVzOwotICAgICAgICAgICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3BlcmF0aW9u
Q2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBmaXJzdENo
aWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblswXSwgc3R5bGUpOwotICAgICAgICAg
ICAgYXV0byBzZWNvbmRDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMV0sIHN0
eWxlKTsKLQotICAgICAgICAgICAgaWYgKCFzZWNvbmRDaGlsZCkKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gZmlyc3RDaGlsZDsKLQotICAgICAgICAgICAgYXV0byBuZWdhdGVOb2RlID0gQ1NTQ2Fs
Y05lZ2F0ZU5vZGU6OmNyZWF0ZShzZWNvbmRDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAg
ICAgICAgIGlmICghZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbmVnYXRlTm9k
ZTsKLQotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChmaXJzdENoaWxkLnJlbGVhc2VOb25OdWxs
KCkpOwotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChXVEZNb3ZlKG5lZ2F0ZU5vZGUpKTsKLQot
ICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92
ZSh2YWx1ZXMpKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlw
bHk6IHsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hp
bGRyZW4sIHN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoV1RGTW92ZShjaGlsZHJlbikpOwotICAgICAgICB9
Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAgICAgICAgICAgIEFTU0VS
VChvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0KLSAgICAgICAgICAgIFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gdmFsdWVzOwotICAgICAgICAgICAgdmFsdWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgYXV0byBmaXJzdENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25D
aGlsZHJlblswXSwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKCFmaXJzdENoaWxkKQotICAgICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgICAgICBhdXRvIHNlY29uZENoaWxk
ID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblsxXSwgc3R5bGUpOwotICAgICAgICAgICAg
aWYgKCFzZWNvbmRDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAg
ICAgICAgIGF1dG8gaW52ZXJ0Tm9kZSA9IENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUoc2Vjb25k
Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoZmly
c3RDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoV1RG
TW92ZShpbnZlcnROb2RlKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y3JlYXRlUHJvZHVjdChjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxlKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoKLSAgICAgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDoKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7
Ci0gICAgICAgICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVu
LCBzdHlsZSk7Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAob3AsIFdURk1vdmUoY2hpbGRyZW4pLCBvcGVy
YXRpb25Ob2RlLmRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSk7Ci0gICAgICAgIH0KLSAgICAgICAgfQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpCbGVuZExlbmd0aDogewotICAgICAgICAvLyBGSVhNRTogKGh0dHA6Ly93ZWJraXQu
b3JnL2IvMTIyMDM2KSBDcmVhdGUgYSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgZXF1aXZhbGVudCBv
ZiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLgotICAgICAgICBhdXRvJiBibGVuZCA9IGRvd25j
YXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG5vZGUpOwotICAgICAgICBmbG9hdCBwcm9n
cmVzcyA9IGJsZW5kLnByb2dyZXNzKCk7Ci0gICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvcjo6QWRkLCBjcmVhdGVCbGVuZEhhbGYoYmxlbmQuZnJv
bSgpLCBzdHlsZSwgMSAtIHByb2dyZXNzKSwgY3JlYXRlQmxlbmRIYWxmKGJsZW5kLnRvKCksIHN0
eWxlLCBwcm9ncmVzcykpOwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6
OlVuZGVmaW5lZDoKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJl
dHVybiBudWxscHRyOwotfQotCi1zdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
Y3JlYXRlQ1NTKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
Ci17Ci0gICAgc3dpdGNoIChsZW5ndGgudHlwZSgpKSB7Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpQ
ZXJjZW50OgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6Rml4ZWQ6Ci0gICAgICAgIHJldHVybiBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShs
ZW5ndGgsIHN0eWxlKSk7Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpDYWxjdWxhdGVkOgotICAgICAg
ICByZXR1cm4gY3JlYXRlQ1NTKGxlbmd0aC5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigp
LCBzdHlsZSk7Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpBdXRvOgotICAgIGNhc2UgTGVuZ3RoVHlw
ZTo6SW50cmluc2ljOgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6TWluSW50cmluc2ljOgotICAgIGNh
c2UgTGVuZ3RoVHlwZTo6TWluQ29udGVudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6Ok1heENvbnRl
bnQ6Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpGaWxsQXZhaWxhYmxlOgotICAgIGNhc2UgTGVuZ3Ro
VHlwZTo6Rml0Q29udGVudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6OlJlbGF0aXZlOgotICAgIGNh
c2UgTGVuZ3RoVHlwZTo6VW5kZWZpbmVkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICB9Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLVN0cmluZyBDU1NDYWxjVmFsdWU6OmN1
c3RvbUNTU1RleHQoKSBjb25zdAotewotICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0KG1fZXhwcmVzc2lvbi5nZXQoKSwgYnVp
bGRlcik7Ci0gICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKLX0KLQotYm9vbCBDU1NDYWxj
VmFsdWU6OmVxdWFscyhjb25zdCBDU1NDYWxjVmFsdWUmIG90aGVyKSBjb25zdAotewotICAgIHJl
dHVybiBjb21wYXJlQ1NTVmFsdWUobV9leHByZXNzaW9uLCBvdGhlci5tX2V4cHJlc3Npb24pOwot
fQotCi1pbmxpbmUgZG91YmxlIENTU0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRv
dWJsZSB2YWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRp
dmUgJiYgdmFsdWUgPCAwID8gMCA6IHZhbHVlOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ZhbHVlOjpk
b3VibGVWYWx1ZSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZSht
X2V4cHJlc3Npb24tPmRvdWJsZVZhbHVlKHByaW1pdGl2ZVR5cGUoKSkpOwotfQotCi1kb3VibGUg
Q1NTQ2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0
ZWRSYW5nZShtX2V4cHJlc3Npb24tPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSkpOwot
fQotCi1ib29sIENTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCBmdW5jdGlv
bklkKQotewotICAgIHN3aXRjaCAoZnVuY3Rpb25JZCkgewotICAgIGNhc2UgQ1NTVmFsdWVDYWxj
OgotICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDYWxjOgotICAgIGNhc2UgQ1NTVmFsdWVNaW46Ci0g
ICAgY2FzZSBDU1NWYWx1ZU1heDoKLSAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIENTU0NhbGNWYWx1ZTo6ZHVtcChUZXh0U3RyZWFt
JiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCBpbmRlbnQgPDwgIigiIDw8ICJDU1NDYWxjVmFsdWUi
OwotCi0gICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0gICAgbXVsdGlsaW5lU3RyZWFt
LnNldEluZGVudCh0cy5pbmRlbnQoKSArIDIpOwotCi0gICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQ
cm9wZXJ0eSgic2hvdWxkIGNsYW1wIG5vbi1uZWdhdGl2ZSIsIG1fc2hvdWxkQ2xhbXBUb05vbk5l
Z2F0aXZlKTsKLSAgICBtdWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJleHByZXNzaW9uIiwg
bV9leHByZXNzaW9uLmdldCgpKTsKLQotICAgIHRzIDw8IG11bHRpbGluZVN0cmVhbS5yZWxlYXNl
KCk7Ci0gICAgdHMgPDwgIilcbiI7Ci19Ci0KLVJlZlB0cjxDU1NDYWxjVmFsdWU+IENTU0NhbGNW
YWx1ZTo6Y3JlYXRlKENTU1ZhbHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFu
Z2UmIHRva2VucywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1
ZVJhbmdlIHJhbmdlKQotewotICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlciBwYXJzZXIo
ZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0gICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VyLnBhcnNl
Q2FsYyh0b2tlbnMsIGZ1bmN0aW9uKTsKLSAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1
ZShleHByZXNzaW9uLnJlbGVhc2VOb25OdWxsKCksIHJhbmdlICE9IFZhbHVlUmFuZ2U6OkFsbCkp
OwotICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3Jl
YXRlICIgPDwgKnJlc3VsdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLSAgICAKLVJlZlB0cjxD
U1NDYWxjVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUm
IHZhbHVlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgYXV0byBleHByZXNzaW9u
ID0gY3JlYXRlQ1NTKHZhbHVlLmV4cHJlc3Npb24oKSwgc3R5bGUpOwotICAgIGlmICghZXhwcmVz
c2lvbikKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvIHNpbXBsaWZpZWRFeHBy
ZXNzaW9uID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KGV4cHJlc3Npb24ucmVsZWFz
ZU5vbk51bGwoKSk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFs
dWUoV1RGTW92ZShzaW1wbGlmaWVkRXhwcmVzc2lvbiksIHZhbHVlLnNob3VsZENsYW1wVG9Ob25O
ZWdhdGl2ZSgpKSk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2Fs
Y1ZhbHVlOjpjcmVhdGUgZnJvbSBDYWxjdWxhdGlvblZhbHVlOiAiIDw8ICpyZXN1bHQpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkpCi17Ci0gICAgc3dpdGNoIChjYXRlZ29y
eSkgewotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOiB0cyA8PCAibnVtYmVy
IjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6IHRzIDw8ICJs
ZW5ndGgiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHRz
IDw8ICJwZXJjZW50IjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TnVtYmVyOiB0cyA8PCAicGVyY2VudC1udW1iZXIiOyBicmVhazsKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6IHRzIDw8ICJwZXJjZW50LWxlbmd0aCI7IGJy
ZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6IHRzIDw8ICJhbmdsZSI7
IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTogdHMgPDwgInRpbWUi
OyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTogdHMgPDwg
ImZyZXF1ZW5jeSI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6
IHRzIDw8ICJvdGhlciI7IGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiB0czsKLX0KLQotVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY1ZhbHVlJiB2
YWx1ZSkKLXsKLSAgICB2YWx1ZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlv
blZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9u
VmFsdWUuaAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1
bGF0aW9uVmFsdWUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDE1MyArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRp
c3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
LSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1By
b3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0KLW5hbWVzcGFj
ZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBDU1NQYXJzZXJUb2tlblJhbmdlOwotY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YTsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1jbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgOiBw
dWJsaWMgUmVmQ291bnRlZDxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHsKLXB1YmxpYzoKLSAgICBl
bnVtIFR5cGUgewotICAgICAgICBDc3NDYWxjUHJpbWl0aXZlVmFsdWUgPSAxLAotICAgICAgICBD
c3NDYWxjT3BlcmF0aW9uLAotICAgICAgICBDc3NDYWxjTmVnYXRlLAotICAgICAgICBDc3NDYWxj
SW52ZXJ0LAotICAgIH07Ci0KLSAgICB2aXJ0dWFsIH5DU1NDYWxjRXhwcmVzc2lvbk5vZGUoKSA9
IGRlZmF1bHQ7Ci0gICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNz
aW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnkgPT0gb3RoZXIubV9j
YXRlZ29yeTsgfQotICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwotICAgIHZpcnR1
YWwgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwg
dm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1By
b3BlcnR5SUQ+JikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGlyZWN0Um9v
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0
ID0gMDsKLQotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJldHVy
biBtX2NhdGVnb3J5OyB9Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29u
c3QgPSAwOwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGN1bGF0
aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkpCi0gICAgICAgIDogbV9jYXRlZ29yeShjYXRlZ29yeSkKLSAg
ICB7Ci0gICAgfQotCi1wcml2YXRlOgotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9jYXRlZ29y
eTsKLX07Ci0KLWNsYXNzIENTU0NhbGNWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7Ci1w
dWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlE
IGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlKTsKLQotICAgIHN0YXRpYyBSZWZQdHI8
Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYsIGNvbnN0IFJlbmRl
clN0eWxlJik7Ci0KLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3QgeyBy
ZXR1cm4gbV9leHByZXNzaW9uLT5jYXRlZ29yeSgpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZhbHVl
KCkgY29uc3Q7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJikgY29uc3Q7Ci0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbi0+cHJpbWl0aXZlVHlwZSgpOyB9Ci0KLSAgICBSZWY8
Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJikgY29uc3Q7Ci0gICAgdm9pZCBzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdl
KFZhbHVlUmFuZ2UpOwotCi0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVu
ZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3Q7Ci0gICAgdm9pZCBjb2xsZWN0
RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlE
PiYpIGNvbnN0OwotCi0gICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKLSAgICBib29s
IGVxdWFscyhjb25zdCBDU1NDYWxjVmFsdWUmKSBjb25zdDsKLSAgICAKLSAgICBzdGF0aWMgYm9v
bCBpc0NhbGNGdW5jdGlvbihDU1NWYWx1ZUlEKTsKLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFt
JikgY29uc3Q7Ci0KLXByaXZhdGU6Ci0gICAgQ1NTQ2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiYsIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKTsKLQotICAgIGRvdWJs
ZSBjbGFtcFRvUGVybWl0dGVkUmFuZ2UoZG91YmxlKSBjb25zdDsKLQotICAgIGNvbnN0IFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKLSAgICBib29sIG1fc2hvdWxkQ2xh
bXBUb05vbk5lZ2F0aXZlOwotfTsKLQotaW5saW5lIENTU0NhbGNWYWx1ZTo6Q1NTQ2FsY1ZhbHVl
KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgZXhwcmVzc2lvbiwgYm9vbCBzaG91bGRDbGFt
cFRvTm9uTmVnYXRpdmUpCi0gICAgOiBDU1NWYWx1ZShDYWxjdWxhdGlvbkNsYXNzKQotICAgICwg
bV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCi0gICAgLCBtX3Nob3VsZENsYW1wVG9O
b25OZWdhdGl2ZShzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUpCi17Ci19Ci0KLWlubGluZSBSZWY8
Q2FsY3VsYXRpb25WYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewot
ICAgIHJldHVybiBDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUobV9leHByZXNzaW9uLT5jcmVhdGVD
YWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSksCi0gICAgICAgIG1fc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlID8gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgOiBWYWx1ZVJhbmdlOjpBbGwpOwot
fQotCi1pbmxpbmUgdm9pZCBDU1NDYWxjVmFsdWU6OnNldFBlcm1pdHRlZFZhbHVlUmFuZ2UoVmFs
dWVSYW5nZSByYW5nZSkKLXsKLSAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA9IHJhbmdl
ICE9IFZhbHVlUmFuZ2U6OkFsbDsKLX0KLQotaW5saW5lIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpjb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwotfQotCi1pbmxpbmUgdm9pZCBDU1NDYWxjVmFs
dWU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV9leHByZXNzaW9uLT5jb2xsZWN0
RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotV1RGOjpU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIENhbGN1bGF0aW9uQ2F0ZWdv
cnkpOwotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0
IENTU0NhbGNWYWx1ZSYpOwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLVNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXNDYWxjVmFsdWUoKSkKLQotI2Rl
ZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoVG9WYWx1
ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2Vi
Q29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNh
dGU7IH0gXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsy
Nyw3IEBACiAjaW5jbHVkZSAiQ1NTR3JhZGllbnRWYWx1ZS5oIgogCiAjaW5jbHVkZSAiQW5pbWF0
aW9uVXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEu
aCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ29sb3JCbGVuZGlu
Zy5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCShyZXZp
c2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWUuaCIKIAogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCi0jaW5jbHVkZSAiQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNT
U0ZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJDU1NIZWxwZXIuaCIKICNpbmNsdWRlICJDU1NNYXJr
dXAuaCIKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAj
aW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVl
S2V5d29yZHMuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCiAjaW5jbHVkZSAi
Q2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNvbG9yLmgiCiAjaW5jbHVkZSAiQ29sb3JT
ZXJpYWxpemF0aW9uLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFs
dWVNYXBwaW5ncy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRp
dmVWYWx1ZU1hcHBpbmdzLmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5
LDcgQEAKIAogI3ByYWdtYSBvbmNlCiAKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgi
CisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZhbWlseS5oIgog
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgy
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMCw3ICszMCw3IEBACiAKICNpbmNsdWRlICJDU1NBc3BlY3RSYXRpb1ZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbnZh
c1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ29udGVudERpc3RyaWJ1dGlvblZhbHVlLmgiCiAjaW5j
bHVkZSAiQ1NTQ3Jvc3NmYWRlVmFsdWUuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxj
L0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
ICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICog
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkNTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCIKKworI2luY2x1ZGUgIkNTU1Vu
aXRzLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY1VuaXRDYXRlZ29yeShDU1NVbml0VHlw
ZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVI6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI7Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
RVhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfQ006CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19JTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1BDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0NIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19WTUFYOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TGVuZ3RoOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOgorICAgICAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDsKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfREVHOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SQUQ6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Cisg
ICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTsKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6CisgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19IWjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfS0haOgorICAgICAgICByZXR1cm4gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICB9Cit9CisKK0NhbGN1bGF0aW9uQ2F0
ZWdvcnkgY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJF
UjoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUFg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19QQzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICAgICAgcmV0dXJuIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VO
VEFHRToKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFE
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19UVVJOOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19T
OgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfSFo6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKKyAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfQ0hTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVkg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1ZNQVg6CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgIH0KK30KKworQ1NTVW5pdFR5cGUgY2Fub25pY2Fs
VW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdv
cnkpCit7CisgICAgc3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TnVtYmVyOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7CisgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1BYOwor
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogcmV0dXJuIENTU1VuaXRUeXBl
OjpDU1NfUEVSQ0VOVEFHRTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOiBy
ZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19ERUc7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpUaW1lOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19NUzsKKyAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OkZyZXF1ZW5jeTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfSFo7CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TGVuZ3RoOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Cit9CisKK2Jvb2wgaGFz
RG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0VYUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19Q
WDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX01NOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19ERUc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVS
TjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1M6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19LSFo6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RJTUVOU0lPTjoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfVlc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19WTUFYOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUFBYOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19EUEk6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQQ006CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0ZSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JM
SFM6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VTktO
T1dOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TVFJJTkc6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0ZPTlRfRkFNSUxZOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VUkk6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lERU5UOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19BVFRSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DT1VOVEVSOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19SRUNUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SR0JDT0xPUjoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEFJUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVU5JQ09ERV9SQU5HRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ09VTlRFUl9OQU1F
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TSEFQRToKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUVVBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FM
Q19QRVJDRU5UQUdFX1dJVEhfTlVNQkVSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxD
X1BFUkNFTlRBR0VfV0lUSF9MRU5HVEg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BST1BF
UlRZX0lEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRDoKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH07CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0
ZWdvcnlNYXBwaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NT
Q2FsY0NhdGVnb3J5TWFwcGluZy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZW51bSBjbGFzcyBDU1NVbml0VHlwZSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgOiB1aW50OF90OworCitDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGNVbml0Q2F0
ZWdvcnkoQ1NTVW5pdFR5cGUpOworQ2FsY3VsYXRpb25DYXRlZ29yeSBjYWxjdWxhdGlvbkNhdGVn
b3J5Rm9yQ29tYmluYXRpb24oQ1NTVW5pdFR5cGUpOworQ1NTVW5pdFR5cGUgY2Fub25pY2FsVW5p
dFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KENhbGN1bGF0aW9uQ2F0ZWdvcnkpOworYm9vbCBo
YXNEb3VibGVWYWx1ZShDU1NVbml0VHlwZSk7CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworI2luY2x1ZGUg
PHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0U3Ry
ZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUmIG5vZGUpCit7CisgICAgbm9kZS5kdW1wKHRzKTsKKyAgICByZXR1cm4gdHM7Cit9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECitTdHJpbmcgcHJldHR5UHJpbnROb2RlKGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgbm9kZSkKK3sKKyAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKKyAg
ICBtdWx0aWxpbmVTdHJlYW0gPDwgbm9kZTsKKyAgICByZXR1cm4gbXVsdGlsaW5lU3RyZWFtLnJl
bGVhc2UoKTsKK30KKworU3RyaW5nIHByZXR0eVByaW50Tm9kZXMoY29uc3QgVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMpCit7CisgICAgVGV4dFN0cmVhbSBtdWx0aWxp
bmVTdHJlYW07CisgICAgbXVsdGlsaW5lU3RyZWFtIDw8IG5vZGVzOworICAgIHJldHVybiBtdWx0
aWxpbmVTdHJlYW0ucmVsZWFzZSgpOworfQorI2VuZGlmCisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorI2luY2x1ZGUgIkNhbGN1bGF0
aW9uVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YTsKKworZW51bSBDU1NQcm9wZXJ0eUlEIDogdWludDE2X3Q7CisKK2VudW0gY2xh
c3MgQ1NTVW5pdFR5cGUgOiB1aW50OF90OworCitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUg
OiBwdWJsaWMgUmVmQ291bnRlZDxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHsKK3B1YmxpYzoKKyAg
ICBlbnVtIFR5cGUgeworICAgICAgICBDc3NDYWxjUHJpbWl0aXZlVmFsdWUgPSAxLAorICAgICAg
ICBDc3NDYWxjT3BlcmF0aW9uLAorICAgICAgICBDc3NDYWxjTmVnYXRlLAorICAgICAgICBDc3ND
YWxjSW52ZXJ0LAorICAgIH07CisKKyAgICB2aXJ0dWFsIH5DU1NDYWxjRXhwcmVzc2lvbk5vZGUo
KSA9IGRlZmF1bHQ7CisgICAgdmlydHVhbCBib29sIGlzWmVybygpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHBy
ZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fY2F0ZWdvcnkgPT0gb3RoZXIu
bV9jYXRlZ29yeTsgfQorICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1
YWwgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBjb2xsZWN0RGlyZWN0
Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNv
bnN0ID0gMDsKKworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7IHJl
dHVybiBtX2NhdGVnb3J5OyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikg
Y29uc3QgPSAwOworCitwcm90ZWN0ZWQ6CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGN1
bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkpCisgICAgICAgIDogbV9jYXRlZ29yeShjYXRlZ29yeSkK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9jYXRl
Z29yeTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYpOworCisjaWYgIUxPR19ESVNBQkxFRAorU3RyaW5nIHByZXR0
eVByaW50Tm9kZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKTsKK1N0cmluZyBwcmV0dHlQ
cmludE5vZGVzKGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mKTsKKyNl
bmRpZgorCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVT
U0lPTl9OT0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0
dXJuIG5vZGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2Fs
Yy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNT
U0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oIgorCisjaW5jbHVkZSAiQ1NTQ2FsY0NhdGVnb3J5
TWFwcGluZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNJbnZlcnROb2RlLmgiCisjaW5jbHVkZSAiQ1NT
Q2FsY05lZ2F0ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIgorI2lu
Y2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFs
dWUuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXJUb2tlbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclRv
a2VuUmFuZ2UuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGNvbnN0ZXhwciBpbnQgbWF4RXhwcmVzc2lvbkRlcHRoID0gMTAwOworCisvLyA8
aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jY2FsYy1zeW50YXg+OgorLy8g
PGNhbGMoKT4gID0gY2FsYyggPGNhbGMtc3VtPiApCisvLyA8bWluKCk+ICAgPSBtaW4oIDxjYWxj
LXN1bT4jICkKKy8vIDxtYXgoKT4gICA9IG1heCggPGNhbGMtc3VtPiMgKQorLy8gPGNsYW1wKCk+
ID0gY2xhbXAoIDxjYWxjLXN1bT4jezN9ICkKKy8vIDxzaW4oKT4gICA9IHNpbiggPGNhbGMtc3Vt
PiApCisvLyA8Y29zKCk+ICAgPSBjb3MoIDxjYWxjLXN1bT4gKQorLy8gPHRhbigpPiAgID0gdGFu
KCA8Y2FsYy1zdW0+ICkKKy8vIDxhc2luKCk+ICA9IGFzaW4oIDxjYWxjLXN1bT4gKQorLy8gPGFj
b3MoKT4gID0gYWNvcyggPGNhbGMtc3VtPiApCisvLyA8YXRhbigpPiAgPSBhdGFuKCA8Y2FsYy1z
dW0+ICkKKy8vIDxhdGFuMigpPiA9IGF0YW4yKCA8Y2FsYy1zdW0+LCA8Y2FsYy1zdW0+ICkKKy8v
IDxwb3coKT4gICA9IHBvdyggPGNhbGMtc3VtPiwgPGNhbGMtc3VtPiApCisvLyA8c3FydCgpPiAg
PSBzcXJ0KCA8Y2FsYy1zdW0+ICkKKy8vIDxoeXBvdCgpPiA9IGh5cG90KCA8Y2FsYy1zdW0+IyAp
CisvLyA8Y2FsYy1zdW0+ID0gPGNhbGMtcHJvZHVjdD4gWyBbICcrJyB8ICctJyBdIDxjYWxjLXBy
b2R1Y3Q+IF0qCisvLyA8Y2FsYy1wcm9kdWN0PiA9IDxjYWxjLXZhbHVlPiBbIFsgJyonIHwgJy8n
IF0gPGNhbGMtdmFsdWU+IF0qCisvLyA8Y2FsYy12YWx1ZT4gPSA8bnVtYmVyPiB8IDxkaW1lbnNp
b24+IHwgPHBlcmNlbnRhZ2U+IHwgKCA8Y2FsYy1zdW0+ICkKK1JlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjKENTU1BhcnNl
clRva2VuUmFuZ2UgdG9rZW5zLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKQoreworICAgIHRva2Vucy5j
b25zdW1lV2hpdGVzcGFjZSgpOworCisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
cmVzdWx0OworICAgIGJvb2wgb2sgPSBwYXJzZUNhbGNGdW5jdGlvbih0b2tlbnMsIGZ1bmN0aW9u
LCAwLCByZXN1bHQpOworICAgIGlmICghb2sgfHwgIXRva2Vucy5hdEVuZCgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjICIgPDwgcHJldHR5UHJpbnROb2RlKCpyZXN1bHQpKTsK
KworICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShyZXN1bHQucmVs
ZWFzZU5vbk51bGwoKSk7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAtIGFmdGVyIHNpbXBsaWZpY2F0
aW9uICIgPDwgcHJldHR5UHJpbnROb2RlKCpyZXN1bHQpKTsKKworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK2NoYXIgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpvcGVyYXRvclZhbHVlKGNv
bnN0IENTU1BhcnNlclRva2VuJiB0b2tlbikKK3sKKyAgICBpZiAodG9rZW4udHlwZSgpID09IERl
bGltaXRlclRva2VuKQorICAgICAgICByZXR1cm4gdG9rZW4uZGVsaW1pdGVyKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK2VudW0gUGFyc2VTdGF0ZSB7CisgICAgT0ssCisgICAgVG9vRGVlcCwKKyAg
ICBOb01vcmVUb2tlbnMKK307CisKK3N0YXRpYyBQYXJzZVN0YXRlIGNoZWNrRGVwdGhBbmRJbmRl
eChpbnQgZGVwdGgsIENTU1BhcnNlclRva2VuUmFuZ2UgdG9rZW5zKQoreworICAgIGlmICh0b2tl
bnMuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIE5vTW9yZVRva2VuczsKKyAgICBpZiAoZGVwdGgg
PiBtYXhFeHByZXNzaW9uRGVwdGgpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0
cmVhbSA8PCAiRGVwdGggIiA8PCBkZXB0aCA8PCAiIGV4Y2VlZGVkIG1heEV4cHJlc3Npb25EZXB0
aCAiIDw8IG1heEV4cHJlc3Npb25EZXB0aCk7CisgICAgICAgIHJldHVybiBUb29EZWVwOworICAg
IH0KKyAgICByZXR1cm4gT0s7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
OjpwYXJzZUNhbGNGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENTU1ZhbHVl
SUQgZnVuY3Rpb25JRCwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYg
cmVzdWx0KQoreworICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0g
T0spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vICJhcmd1bWVudHMiIHJlZmVycyB0
byB0aGluZ3MgYmV0d2VlbiBjb21tYXMuCisgICAgdW5zaWduZWQgbWluQXJndW1lbnRDb3VudCA9
IDE7CisgICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1heEFyZ3VtZW50Q291bnQ7CisKKyAgICBzd2l0
Y2ggKGZ1bmN0aW9uSUQpIHsKKyAgICBjYXNlIENTU1ZhbHVlTWluOgorICAgIGNhc2UgQ1NTVmFs
dWVNYXg6CisgICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSBzdGQ6Om51bGxvcHQ7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKKyAgICAgICAgbWluQXJndW1lbnRDb3Vu
dCA9IDM7CisgICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSAzOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENTU1ZhbHVlQ2FsYzoKKyAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IDE7CisgICAg
ICAgIGJyZWFrOworICAgIC8vIFRPRE86IGNsYW1wLCBzaW4sIGNvcywgdGFuLCBhc2luLCBhY29z
LCBhdGFuLCBhdGFuMiwgcG93LCBzcXJ0LCBoeXBvdC4KKyAgICBkZWZhdWx0OgorICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5v
ZGVzOworCisgICAgYm9vbCByZXF1aXJlQ29tbWEgPSBmYWxzZTsKKyAgICB1bnNpZ25lZCBhcmd1
bWVudENvdW50ID0gMDsKKyAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7CisgICAgICAgIHRv
a2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICBpZiAocmVxdWlyZUNvbW1hKSB7Cisg
ICAgICAgICAgICBpZiAodG9rZW5zLmNvbnN1bWUoKS50eXBlKCkgIT0gQ29tbWFUb2tlbikKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB0b2tlbnMuY29uc3VtZVdo
aXRlc3BhY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IG5vZGU7CisgICAgICAgIGlmICghcGFyc2VDYWxjU3VtKHRva2VucywgZGVwdGgsIG5v
ZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICsrYXJndW1lbnRDb3Vu
dDsKKyAgICAgICAgaWYgKG1heEFyZ3VtZW50Q291bnQgJiYgYXJndW1lbnRDb3VudCA+IG1heEFy
Z3VtZW50Q291bnQudmFsdWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBub2Rlcy5hcHBlbmQobm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgcmVxdWlyZUNv
bW1hID0gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgaWYgKGFyZ3VtZW50Q291bnQgPCBtaW5Bcmd1
bWVudENvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGZ1bmN0aW9u
SUQpIHsKKyAgICBjYXNlIENTU1ZhbHVlTWluOgorICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6TWluLCBXVEZN
b3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5KTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBDU1NWYWx1ZU1heDoKKyAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1heCwgV1RGTW92ZShub2Rlcyks
IG1fZGVzdGluYXRpb25DYXRlZ29yeSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFs
dWVDbGFtcDoKKyAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1p
bk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6OkNsYW1wLCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0
aW5hdGlvbkNhdGVnb3J5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtp
dENhbGM6CisgICAgY2FzZSBDU1NWYWx1ZUNhbGM6CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNP
cGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShub2RlcykpOworICAgICAgICBicmVhazsK
KyAgICAvLyBUT0RPOiBjbGFtcCwgc2luLCBjb3MsIHRhbiwgYXNpbiwgYWNvcywgYXRhbiwgYXRh
bjIsIHBvdywgc3FydCwgaHlwb3QKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICByZXR1cm4gISFyZXN1bHQ7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
UGFyc2VyOjpwYXJzZVZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgUmVmUHRyPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKK3sKKyAgICAvLyBGSVhNRTogQWRkIGNvZGUg
aGVyZSB0byBwYXJzZSBDU1NWYWxpZElEIGZvciBuYW1lZCBjb25zdGFudHMuCisKKyAgICBDU1NQ
YXJzZXJUb2tlbiB0b2tlbiA9IHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwor
ICAgIGlmICghKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0g
UGVyY2VudGFnZVRva2VuIHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBhdXRvIHR5cGUgPSB0b2tlbi51bml0VHlwZSgp
OworICAgIGlmIChjYWxjVW5pdENhdGVnb3J5KHR5cGUpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmVzdWx0ID0gQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodG9r
ZW4ubnVtZXJpY1ZhbHVlKCksIHR5cGUpKTsKKyAgICAKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1ZhbHVlKENTU1BhcnNl
clRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYgcmVzdWx0KQoreworICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2Vu
cykgIT0gT0spCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZmluZEZ1bmN0aW9u
SWQgPSBbJl0oQ1NTVmFsdWVJRCYgZnVuY3Rpb25JZCkgeworICAgICAgICBpZiAodG9rZW5zLnBl
ZWsoKS50eXBlKCkgPT0gTGVmdFBhcmVudGhlc2lzVG9rZW4pIHsKKyAgICAgICAgICAgIGZ1bmN0
aW9uSWQgPSBDU1NWYWx1ZUNhbGM7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGZ1bmN0aW9uSWQgPSB0b2tlbnMucGVlaygpLmZ1bmN0aW9uSWQoKTsKKyAg
ICAgICAgcmV0dXJuIENTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oZnVuY3Rpb25JZCk7Cisg
ICAgfTsKKworICAgIENTU1ZhbHVlSUQgZnVuY3Rpb25JZDsKKyAgICBpZiAoZmluZEZ1bmN0aW9u
SWQoZnVuY3Rpb25JZCkpIHsKKyAgICAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBpbm5lclJhbmdl
ID0gdG9rZW5zLmNvbnN1bWVCbG9jaygpOworICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3Bh
Y2UoKTsKKyAgICAgICAgaW5uZXJSYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICBy
ZXR1cm4gcGFyc2VDYWxjRnVuY3Rpb24oaW5uZXJSYW5nZSwgZnVuY3Rpb25JZCwgZGVwdGggKyAx
LCByZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiBwYXJzZVZhbHVlKHRva2VucywgcmVzdWx0
KTsKK30KKworYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1Byb2R1
Y3QoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCit7CisgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChk
ZXB0aCwgdG9rZW5zKSAhPSBPSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZmlyc3RWYWx1ZTsKKyAgICBpZiAoIXBhcnNlQ2FsY1Zh
bHVlKHRva2VucywgZGVwdGgsIGZpcnN0VmFsdWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworCisgICAgd2hp
bGUgKCF0b2tlbnMuYXRFbmQoKSkgeworICAgICAgICBjaGFyIG9wZXJhdG9yQ2hhcmFjdGVyID0g
b3BlcmF0b3JWYWx1ZSh0b2tlbnMucGVlaygpKTsKKyAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFj
dGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpICYmIG9wZXJh
dG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6RGl2aWRlKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IG5leHRWYWx1ZTsKKyAgICAgICAgaWYgKCFwYXJzZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRoLCBu
ZXh0VmFsdWUpIHx8ICFuZXh0VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVy
YXRvcjo6RGl2aWRlKSkKKyAgICAgICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNJbnZlcnROb2Rl
OjpjcmVhdGUobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgICAgIGlmIChmaXJz
dFZhbHVlKQorICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7CisKKyAgICAgICAgbm9kZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKKyAgICB9CisKKyAgICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlc3VsdCA9
IFdURk1vdmUoZmlyc3RWYWx1ZSk7CisgICAgICAgIHJldHVybiAhIXJlc3VsdDsKKyAgICB9CisK
KyAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3Zl
KG5vZGVzKSk7CisgICAgcmV0dXJuICEhcmVzdWx0OworfQorCitib29sIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjU3VtKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2Vucywg
aW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAg
IGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFs
dWU7CisgICAgaWYgKCFwYXJzZUNhbGNQcm9kdWN0KHRva2VucywgZGVwdGgsIGZpcnN0VmFsdWUp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+IG5vZGVzOworCisgICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgeworICAgICAg
ICBjaGFyIG9wZXJhdG9yQ2hhcmFjdGVyID0gb3BlcmF0b3JWYWx1ZSh0b2tlbnMucGVlaygpKTsK
KyAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNP
cGVyYXRvcjo6QWRkKSAmJiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihD
YWxjT3BlcmF0b3I6OlN1YnRyYWN0KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlm
ICgoJnRva2Vucy5wZWVrKCkgLSAxKS0+dHlwZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2FsYygxcHgrIDJweCkgaXMgaW52YWxpZAorCisgICAg
ICAgIHRva2Vucy5jb25zdW1lKCk7CisgICAgICAgIGlmICh0b2tlbnMucGVlaygpLnR5cGUoKSAh
PSBXaGl0ZXNwYWNlVG9rZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4
ICsycHgpIGlzIGludmFsaWQKKworICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKKworICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBuZXh0VmFs
dWU7CisgICAgICAgIGlmICghcGFyc2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBuZXh0VmFs
dWUpIHx8ICFuZXh0VmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKG9wZXJhdG9yQ2hhcmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6
U3VidHJhY3QpKQorICAgICAgICAgICAgbmV4dFZhbHVlID0gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNy
ZWF0ZShuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAgICAgaWYgKGZpcnN0VmFs
dWUpCisgICAgICAgICAgICBub2Rlcy5hcHBlbmQoZmlyc3RWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKKworICAgICAgICBub2Rlcy5hcHBlbmQobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIH0KKworICAgIGlmIChub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0ID0gV1RG
TW92ZShmaXJzdFZhbHVlKTsKKyAgICAgICAgcmV0dXJuICEhcmVzdWx0OworICAgIH0KKworICAg
IHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShub2Rlcykp
OworICAgIHJldHVybiAhIXJlc3VsdDsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFy
c2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhbGNP
cGVyYXRvci5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGU7CitjbGFzcyBDU1NQYXJz
ZXJUb2tlbjsKK2NsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CisKK2NsYXNzIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZVBhcnNlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyKENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKKyAg
ICAgICAgOiBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkoZGVzdGluYXRpb25DYXRlZ29yeSkKKyAgICB7
CisgICAgfQorCisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcGFyc2VDYWxjKENT
U1BhcnNlclRva2VuUmFuZ2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24pOworICAgIAorcHJpdmF0ZToK
KyAgICBjaGFyIG9wZXJhdG9yVmFsdWUoY29uc3QgQ1NTUGFyc2VyVG9rZW4mKTsKKworICAgIGJv
b2wgcGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4mKTsKKyAgICBib29sIHBhcnNlVmFsdWVUZXJtKENTU1BhcnNlclRva2VuUmFuZ2Um
LCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBw
YXJzZUNhbGNGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCwgaW50IGRl
cHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxj
U3VtKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZUNhbGNQcm9kdWN0KENTU1BhcnNlclRva2VuUmFu
Z2UmLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9v
bCBwYXJzZUNhbGNWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOworCisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2Rl
c3RpbmF0aW9uQ2F0ZWdvcnk7Cit9OworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2Fs
Yy9DU1NDYWxjSW52ZXJ0Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNT
U0NhbGNJbnZlcnROb2RlLmgiCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5o
IgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjSW52ZXJ0Tm9k
ZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYg
Y29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgYXV0byBjaGlsZE5vZGUgPSBtX2NoaWxkLT5j
cmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Cit9CisKK2Rv
dWJsZSBDU1NDYWxjSW52ZXJ0Tm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUp
IGNvbnN0Cit7CisgICAgYXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+ZG91YmxlVmFsdWUodW5p
dFR5cGUpOworICAgIGlmICghY2hpbGRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICByZXR1cm4gMS4wIC8gY2hpbGRWYWx1
ZTsKK30KKworZG91YmxlIENTU0NhbGNJbnZlcnROb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAg
YXV0byBjaGlsZFZhbHVlID0gbV9jaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRh
KTsKKyAgICBpZiAoIWNoaWxkVmFsdWUpCisgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OmluZmluaXR5KCk7CisgICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7Cit9
CisKK3ZvaWQgQ1NTQ2FsY0ludmVydE5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7
CisgICAgdHMgPDwgIjEvIiA8PCBtX2NoaWxkLmdldCgpOworfQorCisKK30KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIENTU0NhbGNJbnZlcnROb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxDU1NDYWxjSW52ZXJ0Tm9kZT4gY3JlYXRlKFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpCisgICAgeworICAgICAgICByZXR1cm4g
YWRvcHRSZWYoKm5ldyBDU1NDYWxjSW52ZXJ0Tm9kZShXVEZNb3ZlKGNoaWxkKSkpOworICAgIH0K
KworICAgIGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVy
biBtX2NoaWxkLmdldCgpOyB9CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsg
cmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiBjaGlsZCkgeyBtX2NoaWxkID0gV1RGTW92ZShjaGlsZCk7IH0KKwor
cHJpdmF0ZToKKyAgICBDU1NDYWxjSW52ZXJ0Tm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYmIGNoaWxkKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdv
cnkoKSkKKyAgICAgICAgLCBtX2NoaWxkKFdURk1vdmUoY2hpbGQpKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVz
c2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAg
ICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9
CisgICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKKyAgICBk
b3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBj
b25zdCBmaW5hbDsKKyAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpD
c3NDYWxjSW52ZXJ0OyB9CisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fY2hpbGQtPnByaW1pdGl2ZVR5cGUoKTsgfQorCisgICAgdm9pZCBjb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0
Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJv
cGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KKworICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2No
aWxkOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9O
X05PREUoQ1NTQ2FsY0ludmVydE5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNJbnZlcnQpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Y2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNTU0NhbGNOZWdhdGVOb2RlLmgiCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5lZ2F0aW9u
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNOZWdhdGVO
b2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBhdXRvIGNoaWxkTm9kZSA9IG1fY2hpbGQt
PmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsKKyAgICByZXR1cm4gbWFrZVVu
aXF1ZTxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihXVEZNb3ZlKGNoaWxkTm9kZSkpOworfQorCit2
b2lkIENTU0NhbGNOZWdhdGVOb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAg
IHRzIDw8ICItIiA8PCBtX2NoaWxkLmdldCgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1ND
YWxjRXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1ND
YWxjTmVnYXRlTm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY05lZ2F0ZU5vZGU+IGNyZWF0ZShSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ1NTQ2FsY05lZ2F0ZU5vZGUoV1RGTW92ZShjaGlsZCkpKTsKKyAgICB9CisKKyAgICBj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZC5nZXQoKTsgfQorICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSB7IHJldHVybiBt
X2NoaWxkLmdldCgpOyB9CisKKyAgICB2b2lkIHNldENoaWxkKFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+JiYgY2hpbGQpIHsgbV9jaGlsZCA9IFdURk1vdmUoY2hpbGQpOyB9CisKK3ByaXZhdGU6
CisgICAgQ1NTQ2FsY05lZ2F0ZU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGls
ZCkKKyAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2hpbGQtPmNhdGVnb3J5KCkpCisg
ICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKGNoaWxkKSkKKyAgICB7CisgICAgfQorCisgICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBp
c1plcm8oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5pc1plcm8oKTsgfQorICAgIGRv
dWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QgZmluYWwgeyByZXR1
cm4gLW1fY2hpbGQtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsgfQorICAgIGRvdWJsZSBjb21wdXRl
TGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIC1tX2NoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lv
bkRhdGEpOyB9CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6Q3Nz
Q2FsY05lZ2F0ZTsgfQorICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2NoaWxkLT5wcmltaXRpdmVUeXBlKCk7IH0KKworICAgIHZvaWQgY29sbGVj
dERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYg
cHJvcGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRp
b25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQorICAgIHZvaWQgY29sbGVjdERpcmVjdFJv
b3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3Bl
cnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlv
bmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYpIGNvbnN0IGZpbmFsOworCisgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGls
ZDsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9O
T0RFKENTU0NhbGNOZWdhdGVOb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlOjpUeXBlOjpDc3NDYWxjTmVnYXRlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkNTU0NhbGNPcGVyYXRpb25Ob2RlLmgiCisKKyNpbmNsdWRlICJDU1NDYWxjQ2F0
ZWdvcnlNYXBwaW5nLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0ludmVydE5vZGUuaCIKKyNpbmNsdWRl
ICJDU1NDYWxjTmVnYXRlTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKy8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiB0aGUgIlRvIGFkZCB0d28gdHlw
ZXMgdHlwZTEgYW5kIHR5cGUyLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6IiBydWxlcy4K
Kworc3RhdGljIGNvbnN0IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV1bc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV0gPSB7CisvLyAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5n
dGggICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50ICAgICAgICBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVu
Z3RoCisgICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsICAgICAgICBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVt
YmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpPdGhlciB9LCAvLyAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcgorICAg
IHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TGVuZ3RoLCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgKKyAgICB7IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsICAgICAgIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5n
dGggfSwgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudAorICAgIHsgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAg
ICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyCisgICAgeyBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3Ro
LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8v
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgKK307CisKK3N0YXRpYyBDYWxjdWxh
dGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9k
ZSYgbGVmdFNpZGUsIGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxj
T3BlcmF0b3Igb3ApCit7CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBs
ZWZ0U2lkZS5jYXRlZ29yeSgpOworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgcmlnaHRDYXRlZ29y
eSA9IHJpZ2h0U2lkZS5jYXRlZ29yeSgpOworICAgIEFTU0VSVChsZWZ0Q2F0ZWdvcnkgPCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7CisgICAgQVNTRVJUKHJpZ2h0Q2F0ZWdvcnkgPCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7CisKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBD
YWxjT3BlcmF0b3I6OkFkZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAg
ICAgIGlmIChsZWZ0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiByaWdo
dENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCisgICAgICAgICAgICByZXR1
cm4gYWRkU3VidHJhY3RSZXN1bHRbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlZnRDYXRlZ29yeSld
W3N0YXRpY19jYXN0PHVuc2lnbmVkPihyaWdodENhdGVnb3J5KV07CisgICAgICAgIGlmIChsZWZ0
Q2F0ZWdvcnkgPT0gcmlnaHRDYXRlZ29yeSkKKyAgICAgICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdv
cnk7CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6CisgICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgIT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICYmIHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyOworICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlciA/IHJpZ2h0Q2F0ZWdvcnkgOiBsZWZ0Q2F0ZWdvcnk7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkRpdmlkZToKKyAgICAgICAgaWYgKHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyIHx8IHJpZ2h0U2lkZS5pc1plcm8oKSkKKyAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIGxlZnRDYXRl
Z29yeTsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgorICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpNYXg6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwor
ICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcjsKK30KKworLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IGNvcnJl
Y3QgY2F0ZWdvcnkgY29tcHV0YXRpb24gcGVyOgorLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3Vk
aW5pLm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLWludmVydC1hLXR5cGU+Cisv
LyBUbyBpbnZlcnQgYSB0eXBlIHR5cGUsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKKy8v
IExldCByZXN1bHQgYmUgYSBuZXcgdHlwZSB3aXRoIGFuIGluaXRpYWxseSBlbXB0eSBvcmRlcmVk
IG1hcCBhbmQgYW4gaW5pdGlhbGx5IG51bGwgcGVyY2VudCBoaW50CisvLyBGb3IgZWFjaCB1bml0
IOKGkiBleHBvbmVudCBvZiB0eXBlLCBzZXQgcmVzdWx0W3VuaXRdIHRvICgtMSAqIGV4cG9uZW50
KS4KK3N0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5Rm9ySW52ZXJ0KENhbGN1bGF0
aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkpCit7CisgICAgcmV0dXJuIGNhdGVnb3J5OworfQorCitzdGF0
aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBub2RlcywgQ2FsY09wZXJhdG9yIG9wKQoreworICAg
IGlmIChub2Rlcy5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcjsKKworICAgIGF1dG8gY3VycmVudENhdGVnb3J5ID0gbm9kZXNbMF0tPmNhdGVnb3J5
KCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbm9kZXMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgY29uc3QgYXV0byYgbm9kZSA9IG5vZGVzW2ldLmdldCgpOworICAgICAgICAKKyAg
ICAgICAgYXV0byB1c2VkT3BlcmF0b3IgPSBvcDsKKyAgICAgICAgaWYgKG5vZGUudHlwZSgpID09
IENTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY0ludmVydCkKKyAgICAgICAgICAg
IHVzZWRPcGVyYXRvciA9IENhbGNPcGVyYXRvcjo6RGl2aWRlOworCisgICAgICAgIGF1dG8gbmV4
dENhdGVnb3J5ID0gbm9kZS5jYXRlZ29yeSgpOworCisgICAgICAgIHN3aXRjaCAodXNlZE9wZXJh
dG9yKSB7CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpTdWJ0cmFjdDoKKyAgICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3Mt
aG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1hZGQtdHdvLXR5cGVz
PgorICAgICAgICAgICAgLy8gQXQgYSArIG9yIC0gc3ViLWV4cHJlc3Npb24sIGF0dGVtcHQgdG8g
YWRkIHRoZSB0eXBlcyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYXJndW1lbnRzLgorICAgICAgICAg
ICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhaWx1cmUsIHRoZSBlbnRpcmUgY2FsY3VsYXRpb27igJlz
IHR5cGUgaXMgZmFpbHVyZS4gT3RoZXJ3aXNlLCB0aGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUg
aXMgdGhlIHJldHVybmVkIHR5cGUuCisgICAgICAgICAgICBpZiAoY3VycmVudENhdGVnb3J5IDwg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUgJiYgbmV4dENhdGVnb3J5IDwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGUpCisgICAgICAgICAgICAgICAgY3VycmVudENhdGVnb3J5ID0gYWRkU3Vi
dHJhY3RSZXN1bHRbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGN1cnJlbnRDYXRlZ29yeSldW3N0YXRp
Y19jYXN0PHVuc2lnbmVkPihuZXh0Q2F0ZWdvcnkpXTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGN1
cnJlbnRDYXRlZ29yeSAhPSBuZXh0Q2F0ZWdvcnkpCisgICAgICAgICAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
Y2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgorICAgICAgICAgICAgLy8gPGh0dHBzOi8vZHJh
ZnRzLmNzcy1ob3VkaW5pLm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLW11bHRp
cGx5LXR3by10eXBlcz4KKyAgICAgICAgICAgIC8vIEF0IGEgKiBzdWItZXhwcmVzc2lvbiwgbXVs
dGlwbHkgdGhlIHR5cGVzIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVudHMuIFRoZSBzdWIt
ZXhwcmVzc2lvbuKAmXMgdHlwZSBpcyB0aGUgcmV0dXJuZWQgcmVzdWx0LgorICAgICAgICAgICAg
aWYgKGN1cnJlbnRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgbmV4
dENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisKKyAgICAgICAgICAgIGN1cnJl
bnRDYXRlZ29yeSA9IGN1cnJlbnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1i
ZXIgPyBuZXh0Q2F0ZWdvcnkgOiBjdXJyZW50Q2F0ZWdvcnk7CisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7CisgICAgICAgICAgICBhdXRv
IGludmVydENhdGVnb3J5ID0gY2F0ZWdvcnlGb3JJbnZlcnQobmV4dENhdGVnb3J5KTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgLy8gQXQgYSAvIHN1Yi1leHByZXNzaW9uLCBsZXQgbGVmdCB0
eXBlIGJlIHRoZSByZXN1bHQgb2YgZmluZGluZyB0aGUgdHlwZXMgb2YgaXRzIGxlZnQgYXJndW1l
bnQsCisgICAgICAgICAgICAvLyBhbmQgcmlnaHQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRp
bmcgdGhlIHR5cGVzIG9mIGl0cyByaWdodCBhcmd1bWVudCBhbmQgdGhlbiBpbnZlcnRpbmcgaXQu
CisgICAgICAgICAgICAvLyBUaGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJlc3Vs
dCBvZiBtdWx0aXBseWluZyB0aGUgbGVmdCB0eXBlIGFuZCByaWdodCB0eXBlLgorICAgICAgICAg
ICAgaWYgKGludmVydENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCBu
b2RlLmlzWmVybygpKQorICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBD
YWxjT3BlcmF0b3I6Ok1pbjoKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDoKKyAgICAg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgorICAgICAgICAgICAgLy8gVGhlIHR5cGUgb2Yg
YSBtaW4oKSwgbWF4KCksIG9yIGNsYW1wKCkgZXhwcmVzc2lvbiBpcyB0aGUgcmVzdWx0IG9mIGFk
ZGluZyB0aGUgdHlwZXMgb2YgaXRzIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbnMKKyAgICAg
ICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHJldHVybiBjdXJyZW50Q2F0ZWdvcnk7Cit9CisKK3N0YXRpYyBDYWxjdWxhdGlv
bkNhdGVnb3J5IHJlc29sdmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcChDYWxjdWxhdGlvbkNhdGVn
b3J5IGNhdGVnb3J5LCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7
CisgICAgc3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpB
bmdsZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcjoKKyAgICAgICAgcmV0dXJuIGNhdGVnb3J5OworCisgICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50OgorICAgICAgICBpZiAoZGVzdGluYXRpb25DYXRlZ29yeSA9PSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDsKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdv
cnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI7CisgICAgICAgIHJldHVybiBjYXRlZ29y
eTsKKyAgICB9CisKKyAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cit9CisK
K3N0YXRpYyBib29sIGlzU2FtZVBhaXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBhLCBDYWxjdWxhdGlv
bkNhdGVnb3J5IGIsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgeCwgQ2FsY3VsYXRpb25DYXRlZ29yeSB5
KQoreworICAgIHJldHVybiAoYSA9PSB4ICYmIGIgPT0geSkgfHwgKGEgPT0geSAmJiBiID09IHgp
OworfQorCitlbnVtIGNsYXNzIFNvcnRpbmdDYXRlZ29yeSB7CisgICAgTnVtYmVyLAorICAgIFBl
cmNlbnQsCisgICAgRGltZW5zaW9uLAorICAgIE90aGVyCit9OworCitzdGF0aWMgU29ydGluZ0Nh
dGVnb3J5IHNvcnRpbmdDYXRlZ29yeUZvclR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpCit7Cisg
ICAgc3RhdGljIGNvbnN0ZXhwciBTb3J0aW5nQ2F0ZWdvcnkgc29ydE9yZGVyW10gPSB7CisgICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyLAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpQZXJj
ZW50LCAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50LAorICAgICAgICBTb3J0
aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXIsCisgICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5
OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSwKKyAgICAgICAg
U29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpU
aW1lLAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpPdGhlciwg
ICAgICAgICAvLyBVT3RoZXIKKyAgICB9OworCisgICAgQ09NUElMRV9BU1NFUlQoQVJSQVlfU0la
RShzb3J0T3JkZXIpID09IHN0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcikgKyAxLCBzb3J0T3JkZXJfc2l6ZV9zaG91bGRfbWF0Y2hfVW5pdENhdGVnb3J5KTsK
KyAgICByZXR1cm4gc29ydE9yZGVyW3N0YXRpY19jYXN0PHVuc2lnbmVkPihjYWxjVW5pdENhdGVn
b3J5KHVuaXRUeXBlKSldOworfQorCitzdGF0aWMgU29ydGluZ0NhdGVnb3J5IHNvcnRpbmdDYXRl
Z29yeShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgaWYgKGlzPENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICByZXR1cm4gc29ydGluZ0Nh
dGVnb3J5Rm9yVHlwZShub2RlLnByaW1pdGl2ZVR5cGUoKSk7CisKKyAgICByZXR1cm4gU29ydGlu
Z0NhdGVnb3J5OjpPdGhlcjsKK30KKworc3RhdGljIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGVG
b3JDb21iaW5hdGlvbihjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAg
aWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKQorICAgICAgICByZXR1cm4g
bm9kZS5wcmltaXRpdmVUeXBlKCk7CisgICAgCisgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1Nf
VU5LTk9XTjsKK30KKworc3RhdGljIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252
ZXJzaW9uIGNvbnZlcnNpb25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhDU1NVbml0VHlwZSBmaXJzdFR5
cGUsIENTU1VuaXRUeXBlIHNlY29uZFR5cGUpCit7CisgICAgaWYgKGZpcnN0VHlwZSA9PSBDU1NV
bml0VHlwZTo6Q1NTX1VOS05PV04gfHwgc2Vjb25kVHlwZSA9PSBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV04pCisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29u
dmVyc2lvbjo6SW52YWxpZDsKKworICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1bGF0aW9u
Q2F0ZWdvcnlGb3JDb21iaW5hdGlvbihmaXJzdFR5cGUpOworCisgICAgLy8gQ29tcGF0aWJsZSB0
eXBlcy4KKyAgICBpZiAoZmlyc3RDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
ciAmJiBmaXJzdENhdGVnb3J5ID09IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihz
ZWNvbmRUeXBlKSkKKyAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVu
aXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU7CisKKyAgICAvLyBNYXRjaGluZyB0eXBlcy4KKyAg
ICBpZiAoZmlyc3RUeXBlID09IHNlY29uZFR5cGUgJiYgaGFzRG91YmxlVmFsdWUoZmlyc3RUeXBl
KSkKKyAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJz
aW9uOjpQcmVzZXJ2ZTsKKworICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpV
bml0Q29udmVyc2lvbjo6SW52YWxpZDsKK30KKworCitzdGF0aWMgQ1NTVmFsdWVJRCBmdW5jdGlv
bkZyb21PcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0
OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKKyAgICBjYXNlIENhbGNPcGVyYXRv
cjo6RGl2aWRlOgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVDYWxjOworICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpNaW46CisgICAgICAgIHJldHVybiBDU1NWYWx1ZU1pbjsKKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWF4OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVNYXg7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OkNsYW1wOgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVDbGFtcDsKKyAgICB9Cisg
ICAgcmV0dXJuIENTU1ZhbHVlQ2FsYzsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2Rl
PiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVyYXRvciBvcCwgUmVmUHRyPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mJiByaWdodFNpZGUpCit7CisgICAgaWYgKCFsZWZ0U2lkZSB8fCAhcmlnaHRTaWRlKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6
OkFkZCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKKworICAgIEFTU0VSVChsZWZ0
U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKyAgICBBU1NF
UlQocmlnaHRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwor
CisgICAgYXV0byBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KCpsZWZ0U2lkZSwgKnJp
Z2h0U2lkZSwgb3ApOworICAgIGlmIChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcikgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWls
ZWQgdG8gY3JlYXRlIENTU0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBub2RlIGJlY2F1
c2UgdW5hYmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2Rl
KCpsZWZ0U2lkZSkgPDwgIiBhbmQgIiA8PCAqcmlnaHRTaWRlKTsKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9u
Tm9kZShuZXdDYXRlZ29yeSwgb3AsIGxlZnRTaWRlLnJlbGVhc2VOb25OdWxsKCksIHJpZ2h0U2lk
ZS5yZWxlYXNlTm9uTnVsbCgpKSk7Cit9CisKK1JlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4g
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+JiYgdmFsdWVzKQoreworICAgIGlmICh2YWx1ZXMuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRl
Z29yeSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6QWRkKTsKKyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENh
bGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBzdW0gbm9kZSBiZWNhdXNlIHVuYWJsZSB0
byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXModmFsdWVzKSk7
CisgICAgICAgIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3Bl
cmF0b3I6OkFkZCk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVy
biBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIENhbGNPcGVy
YXRvcjo6QWRkLCBXVEZNb3ZlKHZhbHVlcykpKTsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRp
b25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChWZWN0b3I8UmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKQoreworICAgIGlmICh2YWx1ZXMuaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBk
ZXRlcm1pbmVDYXRlZ29yeSh2YWx1ZXMsIENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOworICAgIGlm
IChuZXdDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHByb2R1Y3Qg
bm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0
eVByaW50Tm9kZXModmFsdWVzKSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKwor
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnks
IENhbGNPcGVyYXRvcjo6TXVsdGlwbHksIFdURk1vdmUodmFsdWVzKSkpOworfQorCitSZWZQdHI8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1h
eE9yQ2xhbXAoQ2FsY09wZXJhdG9yIG9wLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4+JiYgdmFsdWVzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7
CisgICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG9wID09IENhbGNPcGVyYXRv
cjo6TWF4IHx8IG9wID09IENhbGNPcGVyYXRvcjo6Q2xhbXApOworICAgIEFTU0VSVF9JTVBMSUVT
KG9wID09IENhbGNPcGVyYXRvcjo6Q2xhbXAsIHZhbHVlcy5zaXplKCkgPT0gMyk7CisKKyAgICBP
cHRpb25hbDxDYWxjdWxhdGlvbkNhdGVnb3J5PiBjYXRlZ29yeSA9IHN0ZDo6bnVsbG9wdDsKKyAg
ICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKSB7CisgICAgICAgIGF1dG8gdmFsdWVDYXRlZ29y
eSA9IHJlc29sdmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcCh2YWx1ZS0+Y2F0ZWdvcnkoKSwgZGVz
dGluYXRpb25DYXRlZ29yeSk7CisKKyAgICAgICAgQVNTRVJUKHZhbHVlQ2F0ZWdvcnkgPCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7CisgICAgICAgIGlmICghY2F0ZWdvcnkpIHsKKyAgICAg
ICAgICAgIGlmICh2YWx1ZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7
CisgICAgICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVk
IHRvIGNyZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9kZSBiZWNhdXNl
IHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZXMo
dmFsdWVzKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBjYXRlZ29yeSA9IHZhbHVlQ2F0ZWdvcnk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoY2F0ZWdvcnkgIT0gdmFsdWVDYXRlZ29yeSkgeworICAgICAgICAgICAgaWYgKGlz
U2FtZVBhaXIoY2F0ZWdvcnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKSkgeworICAg
ICAgICAgICAgICAgIGNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0
aDsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikp
IHsKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnROdW1iZXI7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoY2F0ZWdvcnkudmFsdWUoKSwgb3AsIFdU
Rk1vdmUodmFsdWVzKSkpOworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpob2lzdENo
aWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBBU1NFUlQob3AgPT0g
Q2FsY09wZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7CisKKyAg
ICBhdXRvIGhhc0NoaWxkV2l0aE9wZXJhdG9yID0gWyZdIChDYWxjT3BlcmF0b3Igb3ApIHsKKyAg
ICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlmIChp
czxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNP
cGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH07CisKKyAgICBpZiAoIWhhc0NoaWxkV2l0aE9wZXJhdG9yKG9wKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJl
bjsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICBpZiAoaXM8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKSB7CisgICAgICAg
ICAgICBhdXRvJiBjaGlsZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGls
ZC5nZXQoKSkuY2hpbGRyZW4oKTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGRUb01vdmUg
OiBjaGlsZHJlbikKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShj
aGlsZFRvTW92ZSkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFw
cGVuZChXVEZNb3ZlKGNoaWxkKSk7CisgICAgfQorICAgIAorICAgIG5ld0NoaWxkcmVuLnNocmlu
a1RvRml0KCk7CisgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworfQorCiti
b29sIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdAor
eworICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmICghaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obV9jaGlsZHJlblswXSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gZmlyc3RVbml0VHlwZSA9IG1fY2hp
bGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKyAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxj
dWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24obV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlw
ZSgpKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGF1dG8mIG5vZGUgPSBtX2NoaWxkcmVuW2ldOworCisgICAgICAgIGlm
ICghaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byBub2RlVW5pdFR5cGUgPSBub2RlLT5wcmltaXRpdmVU
eXBlKCk7CisgICAgICAgIGF1dG8gbm9kZUNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZv
ckNvbWJpbmF0aW9uKG5vZGVVbml0VHlwZSk7CisKKyAgICAgICAgaWYgKG5vZGVDYXRlZ29yeSAh
PSBmaXJzdENhdGVnb3J5KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
IChub2RlQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgJiYgbm9kZVVuaXRU
eXBlICE9IGZpcnN0VW5pdFR5cGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBpZiAoIWhhc0RvdWJsZVZhbHVlKG5vZGVVbml0VHlwZSkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNvbWJpbmVDaGlsZHJlbigpCit7CisgICAgaWYgKG1fY2hpbGRy
ZW4uc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKHNob3VsZFNvcnRDaGls
ZHJlbigpKSB7CisgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVl
cy00LyNzb3J0LWEtY2FsY3VsYXRpb25zLWNoaWxkcmVuPgorICAgICAgICBzdGQ6OnN0YWJsZV9z
b3J0KG1fY2hpbGRyZW4uYmVnaW4oKSwgbV9jaGlsZHJlbi5lbmQoKSwgW10oY29uc3QgYXV0byYg
Zmlyc3QsIGNvbnN0IGF1dG8mIHNlY29uZCkgeworICAgICAgICAgICAgLy8gU29ydCBvcmRlcjog
bnVtYmVyLCBwZXJjZW50YWdlLCBkaW1lbnNpb24sIG90aGVyLgorICAgICAgICAgICAgU29ydGlu
Z0NhdGVnb3J5IGZpcnN0Q2F0ZWdvcnkgPSBzb3J0aW5nQ2F0ZWdvcnkoZmlyc3QuZ2V0KCkpOwor
ICAgICAgICAgICAgU29ydGluZ0NhdGVnb3J5IHNlY29uZENhdGVnb3J5ID0gc29ydGluZ0NhdGVn
b3J5KHNlY29uZC5nZXQoKSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChmaXJzdENh
dGVnb3J5ID09IFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uICYmIHNlY29uZENhdGVnb3J5ID09
IFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uKSB7CisgICAgICAgICAgICAgICAgLy8gSWYgbm9k
ZXMgY29udGFpbnMgYW55IGRpbWVuc2lvbnMsIHJlbW92ZSB0aGVtIGZyb20gbm9kZXMsIHNvcnQg
dGhlbSBieSB0aGVpciB1bml0cywgYW5kIGFwcGVuZCB0aGVtIHRvIHJldC4KKyAgICAgICAgICAg
ICAgICBhdXRvIGZpcnN0VW5pdFN0cmluZyA9IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0
cmluZyhmaXJzdC0+cHJpbWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgICAgICBhdXRvIHNlY29u
ZFVuaXRTdHJpbmcgPSBDU1NQcmltaXRpdmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcoc2Vjb25kLT5w
cmltaXRpdmVUeXBlKCkpOworICAgICAgICAgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJl
TGVzc1RoYW4oZmlyc3RVbml0U3RyaW5nLCBzZWNvbmRVbml0U3RyaW5nKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPihmaXJzdENhdGVn
b3J5KSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihzZWNvbmRDYXRlZ29yeSk7CisgICAgICAgIH0p
OworCisgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgInBvc3Qtc29ydDog
IiA8PCAqdGhpcyk7CisgICAgfQorCisgICAgaWYgKGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVy
YXRvcjo6QWRkKSB7CisgICAgICAgIC8vIEZvciBlYWNoIHNldCBvZiByb2904oCZcyBjaGlsZHJl
biB0aGF0IGFyZSBudW1lcmljIHZhbHVlcyB3aXRoIGlkZW50aWNhbCB1bml0cywKKyAgICAgICAg
Ly8gcmVtb3ZlIHRob3NlIGNoaWxkcmVuIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHNpbmdsZSBu
dW1lcmljIHZhbHVlIGNvbnRhaW5pbmcKKyAgICAgICAgLy8gdGhlIHN1bSBvZiB0aGUgcmVtb3Zl
ZCBub2RlcywgYW5kIHdpdGggdGhlIHNhbWUgdW5pdC4KKyAgICAgICAgVmVjdG9yPFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdDaGlsZHJlbjsKKyAgICAgICAgbmV3Q2hpbGRyZW4ucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuLnNpemUoKSk7CisgICAgICAgIG5ld0NoaWxk
cmVuLnVuY2hlY2tlZEFwcGVuZChtX2NoaWxkcmVuWzBdLmNvcHlSZWYoKSk7CisKKyAgICAgICAg
Q1NTVW5pdFR5cGUgcHJldmlvdXNUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG5l
d0NoaWxkcmVuWzBdLmdldCgpKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwg
bV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byYgY3VycmVudE5vZGUg
PSBtX2NoaWxkcmVuW2ldOworICAgICAgICAgICAgQ1NTVW5pdFR5cGUgY3VycmVudFR5cGUgPSBw
cmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24oY3VycmVudE5vZGUuZ2V0KCkpOworCisgICAgICAg
ICAgICBhdXRvIGNvbnZlcnNpb25UeXBlID0gY29udmVyc2lvblRvQWRkVmFsdWVzV2l0aFR5cGVz
KHByZXZpb3VzVHlwZSwgY3VycmVudFR5cGUpOworICAgICAgICAgICAgaWYgKGNvbnZlcnNpb25U
eXBlICE9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpJbnZhbGlk
KSB7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4o
bmV3Q2hpbGRyZW4ubGFzdCgpLmdldCgpKS5hZGQoZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZT4oY3VycmVudE5vZGUuZ2V0KCkpLCBjb252ZXJzaW9uVHlwZSk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHByZXZpb3VzVHlw
ZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihjdXJyZW50Tm9kZSk7CisgICAgICAgICAg
ICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoY3VycmVudE5vZGUuY29weVJlZigpKTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKKyAg
ICAgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3Q2hpbGRyZW4pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6TXVsdGlw
bHkpIHsKKyAgICAgICAgLy8gSWYgcm9vdCBoYXMgbXVsdGlwbGUgY2hpbGRyZW4gdGhhdCBhcmUg
bnVtYmVycyAobm90IHBlcmNlbnRhZ2VzIG9yIGRpbWVuc2lvbnMpLAorICAgICAgICAvLyByZW1v
dmUgdGhlbSBhbmQgcmVwbGFjZSB0aGVtIHdpdGggYSBzaW5nbGUgbnVtYmVyIGNvbnRhaW5pbmcg
dGhlIHByb2R1Y3Qgb2YgdGhlIHJlbW92ZWQgbm9kZXMuCisgICAgICAgIGRvdWJsZSBtdWx0aXBs
aWVyID0gMTsKKworICAgICAgICAvLyBTb3J0aW5nIHdpbGwgaGF2ZSBwdXQgdGhlIG51bWJlciBu
b2RlcyBmaXJzdC4KKyAgICAgICAgdW5zaWduZWQgbGVhZGluZ051bWJlck5vZGVDb3VudCA9IDA7
CisgICAgICAgIGZvciAoYXV0byYgbm9kZSA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGF1
dG8gbm9kZVR5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obm9kZS5nZXQoKSk7Cisg
ICAgICAgICAgICBpZiAobm9kZVR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG11bHRpcGxpZXIg
Kj0gbm9kZS0+ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworICAgICAgICAg
ICAgKytsZWFkaW5nTnVtYmVyTm9kZUNvdW50OworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOworICAgICAg
ICBuZXdDaGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsK
KyAgICAgICAgCisgICAgICAgIC8vIElmIHJvb3QgY29udGFpbnMgb25seSB0d28gY2hpbGRyZW4s
IG9uZSBvZiB3aGljaCBpcyBhIG51bWJlciAobm90IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24p
IGFuZCB0aGUgb3RoZXIgb2YKKyAgICAgICAgLy8gd2hpY2ggaXMgYSBTdW0gd2hvc2UgY2hpbGRy
ZW4gYXJlIGFsbCBudW1lcmljIHZhbHVlcywgbXVsdGlwbHkgYWxsIG9mIHRoZSBTdW3igJlzIGNo
aWxkcmVuIGJ5IHRoZSBudW1iZXIsIHRoZW4KKyAgICAgICAgLy8gcmV0dXJuIHRoZSBTdW0uCisg
ICAgICAgIC8vIFRoZSBTdW0ncyBjaGlsZHJlbiBzaW1wbGlmaWNhdGlvbiB3aWxsIGhhdmUgaGFw
cGVuZWQgYWxyZWFkeS4KKyAgICAgICAgYm9vbCBkaWRNdWx0aXBseSA9IGZhbHNlOworICAgICAg
ICBpZiAobGVhZGluZ051bWJlck5vZGVDb3VudCAmJiBtX2NoaWxkcmVuLnNpemUoKSAtIGxlYWRp
bmdOdW1iZXJOb2RlQ291bnQgPT0gMSkgeworICAgICAgICAgICAgYXV0byBtdWx0aXBsaWNhbmRD
YXRlZ29yeSA9IGNhbGNVbml0Q2F0ZWdvcnkocHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG1f
Y2hpbGRyZW4ubGFzdCgpLmdldCgpKSk7CisgICAgICAgICAgICBpZiAobXVsdGlwbGljYW5kQ2F0
ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKKyAgICAgICAgICAgICAgICBu
ZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlbi5sYXN0KCkuY29weVJlZigpKTsK
KyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdD
aGlsZHJlblswXS5nZXQoKSkubXVsdGlwbHkobXVsdGlwbGllcik7CisgICAgICAgICAgICAgICAg
ZGlkTXVsdGlwbHkgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNP
cGVyYXRpb25Ob2RlPihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0g
Q2FsY09wZXJhdG9yOjpBZGQpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtdWx0aXBs
eWluZyB3aXRoIGFub3RoZXIgb3BlcmF0aW9uIHRoYXQgaXMgYW4gYWRkaXRpb24gYW5kIGFsbCB0
aGUgYWRkZWQgY2hpbGRyZW4KKyAgICAgICAgICAgICAgICAvLyBhcmUgcGVyY2VudGFnZXMgb3Ig
ZGltZW5zaW9ucywgd2Ugc2hvdWxkIG11bHRpcGx5IGVhY2ggY2hpbGQgYW5kIG1ha2UgdGhpcyBl
eHByZXNzaW9uIGFuCisgICAgICAgICAgICAgICAgLy8gYWRkaXRpb24uCisgICAgICAgICAgICAg
ICAgYXV0byBhbGxDaGlsZHJlbkFyZVByaW1pdGl2ZVZhbHVlcyA9IFtdKGNvbnN0IFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVuKSAtPiBib29sCisgICAgICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4p
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZT4oY2hpbGQuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgYXV0byYgY2hpbGRy
ZW4gPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0
KCkpLmNoaWxkcmVuKCk7CisgICAgICAgICAgICAgICAgaWYgKGFsbENoaWxkcmVuQXJlUHJpbWl0
aXZlVmFsdWVzKGNoaWxkcmVuKSkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNo
aWxkIDogY2hpbGRyZW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFw
cGVuZChjaGlsZC5jb3B5UmVmKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW4ubGFzdCgpLmdldCgpKS5tdWx0
aXBseShtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBtX29wZXJhdG9yID0gQ2FsY09wZXJhdG9yOjpBZGQ7CisgICAgICAgICAgICAgICAgICAg
IGRpZE11bHRpcGx5ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAoIWRpZE11bHRpcGx5KSB7CisgICAgICAgICAgICBpZiAo
bGVhZGluZ051bWJlck5vZGVDb3VudCkgeworICAgICAgICAgICAgICAgIGF1dG8gbXVsdGlwbGll
ck5vZGUgPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShtdWx0aXBsaWVyLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOworICAgICAg
ICAgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG11bHRpcGxpZXJO
b2RlKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxl
YWRpbmdOdW1iZXJOb2RlQ291bnQ7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQorICAgICAg
ICAgICAgICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChtX2NoaWxkcmVuW2ldLmNvcHlS
ZWYoKSk7CisgICAgICAgIH0KKworICAgICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CisgICAgfQorCisgICAg
aWYgKGlzTWluT3JNYXhOb2RlKCkgJiYgY2FuQ29tYmluZUFsbENoaWxkcmVuKCkpIHsKKyAgICAg
ICAgYXV0byBjb21iaW5lZFVuaXRUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgp
OworICAgICAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0
aW9uKGNvbWJpbmVkVW5pdFR5cGUpOworICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6T3RoZXIpCisgICAgICAgICAgICBjb21iaW5lZFVuaXRUeXBlID0gY2Fub25p
Y2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KGNhdGVnb3J5KTsKKworICAgICAgICBk
b3VibGUgcmVzb2x2ZWRWYWx1ZSA9IGRvdWJsZVZhbHVlKGNvbWJpbmVkVW5pdFR5cGUpOworICAg
ICAgICBhdXRvIG5ld0NoaWxkID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVzb2x2ZWRWYWx1ZSwgY29tYmluZWRVbml0VHlwZSkp
OworCisgICAgICAgIG1fY2hpbGRyZW4uY2xlYXIoKTsKKyAgICAgICAgbV9jaGlsZHJlbi5hcHBl
bmQoV1RGTW92ZShuZXdDaGlsZCkpOworICAgIH0KK30KKworLy8gaHR0cHM6Ly9kcmFmdHMuY3Nz
d2cub3JnL2Nzcy12YWx1ZXMtNC8jc2ltcGxpZnktYS1jYWxjdWxhdGlvbi10cmVlCisKK1JlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJvb3ROb2RlKQoreworICAgIHJldHVybiBzaW1wbGlm
eVJlY3Vyc2l2ZShXVEZNb3ZlKHJvb3ROb2RlKSwgMCk7Cit9CisKK1JlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeVJlY3Vyc2l2ZShSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJvb3ROb2RlLCBpbnQgZGVwdGgpCit7CisgICAgaWYgKGlz
PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgb3BlcmF0
aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZS5nZXQoKSk7
CisgICAgICAgIAorICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRy
ZW4oKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBhdXRvIGNoaWxkID0gY2hpbGRyZW5baV0uY29weVJlZigpOwor
ICAgICAgICAgICAgYXV0byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGls
ZCksIGRlcHRoICsgMSk7CisgICAgICAgICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSBjaGlsZHJl
bltpXS5wdHIoKSkKKyAgICAgICAgICAgICAgICBjaGlsZHJlbltpXSA9IFdURk1vdmUobmV3Tm9k
ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290
Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmVnYXRlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNOZWdh
dGVOb2RlPihyb290Tm9kZS5nZXQoKSk7CisgICAgICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+IGNoaWxkID0gbmVnYXRlTm9kZS5jaGlsZCgpOworICAgICAgICBhdXRvIG5ld05vZGUgPSBz
aW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGggKyAxKTsKKyAgICAgICAgaWYg
KG5ld05vZGUucHRyKCkgIT0gJm5lZ2F0ZU5vZGUuY2hpbGQoKSkKKyAgICAgICAgICAgIG5lZ2F0
ZU5vZGUuc2V0Q2hpbGQoV1RGTW92ZShuZXdOb2RlKSk7CisgICAgfSBlbHNlIGlmIChpczxDU1ND
YWxjSW52ZXJ0Tm9kZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIGludmVydE5vZGUgPSBk
b3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICBSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjaGlsZCA9IGludmVydE5vZGUuY2hpbGQoKTsKKyAgICAg
ICAgYXV0byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRo
ICsgMSk7CisgICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9ICZpbnZlcnROb2RlLmNoaWxkKCkp
CisgICAgICAgICAgICBpbnZlcnROb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOworICAg
IH0KKworICAgIHJldHVybiBzaW1wbGlmeU5vZGUoV1RGTW92ZShyb290Tm9kZSksIGRlcHRoKTsK
K30KKworUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNp
bXBsaWZ5Tm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJvb3ROb2RlLCBpbnQgZGVw
dGgpCit7CisgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KHJvb3ROb2RlKSkg
eworICAgICAgICAvLyBJZiByb290IGlzIGEgcGVyY2VudGFnZSB0aGF0IHdpbGwgYmUgcmVzb2x2
ZWQgYWdhaW5zdCBhbm90aGVyIHZhbHVlLCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9u
CisgICAgICAgIC8vIGF2YWlsYWJsZSB0byByZXNvbHZlIGl0LCBkbyBzbywgYW5kIGV4cHJlc3Mg
dGhlIHJlc3VsdGluZyBudW1lcmljIHZhbHVlIGluIHRoZSBhcHByb3ByaWF0ZSBjYW5vbmljYWwK
KyAgICAgICAgLy8gdW5pdC4gUmV0dXJuIHRoZSB2YWx1ZS4KKworICAgICAgICAvLyBJZiByb290
IGlzIGEgZGltZW5zaW9uIHRoYXQgaXMgbm90IGV4cHJlc3NlZCBpbiBpdHMgY2Fub25pY2FsIHVu
aXQsIGFuZCB0aGVyZSBpcyBlbm91Z2ggaW5mb3JtYXRpb24KKyAgICAgICAgLy8gYXZhaWxhYmxl
IHRvIGNvbnZlcnQgaXQgdG8gdGhlIGNhbm9uaWNhbCB1bml0LCBkbyBzbywgYW5kIHJldHVybiB0
aGUgdmFsdWUuCisgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KHJvb3ROb2RlLmdldCgpKTsKKyAgICAgICAgcHJpbWl0
aXZlVmFsdWVOb2RlLmNhbm9uaWNhbGl6ZVVuaXQoKTsKKyAgICAgICAgcmV0dXJuIFdURk1vdmUo
cm9vdE5vZGUpOworICAgIH0KKworICAgIC8vIElmIHJvb3QgaXMgYW4gb3BlcmF0b3Igbm9kZSB0
aGF04oCZcyBub3Qgb25lIG9mIHRoZSBjYWxjLW9wZXJhdG9yIG5vZGVzLCBhbmQgYWxsIG9mIGl0
cyBjaGlsZHJlbiBhcmUgbnVtZXJpYyB2YWx1ZXMKKyAgICAvLyB3aXRoIGVub3VnaCBpbmZvcm1h
dGlvbiB0byBjb21wdXRlZCB0aGUgb3BlcmF0aW9uIHJvb3QgcmVwcmVzZW50cywgcmV0dXJuIHRo
ZSByZXN1bHQgb2YgcnVubmluZyByb2904oCZcyBvcGVyYXRpb24KKyAgICAvLyB1c2luZyBpdHMg
Y2hpbGRyZW4sIGV4cHJlc3NlZCBpbiB0aGUgcmVzdWx04oCZcyBjYW5vbmljYWwgdW5pdC4KKyAg
ICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRv
JiBjYWxjT3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290
Tm9kZS5nZXQoKSk7CisgICAgICAgIC8vIERvbid0IHNpbXBsaWZ5IGF0IHRoZSByb290LCBvdGhl
cndpc2Ugd2UgbG9zZSB0cmFjayBvZiB0aGUgb3BlcmF0aW9uIGZvciBzZXJpYWxpemF0aW9uLgor
ICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKS5zaXplKCkgPT0gMSAmJiBk
ZXB0aCkKKyAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxk
cmVuKClbMF0pOworICAgICAgICAKKyAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzQ2Fs
Y1N1bU5vZGUoKSkgeworICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJl
bldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3I6OkFkZCk7CisgICAgICAgICAgICBjYWxjT3BlcmF0
aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4oKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjYWxj
T3BlcmF0aW9uTm9kZS5pc0NhbGNQcm9kdWN0Tm9kZSgpKSB7CisgICAgICAgICAgICBjYWxjT3Bl
cmF0aW9uTm9kZS5ob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcjo6TXVsdGlw
bHkpOworICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5pc01pbk9y
TWF4Tm9kZSgpKQorICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVu
KCk7CisKKyAgICAgICAgLy8gSWYgb25seSBvbmUgY2hpbGQgcmVtYWlucywgcmV0dXJuIHRoZSBj
aGlsZCAoZXhjZXB0IGF0IHRoZSByb290KS4KKyAgICAgICAgYXV0byBzaG91bGRDb21iaW5lUGFy
ZW50V2l0aE9ubHlDaGlsZCA9IFtdKGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBwYXJlbnQs
IGludCBkZXB0aCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbigp
LnNpemUoKSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgLy8gQWx3YXlzIHNpbXBsaWZ5IGJlbG93IHRoZSByb290LgorICAgICAgICAgICAgaWYgKGRl
cHRoKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBBdCB0
aGUgcm9vdCwgcHJlc2VydmUgdGhlIHJvb3QgZnVuY3Rpb24gYnkgb25seSBtZXJnaW5nIG5vZGVz
IHdpdGggdGhlIHNhbWUgZnVuY3Rpb24uCisgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IHBhcmVu
dC5jaGlsZHJlbigpLmZpcnN0KCk7CisgICAgICAgICAgICBpZiAoIWlzPENTU0NhbGNPcGVyYXRp
b25Ob2RlPihjaGlsZCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICBhdXRvIHBhcmVudEZ1bmN0aW9uID0gZnVuY3Rpb25Gcm9tT3BlcmF0b3IocGFyZW50LmNh
bGNPcGVyYXRvcigpKTsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRGdW5jdGlvbiA9IGZ1bmN0aW9u
RnJvbU9wZXJhdG9yKGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSku
Y2FsY09wZXJhdG9yKCkpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkRnVuY3Rpb24gPT0gcGFy
ZW50RnVuY3Rpb247CisgICAgICAgIH07CisKKyAgICAgICAgaWYgKHNob3VsZENvbWJpbmVQYXJl
bnRXaXRoT25seUNoaWxkKGNhbGNPcGVyYXRpb25Ob2RlLCBkZXB0aCkpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGTW92ZShjYWxjT3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpLmZpcnN0KCkpOworCisg
ICAgICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NT
Q2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBk
b3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7CisgICAg
ICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGEgbnVtZXJpYyB2YWx1ZSwgcmV0dXJuIGFuIGVx
dWl2YWxlbnQgbnVtZXJpYyB2YWx1ZSwgYnV0IHdpdGggdGhlIHZhbHVlIG5lZ2F0ZWQgKDAgLSB2
YWx1ZSkuCisgICAgICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5v
ZGUpICYmIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNO
dW1lcmljVmFsdWUoKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZT4oY2hpbGROb2RlKS5uZWdhdGUoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZE5v
ZGU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlz
IGEgTmVnYXRlIG5vZGUsIHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgorICAgICAgICBpZiAo
aXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KGNoaWxkTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZG93
bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NT
Q2FsY0ludmVydE5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBk
b3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7CisgICAg
ICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGEgbnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9y
IGRpbWVuc2lvbikgcmV0dXJuIHRoZSByZWNpcHJvY2FsIG9mIHRoZSBjaGlsZOKAmXMgdmFsdWUu
CisgICAgICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpICYm
IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNOdW1lcmlj
VmFsdWUoKSkgeworICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZT4oY2hpbGROb2RlKS5pbnZlcnQoKTsKKyAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhbiBJbnZlcnQgbm9k
ZSwgcmV0dXJuIHRoZSBjaGlsZOKAmXMgY2hpbGQuCisgICAgICAgIGlmIChpczxDU1NDYWxjSW52
ZXJ0Tm9kZT4oY2hpbGROb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYWxj
SW52ZXJ0Tm9kZT4oY2hpbGROb2RlKS5jaGlsZCgpOworCisgICAgICAgIHJldHVybiBXVEZNb3Zl
KHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Cit9CisK
K0NTU1VuaXRUeXBlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QK
K3sKKyAgICBhdXRvIHVuaXRDYXRlZ29yeSA9IGNhdGVnb3J5KCk7CisgICAgc3dpdGNoICh1bml0
Q2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKKyNpZiBB
U1NFUlRfRU5BQkxFRAorICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAg
ICAgICAgICAgIEFTU0VSVChjaGlsZC0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXIpOworI2VuZGlmCisgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX05VTUJF
UjsKKworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogeworICAgICAgICBp
ZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOOworCisgICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKSB7Cisg
ICAgICAgICAgICBpZiAobV9jaGlsZHJlblswXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMV0tPnBy
aW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgICAgIGlmIChtX2NoaWxkcmVuWzFdLT5jYXRlZ29yeSgp
ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICB9CisgICAgICAgIENTU1Vu
aXRUeXBlIGZpcnN0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgICAgIGlmIChmaXJz
dFR5cGUgIT0gY2hpbGQtPnByaW1pdGl2ZVR5cGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Q1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOworICAgICAgICB9CisgICAgICAgIHJldHVybiBmaXJz
dFR5cGU7CisgICAgfQorCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Cisg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKKyAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlRpbWU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6
CisgICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcmV0dXJu
IG1fY2hpbGRyZW4uZmlyc3QoKS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICByZXR1cm4gY2Fu
b25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KHVuaXRDYXRlZ29yeSk7CisKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXI6CisgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBDU1NVbml0VHlwZTo6
Q1NTX1VOS05PV047Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOworICAgIG5vZGVzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOworCisgICAgZm9yIChhdXRvJiBj
aGlsZCA6IG1fY2hpbGRyZW4pIHsKKyAgICAgICAgYXV0byBub2RlID0gY2hpbGQtPmNyZWF0ZUNh
bGNFeHByZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChXVEZN
b3ZlKG5vZGUpKTsKKyAgICB9CisKKyAgICAvLyBSZXZlcnNlIHRoZSBvcGVyYXRpb24gd2UgZGlk
IHdoZW4gY3JlYXRpbmcgdGhpcyBub2RlLCByZWNvdmVyaW5nIGEgc3VpdGFibGUgZGVzdGluYXRp
b24gY2F0ZWdvcnkgZm9yIG90aGVyd2lzZS1hbWJpZ3VvdXMgbWluL21heC9jbGFtcCBub2Rlcy4K
KyAgICAvLyBOb3RlIHRoYXQgdGhpcyBjYXRlZ29yeSBpcyByZWFsbHkgb25seSBnb29kIGVub3Vn
aCBmb3IgdGhhdCBwdXJwb3NlIGFuZCBpcyBub3QgYWNjdXJhdGUgZm9yIG90aGVyIG5vZGUgdHlw
ZXM7IHdlIGNvdWxkIHVzZSBhIGJvb2xlYW4gaW5zdGVhZC4KKyAgICBhdXRvIGRlc3RpbmF0aW9u
Q2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICBpZiAoY2F0ZWdvcnko
KSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoKQorICAgICAgICBkZXN0aW5h
dGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOworICAgIGVsc2UgaWYg
KGNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikKKyAgICAg
ICAgZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKKwor
ICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKG5v
ZGVzKSwgbV9vcGVyYXRvciwgZGVzdGluYXRpb25DYXRlZ29yeSk7Cit9CisKK2RvdWJsZSBDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0
Cit7CisgICAgYm9vbCBhbGxvd051bWJlcnMgPSBjYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0
b3I6Ok11bHRpcGx5OworCisgICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAo
YXV0byYgY2hpbGQpIHsKKyAgICAgICAgQ1NTVW5pdFR5cGUgY2hpbGRUeXBlID0gdW5pdFR5cGU7
CisgICAgICAgIGlmIChhbGxvd051bWJlcnMgJiYgdW5pdFR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVIgJiYgY2hpbGQtPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NVbml0VHlwZTo6Q1NTX05V
TUJFUikKKyAgICAgICAgICAgIGNoaWxkVHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOwor
ICAgICAgICByZXR1cm4gY2hpbGQtPmRvdWJsZVZhbHVlKGNoaWxkVHlwZSk7CisgICAgfSkpOwor
fQorCitkb3VibGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZXZhbHVhdGUobV9jaGlsZHJlbi5tYXAoWyZdIChhdXRvJiBjaGlsZCkgeworICAgICAg
ICByZXR1cm4gY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7CisgICAgfSkp
OworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRp
b25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7
CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIGNoaWxkLT5jb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIGZvciAo
YXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdFJv
b3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK3ZvaWQgQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5v
ZGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIpCit7CisgICAgYXV0byBzaG91bGRPdXRwdXRFbmNs
b3NpbmdDYWxjID0gW10oY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByb290Tm9kZSkgewor
ICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgeworICAgICAg
ICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2Rl
Pihyb290Tm9kZSk7CisgICAgICAgICAgICByZXR1cm4gb3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1O
b2RlKCkgfHwgb3BlcmF0aW9uTm9kZS5pc0NhbGNQcm9kdWN0Tm9kZSgpOworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiAhaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUpOwor
ICAgIH07CisgICAgCisgICAgYm9vbCBvdXRwdXRDYWxjID0gc2hvdWxkT3V0cHV0RW5jbG9zaW5n
Q2FsYyhub2RlKTsKKyAgICBpZiAob3V0cHV0Q2FsYykKKyAgICAgICAgYnVpbGRlci5hcHBlbmQo
ImNhbGMoIik7CisKKyAgICBidWlsZENTU1RleHRSZWN1cnNpdmUobm9kZSwgYnVpbGRlciwgR3Jv
dXBpbmdQYXJlbnM6Ok9taXQpOworCisgICAgaWYgKG91dHB1dENhbGMpCisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcpJyk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBmdW5jdGlvblByZWZpeEZv
ck9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6OkFkZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Cisg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpE
aXZpZGU6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gIiI7
CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogcmV0dXJuICJtaW4oIjsKKyAgICBjYXNlIENh
bGNPcGVyYXRvcjo6TWF4OiByZXR1cm4gIm1heCgiOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpD
bGFtcDogcmV0dXJuICJjbGFtcCgiOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gIiI7Cit9CisK
Ky8vIDxodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzZXJpYWxpemUtYS1j
YWxjdWxhdGlvbi10cmVlPgordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0
UmVjdXJzaXZlKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgU3RyaW5nQnVpbGRl
ciYgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnMgcGFyZW5zKQoreworICAgIC8vIElmIHJvb3QgaXMg
YSBudW1lcmljIHZhbHVlLCBvciBhIG5vbi1tYXRoIGZ1bmN0aW9uLCBzZXJpYWxpemUgcm9vdCBw
ZXIgdGhlIG5vcm1hbCBydWxlcyBmb3IgaXQgYW5kIHJldHVybiB0aGUgcmVzdWx0LgorICAgIGlm
IChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkgeworICAgICAgICBhdXRvJiB2
YWx1ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQodmFsdWVOb2RlLmN1c3RvbUNTU1RleHQoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUp
KSB7CisgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4obm9kZSk7CisKKyAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9k
ZSgpKSB7CisgICAgICAgICAgICAvLyBJZiByb290IGlzIGEgU3VtIG5vZGUsIGxldCBzIGJlIGEg
c3RyaW5nIGluaXRpYWxseSBjb250YWluaW5nICIoIi4KKyAgICAgICAgICAgIGlmIChwYXJlbnMg
PT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoJygnKTsKKworICAgICAgICAgICAgLy8gU2ltcGxpZmljYXRpb24gYWxyZWFkeSBzb3J0ZWQg
Y2hpbGRyZW4uCisgICAgICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hp
bGRyZW4oKTsKKyAgICAgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkpOworICAgICAgICAg
ICAgLy8gU2VyaWFsaXplIHJvb3TigJlzIGZpcnN0IGNoaWxkLCBhbmQgYXBwZW5kIGl0IHRvIHMu
CisgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVp
bGRlcik7CisKKyAgICAgICAgICAgIC8vIEZvciBlYWNoIGNoaWxkIG9mIHJvb3QgYmV5b25kIHRo
ZSBmaXJzdDoKKyAgICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGEgTmVnYXRlIG5vZGUsIGFwcGVu
ZCAiIC0gIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSB0aGUgTmVnYXRl4oCZcyBjaGlsZCBhbmQgYXBw
ZW5kIHRoZSByZXN1bHQgdG8gcy4KKyAgICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGEgbmVnYXRp
dmUgbnVtZXJpYyB2YWx1ZSwgYXBwZW5kICIgLSAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBu
ZWdhdGlvbiBvZiBjaGlsZCBhcyBub3JtYWwgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisg
ICAgICAgICAgICAvLyBPdGhlcndpc2UsIGFwcGVuZCAiICsgIiB0byBzLCB0aGVuIHNlcmlhbGl6
ZSBjaGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICAgICAgICAgICAgaWYgKGlzPENTU0Nh
bGNOZWdhdGVOb2RlPihjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiAtICIpOworICAgICAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93
bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPihjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWVO
b2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQuZ2V0KCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWVOb2RlLmlzTmVnYXRpdmUoKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAtICIpOworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gU2VyaWFsaXplIHRoZSBuZWdhdGlvbiBvZiBjaGlsZC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gdW5pdFR5cGUgPSBwcmltaXRpdmVWYWx1ZU5vZGUu
dmFsdWUoKS5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVy
LmFwcGVuZCgwIC0gcHJpbWl0aXZlVmFsdWVOb2RlLnZhbHVlKCkuZG91YmxlVmFsdWUoKSwgQ1NT
UHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBlU3RyaW5nKHVuaXRUeXBlKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgi
ICsgIik7CisgICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWls
ZGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGlu
Z1BhcmVuczo6SW5jbHVkZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAob3Bl
cmF0aW9uTm9kZS5pc0NhbGNQcm9kdWN0Tm9kZSgpKSB7CisgICAgICAgICAgICAvLyBJZiByb290
IGlzIGEgUHJvZHVjdCBub2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmlu
ZyAiKCIuCisgICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRl
KQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgIC8v
IFNpbXBsaWZpY2F0aW9uIGFscmVhZHkgc29ydGVkIGNoaWxkcmVuLgorICAgICAgICAgICAgYXV0
byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NF
UlQoY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBm
aXJzdCBjaGlsZCwgYW5kIGFwcGVuZCBpdCB0byBzLgorICAgICAgICAgICAgYnVpbGRDU1NUZXh0
UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0KCksIGJ1aWxkZXIpOworCisgICAgICAgICAgICAvLyBG
b3IgZWFjaCBjaGlsZCBvZiByb290IGJleW9uZCB0aGUgZmlyc3Q6CisgICAgICAgICAgICAvLyBJ
ZiBjaGlsZCBpcyBhbiBJbnZlcnQgbm9kZSwgYXBwZW5kICIgLyAiIHRvIHMsIHRoZW4gc2VyaWFs
aXplIHRoZSBJbnZlcnTigJlzIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhcHBlbmQgIiAqICIgdG8gcywgdGhlbiBzZXJpYWxpemUg
Y2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBh
dXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAgICAgICAgICAgICAgIGlmIChpczxDU1NDYWxj
SW52ZXJ0Tm9kZT4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgLyAiKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGRvd25j
YXN0PENTU0NhbGNJbnZlcnROb2RlPihjaGlsZC5nZXQoKSkuY2hpbGQoKSwgYnVpbGRlcik7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgKiAiKTsKKyAgICAgICAgICAgICAgICBidWlsZENT
U1RleHRSZWN1cnNpdmUoY2hpbGQsIGJ1aWxkZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICAvLyBJZiByb290IGlzIGFueXRoaW5nIGJ1dCBhIFN1bSwgTmVnYXRlLCBQcm9k
dWN0LCBvciBJbnZlcnQgbm9kZSwgc2VyaWFsaXplIGEgbWF0aCBmdW5jdGlvbiBmb3IgdGhlCisg
ICAgICAgIC8vIGZ1bmN0aW9uIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5vZGUgdHlwZSwgdHJlYXRp
bmcgdGhlIG5vZGXigJlzIGNoaWxkcmVuIGFzIHRoZSBmdW5jdGlvbuKAmXMKKyAgICAgICAgLy8g
Y29tbWEtc2VwYXJhdGVkIGNhbGN1bGF0aW9uIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgcmVz
dWx0LgorICAgICAgICBidWlsZGVyLmFwcGVuZChmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKG9w
ZXJhdGlvbk5vZGUuY2FsY09wZXJhdG9yKCkpKTsKKworICAgICAgICBhdXRvJiBjaGlsZHJlbiA9
IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKKyAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUo
KSk7CisgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWls
ZGVyLCBHcm91cGluZ1BhcmVuczo6T21pdCk7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiLCAiKTsKKyAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbltpXSwg
YnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQpOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBidWlsZGVyLmFwcGVuZCgnKScpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAor
ICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4obm9kZSkpIHsKKyAgICAgICAgYXV0byYgbmVn
YXRlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihub2RlKTsKKyAgICAgICAgLy8g
SWYgcm9vdCBpcyBhIE5lZ2F0ZSBub2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29u
dGFpbmluZyAiKC0xICogIi4KKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIi0xICoiKTsKKyAgICAg
ICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKG5lZ2F0ZU5vZGUuY2hpbGQoKSwgYnVpbGRlcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2Rl
Pihub2RlKSkgeworICAgICAgICBhdXRvJiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0lu
dmVydE5vZGU+KG5vZGUpOworICAgICAgICAvLyBJZiByb290IGlzIGFuIEludmVydCBub2RlLCBs
ZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKDEgLyAiLgorICAgICAgICBi
dWlsZGVyLmFwcGVuZCgiMSAvICIpOworICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoaW52
ZXJ0Tm9kZS5jaGlsZCgpLCBidWlsZGVyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKwor
dm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sK
KyAgICB0cyA8PCAiY2FsYyBvcGVyYXRpb24gIiA8PCBtX29wZXJhdG9yIDw8ICIgKGNhdGVnb3J5
OiAiIDw8IGNhdGVnb3J5KCkgPDwgIiwgdHlwZSAiIDw8IHByaW1pdGl2ZVR5cGUoKSA8PCAiKSI7
CisKKyAgICBUZXh0U3RyZWFtOjpHcm91cFNjb3BlIHNjb3BlKHRzKTsKKyAgICB0cyA8PCBtX2No
aWxkcmVuLnNpemUoKSA8PCAiIGNoaWxkcmVuIjsKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9j
aGlsZHJlbikKKyAgICAgICAgdHMuZHVtcFByb3BlcnR5KCJub2RlIiwgY2hpbGQpOworfQorCiti
b29sIENTU0NhbGNPcGVyYXRpb25Ob2RlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBleHApIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBleHAudHlwZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSYgb3RoZXIg
PSBzdGF0aWNfY2FzdDxjb25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSY+KGV4cCk7CisKKyAgICBp
ZiAobV9jaGlsZHJlbi5zaXplKCkgIT0gb3RoZXIubV9jaGlsZHJlbi5zaXplKCkgfHwgbV9vcGVy
YXRvciAhPSBvdGhlci5tX29wZXJhdG9yKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKCFjb21wYXJlQ1NTVmFsdWUobV9jaGlsZHJlbltpXSwgb3RoZXIubV9jaGlsZHJlbltpXSkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQor
Citkb3VibGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJh
dG9yIG9wLCBjb25zdCBWZWN0b3I8ZG91YmxlPiYgY2hpbGRyZW4pCit7CisgICAgc3dpdGNoIChv
cCkgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsKKyAgICAgICAgZG91YmxlIHN1bSA9
IDA7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgICAgIHN1
bSArPSBjaGlsZDsKKyAgICAgICAgcmV0dXJuIHN1bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OlN1YnRyYWN0OgorICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDIpOwor
ICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLSBjaGlsZHJlblsxXTsKKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TXVsdGlwbHk6IHsKKyAgICAgICAgZG91YmxlIHByb2R1Y3QgPSAxOworICAgICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBwcm9kdWN0ICo9IGNo
aWxkOworICAgICAgICByZXR1cm4gcHJvZHVjdDsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0
b3I6OkRpdmlkZToKKyAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSA9PSAxIHx8IGNoaWxk
cmVuLnNpemUoKSA9PSAyKTsKKyAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
CisgICAgICAgIHJldHVybiBjaGlsZHJlblswXSAvIGNoaWxkcmVuWzFdOworICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNaW46IHsKKyAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwor
ICAgICAgICBkb3VibGUgbWluaW11bSA9IGNoaWxkcmVuWzBdOworICAgICAgICBmb3IgKGF1dG8g
Y2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgICAgIG1pbmltdW0gPSBzdGQ6Om1pbihtaW5pbXVt
LCBjaGlsZCk7CisgICAgICAgIHJldHVybiBtaW5pbXVtOworICAgIH0KKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWF4OiB7CisgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAg
ICAgICAgZG91YmxlIG1heGltdW0gPSBjaGlsZHJlblswXTsKKyAgICAgICAgZm9yIChhdXRvIGNo
aWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBtYXhpbXVtID0gc3RkOjptYXgobWF4aW11bSwg
Y2hpbGQpOworICAgICAgICByZXR1cm4gbWF4aW11bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkNsYW1wOiB7CisgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMykKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwor
ICAgICAgICBkb3VibGUgbWluID0gY2hpbGRyZW5bMF07CisgICAgICAgIGRvdWJsZSB2YWx1ZSA9
IGNoaWxkcmVuWzFdOworICAgICAgICBkb3VibGUgbWF4ID0gY2hpbGRyZW5bMl07CisgICAgICAg
IHJldHVybiBzdGQ6Om1heChtaW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKKyAgICB9CisgICAg
fQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCisKKworfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRp
b25Ob2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0NhbGNPcGVyYXRpb25Ob2RlIGZpbmFsIDogcHVi
bGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRl
KENhbGNPcGVyYXRvciwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpOworICAgIHN0YXRpYyBS
ZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVy
YXRpb25Ob2RlPiBjcmVhdGVQcm9kdWN0KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
Pj4mJiB2YWx1ZXMpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNy
ZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3IsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4mJiB2YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRl
Z29yeSk7CisKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnko
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJik7CisKKyAgICBzdGF0aWMgdm9pZCBidWlsZENT
U1RleHQoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRlciYpOworCisg
ICAgQ2FsY09wZXJhdG9yIGNhbGNPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3I7
IH0KKyAgICBib29sIGlzQ2FsY1N1bU5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09
IENhbGNPcGVyYXRvcjo6QWRkOyB9CisgICAgYm9vbCBpc0NhbGNQcm9kdWN0Tm9kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsgfQorICAgIGJv
b2wgaXNNaW5Pck1heE5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVy
YXRvcjo6TWluIHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXg7IH0KKyAgICBib29s
IHNob3VsZFNvcnRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzQ2FsY1N1bU5vZGUoKSB8fCBp
c0NhbGNQcm9kdWN0Tm9kZSgpOyB9CisKKyAgICB2b2lkIGhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0
b3IoQ2FsY09wZXJhdG9yKTsKKyAgICB2b2lkIGNvbWJpbmVDaGlsZHJlbigpOworICAgIAorICAg
IGJvb2wgY2FuQ29tYmluZUFsbENoaWxkcmVuKCkgY29uc3Q7CisKKyAgICBjb25zdCBWZWN0b3I8
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hpbGRyZW47IH0KKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGls
ZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworcHJpdmF0ZToKKyAgICBDU1NDYWxjT3Bl
cmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3As
IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiYgcmlnaHRTaWRlKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShj
YXRlZ29yeSkKKyAgICAgICAgLCBtX29wZXJhdG9yKG9wKQorICAgIHsKKyAgICAgICAgbV9jaGls
ZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOworICAgICAgICBtX2NoaWxkcmVuLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKGxlZnRTaWRlKSk7CisgICAgICAgIG1fY2hpbGRyZW4udW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUocmlnaHRTaWRlKSk7CisgICAgfQorCisgICAgQ1NTQ2FsY09wZXJh
dGlvbk5vZGUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBW
ZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4pCisgICAgICAgIDog
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5KQorICAgICAgICAsIG1fb3BlcmF0b3Iob3Ap
CisgICAgICAgICwgbV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKKyAgICB7CisgICAgfQor
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3NzQ2FsY09wZXJhdGlvbjsg
fQorCisgICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFkb3VibGVWYWx1ZShwcmltaXRpdmVUeXBlKCkpOworICAgIH0KKworICAgIGJvb2wgZXF1YWxz
KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAgQ1NTVW5pdFR5
cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZShD
U1NVbml0VHlwZSkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGNv
bGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25h
bERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisKKyAg
ICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgc3RhdGljIENTU0Nh
bGNFeHByZXNzaW9uTm9kZSogZ2V0TnVtYmVyU2lkZShDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxl
ZnRTaWRlLCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSkKKyAgICB7CisgICAgICAg
IGlmIChsZWZ0U2lkZS5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikK
KyAgICAgICAgICAgIHJldHVybiAmbGVmdFNpZGU7CisgICAgICAgIGlmIChyaWdodFNpZGUuY2F0
ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICByZXR1
cm4gJnJpZ2h0U2lkZTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgZG91
YmxlIGV2YWx1YXRlKGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKG1fb3BlcmF0b3IsIGNoaWxkcmVuKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9y
LCBjb25zdCBWZWN0b3I8ZG91YmxlPiYpOworICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRl
cHRoKTsKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlSZWN1
cnNpdmUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKKyAgICAKKyAg
ICBlbnVtIGNsYXNzIEdyb3VwaW5nUGFyZW5zIHsKKyAgICAgICAgT21pdCwKKyAgICAgICAgSW5j
bHVkZQorICAgIH07CisgICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0
IENTU0NhbGNFeHByZXNzaW9uTm9kZSYsIFN0cmluZ0J1aWxkZXImLCBHcm91cGluZ1BhcmVucyA9
IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKTsKKworICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9y
OworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsKK307
CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENT
U0NhbGNPcGVyYXRpb25Ob2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlOjpUeXBlOjpDc3NDYWxjT3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIgorCisj
aW5jbHVkZSAiQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2
ZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgorI2luY2x1
ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25OdW1i
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUmVmPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU6OmNyZWF0ZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCit7CisgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShXVEZNb3ZlKHZh
bHVlKSkpOworfQorCitSZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4gQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKGRvdWJsZSB2YWx1ZSwgQ1NTVW5pdFR5cGUgdHlwZSkK
K3sKKyAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodmFsdWUpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgdHlwZSkpKTsKK30KKworU3RyaW5nIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmN1c3RvbUNTU1RleHQoKSBjb25zdAoreworICAgIHJldHVy
biBtX3ZhbHVlLT5jc3NUZXh0KCk7Cit9CisKK0NTU1VuaXRUeXBlIENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU6OnByaW1pdGl2ZVR5cGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlLT5w
cmltaXRpdmVUeXBlKCk7Cit9CisKK0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OkNTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQorICAgIDog
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhbGNVbml0Q2F0ZWdvcnkodmFsdWUtPnByaW1pdGl2ZVR5
cGUoKSkpCisgICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQoreworfQorCisvLyBGSVhNRTog
VXNlIGNhbGNVbml0Q2F0ZWdvcnk/Citib29sIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6Omlz
TnVtZXJpY1ZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZS0+aXNMZW5ndGgoKSB8
fCBtX3ZhbHVlLT5pc051bWJlcigpIHx8IG1fdmFsdWUtPmlzUGVyY2VudGFnZSgpIHx8IG1fdmFs
dWUtPmlzQW5nbGUoKQorICAgICAgICB8fCBtX3ZhbHVlLT5pc1RpbWUoKSB8fCBtX3ZhbHVlLT5p
c1Jlc29sdXRpb24oKSB8fCBtX3ZhbHVlLT5pc0ZsZXgoKSB8fCBtX3ZhbHVlLT5pc0ZyZXF1ZW5j
eSgpOworfQorCitib29sIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTmVnYXRpdmUoKSBj
b25zdAoreworICAgIHJldHVybiBpc051bWVyaWNWYWx1ZSgpICYmIG1fdmFsdWUtPmRvdWJsZVZh
bHVlKCkgPCAwLjA7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRl
KCkKK3sKKyAgICBBU1NFUlQoaXNOdW1lcmljVmFsdWUoKSk7CisgICAgbV92YWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUoMC4wIC0gbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSwgbV92YWx1
ZS0+cHJpbWl0aXZlVHlwZSgpKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
OjppbnZlcnQoKQoreworICAgIEFTU0VSVChpc051bWVyaWNWYWx1ZSgpKTsKKyAgICBpZiAoIW1f
dmFsdWUtPmRvdWJsZVZhbHVlKCkpCisgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKSwgbV92YWx1
ZS0+cHJpbWl0aXZlVHlwZSgpKTsKKworICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlKDEuMCAvIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5
cGUoKSk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6YWRkKGNvbnN0IENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmIG5vZGUsIFVuaXRDb252ZXJzaW9uIHVuaXRDb252ZXJz
aW9uKQoreworICAgIGF1dG8gdmFsdWVUeXBlID0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwor
CisgICAgc3dpdGNoICh1bml0Q29udmVyc2lvbikgeworICAgIGNhc2UgVW5pdENvbnZlcnNpb246
OkludmFsaWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZToKKyAgICAgICAgQVNTRVJUKG5vZGUu
cHJpbWl0aXZlVHlwZSgpID09IHZhbHVlVHlwZSk7CisgICAgICAgIG1fdmFsdWUgPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Y3JlYXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKCkgKyBub2RlLmRvdWJsZVZh
bHVlKHZhbHVlVHlwZSksIHZhbHVlVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5p
dENvbnZlcnNpb246OkNhbm9uaWNhbGl6ZTogeworICAgICAgICBhdXRvIHZhbHVlQ2F0ZWdvcnkg
PSB1bml0Q2F0ZWdvcnkodmFsdWVUeXBlKTsKKyAgICAgICAgLy8gRklYTUU6IEl0J3MgYXdrd2Fy
ZCB0aGF0IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkoKSBoYXMgc3BlY2lhbCBoYW5kbGlu
ZyBmb3IgQ1NTVW5pdENhdGVnb3J5OjpQZXJjZW50LgorICAgICAgICBhdXRvIGNhbm9uaWNhbFR5
cGUgPSB2YWx1ZUNhdGVnb3J5ID09IENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudCA/IENTU1VuaXRU
eXBlOjpDU1NfUEVSQ0VOVEFHRSA6IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdvcnkodmFsdWVD
YXRlZ29yeSk7CisgICAgICAgIEFTU0VSVChjYW5vbmljYWxUeXBlICE9IENTU1VuaXRUeXBlOjpD
U1NfVU5LTk9XTik7CisgICAgICAgIGRvdWJsZSBsZWZ0VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVW
YWx1ZShjYW5vbmljYWxUeXBlKTsKKyAgICAgICAgZG91YmxlIHJpZ2h0VmFsdWUgPSBub2RlLmRv
dWJsZVZhbHVlKGNhbm9uaWNhbFR5cGUpOworICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZl
VmFsdWU6OmNyZWF0ZShsZWZ0VmFsdWUgKyByaWdodFZhbHVlLCBjYW5vbmljYWxUeXBlKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlOjptdWx0aXBseShkb3VibGUgbXVsdGlwbGllcikKK3sKKyAgICBhdXRvIHZhbHVlVHlw
ZSA9IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKKyAgICBBU1NFUlQoaGFzRG91YmxlVmFsdWUo
dmFsdWVUeXBlKSk7CisgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobV92
YWx1ZS0+ZG91YmxlVmFsdWUodmFsdWVUeXBlKSAqIG11bHRpcGxpZXIsIHZhbHVlVHlwZSk7Cit9
CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29udmVydFRvVW5pdFR5cGUoQ1NT
VW5pdFR5cGUgdW5pdFR5cGUpCit7CisgICAgQVNTRVJUKHVuaXRDYXRlZ29yeSh1bml0VHlwZSkg
PT0gdW5pdENhdGVnb3J5KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkpOworICAgIGRvdWJsZSBu
ZXdWYWx1ZSA9IG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICBtX3ZhbHVlID0g
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShuZXdWYWx1ZSwgdW5pdFR5cGUpOworfQorCit2b2lk
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNhbm9uaWNhbGl6ZVVuaXQoKQoreworICAgIGF1
dG8gY2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24obV92YWx1ZS0+
cHJpbWl0aXZlVHlwZSgpKTsKKyAgICBpZiAoY2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gY2Fub25pY2FsVHlwZSA9IGNh
bm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShjYXRlZ29yeSk7CisgICAgaWYg
KGNhbm9uaWNhbFR5cGUgPT0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKQorICAgICAgICByZXR1
cm47CisKKyAgICBkb3VibGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZShjYW5vbmlj
YWxUeXBlKTsKKyAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShuZXdWYWx1
ZSwgY2Fub25pY2FsVHlwZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5v
ZGU+IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAg
IHN3aXRjaCAoY2F0ZWdvcnkoKSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVt
YmVyOgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk51bWJlcj4obV92
YWx1ZS0+ZmxvYXRWYWx1ZSgpKTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aDoKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KExlbmd0
aChtX3ZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihjb252ZXJzaW9uRGF0YSksIExlbmd0aFR5
cGU6OkZpeGVkKSk7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OgorICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDogeworICAgICAgICByZXR1
cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4obV92YWx1ZS0+Y29udmVydFRvTGVu
Z3RoPEZpeGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24+KGNvbnZlcnNpb25E
YXRhKSk7CisgICAgfQorICAgIC8vIE9ubHkgdHlwZXMgdGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGEg
TGVuZ3RoIGV4cHJlc3Npb24gY2FuIGJlIGNvbnZlcnRlZAorICAgIC8vIHRvIGEgQ2FsY0V4cHJl
c3Npb25Ob2RlLiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyIG1ha2VzIG5vIHNl
bnNlIGFzIGEgTGVuZ3RoLgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51
bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOgorICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6VGltZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZy
ZXF1ZW5jeToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2RvdWJsZSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
Ojpkb3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QKK3sKKyAgICBpZiAoaGFz
RG91YmxlVmFsdWUodW5pdFR5cGUpKSB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBB
U1NFUlQodW5pdENhdGVnb3J5KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkgPT0gdW5pdENhdGVn
b3J5KHVuaXRUeXBlKSksIGJ1dCBvbmx5IHdoZW4gYWxsIGNhbGxlcnMgYXJlIGZpeGVkIChlLmcu
IHdlYmtpdC5vcmcvYi8yMDQ4MjYpLgorICAgICAgICBpZiAodW5pdENhdGVnb3J5KG1fdmFsdWUt
PnByaW1pdGl2ZVR5cGUoKSkgIT0gdW5pdENhdGVnb3J5KHVuaXRUeXBlKSkgeworICAgICAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ2FsbGluZyBkb3VibGVWYWx1ZSgp
IHdpdGggdW5pdCAiIDw8IHVuaXRUeXBlIDw8ICIgb24gYSBub2RlIG9mIHVuaXQgdHlwZSAiIDw8
IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA8PCAiIHdoaWNoIGlzIGluY29tcGF0aWJsZSIpOwor
ICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbV92YWx1
ZS0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworZG91YmxlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKKyAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1
dGVMZW5ndGg8ZG91YmxlPihjb252ZXJzaW9uRGF0YSk7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgor
ICAgICAgICByZXR1cm4gbV92YWx1ZS0+ZG91YmxlVmFsdWUoKTsKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Cisg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6RnJlcXVlbmN5OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNp
ZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIG1fdmFsdWUt
PmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK3Zv
aWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlv
bmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sK
KyAgICBtX3ZhbHVlLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMo
dmFsdWVzKTsKK30KKworYm9vbCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc1plcm8oKSBj
b25zdAoreworICAgIHJldHVybiAhbV92YWx1ZS0+ZG91YmxlVmFsdWUoKTsKK30KKworYm9vbCBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZShtX3ZhbHVl
LCBzdGF0aWNfY2FzdDxjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJj4ob3RoZXIpLm1f
dmFsdWUpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmR1bXAoVGV4dFN0
cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgInZhbHVlICIgPDwgbV92YWx1ZS0+Y3VzdG9t
Q1NTVGV4dCgpIDw8ICIgKGNhdGVnb3J5OiAiIDw8IGNhdGVnb3J5KCkgPDwgIiwgdHlwZTogIiA8
PCBwcmltaXRpdmVUeXBlKCkgPDwgIikiOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKK2NsYXNzIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGE7CisKK2VudW0gQ1NTUHJvcGVydHlJRCA6IHVpbnQxNl90OworCitjbGFzcyBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9u
Tm9kZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBjcmVhdGUoUmVmPENTU1ByaW1pdGl2ZVZh
bHVlPiYmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IGNy
ZWF0ZShkb3VibGUgdmFsdWUsIENTU1VuaXRUeXBlKTsKKworICAgIFN0cmluZyBjdXN0b21DU1NU
ZXh0KCkgY29uc3Q7CisKKyAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmlu
YWw7CisKKyAgICBib29sIGlzTnVtZXJpY1ZhbHVlKCkgY29uc3Q7CisgICAgYm9vbCBpc05lZ2F0
aXZlKCkgY29uc3Q7CisKKyAgICB2b2lkIG5lZ2F0ZSgpOworICAgIHZvaWQgaW52ZXJ0KCk7CisK
KyAgICBlbnVtIGNsYXNzIFVuaXRDb252ZXJzaW9uIHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAg
ICAgUHJlc2VydmUsCisgICAgICAgIENhbm9uaWNhbGl6ZQorICAgIH07CisgICAgdm9pZCBhZGQo
Y29uc3QgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSYsIFVuaXRDb252ZXJzaW9uID0gVW5pdENv
bnZlcnNpb246OlByZXNlcnZlKTsKKyAgICB2b2lkIG11bHRpcGx5KGRvdWJsZSk7CisKKyAgICB2
b2lkIGNvbnZlcnRUb1VuaXRUeXBlKENTU1VuaXRUeXBlKTsKKyAgICB2b2lkIGNhbm9uaWNhbGl6
ZVVuaXQoKTsKKworICAgIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBib29sIGlzWmVybygpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYg
b3RoZXIpIGNvbnN0IGZpbmFsOworICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IENzc0NhbGNQcmltaXRpdmVWYWx1ZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHBy
ZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYpIGNvbnN0IGZpbmFsOworICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlw
ZSkgY29uc3QgZmluYWw7CisKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGNvbGxlY3REaXJl
Y3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25z
dCBmaW5hbDsKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVu
Y2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisKKyAgICB2b2lkIGR1
bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmKTsKKworICAg
IFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4gbV92YWx1ZTsKK307CisKK30KKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0Nh
bGNQcmltaXRpdmVWYWx1ZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1Zh
bHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgorCisjaW5jbHVkZSAiQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0ludmVydE5vZGUu
aCIKKyNpbmNsdWRlICJDU1NDYWxjTmVnYXRlTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNPcGVy
YXRpb25Ob2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIgorI2lu
Y2x1ZGUgIkNTU1BhcnNlci5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKKyNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisj
aW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRl
IDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBD
YWxjRXhwcmVzc2lvbk5vZGUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworc3RhdGljIFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmLCBjb25zdCBSZW5k
ZXJTdHlsZSYpOworCitzdGF0aWMgaW5saW5lIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4g
Y3JlYXRlQmxlbmRIYWxmKGNvbnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIGZsb2F0IHByb2dyZXNzKQoreworICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6Y3JlYXRlKENhbGNPcGVyYXRvcjo6TXVsdGlwbHksIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxl
KSwKKyAgICAgICAgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3MsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSkpOworfQor
CitzdGF0aWMgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBjcmVhdGVDU1MoY29u
c3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+IHZhbHVlczsKKyAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2Rl
cy5zaXplKCkpOworICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7CisgICAgICAgIGF1dG8g
Y3NzTm9kZSA9IGNyZWF0ZUNTUygqbm9kZSwgc3R5bGUpOworICAgICAgICBpZiAoIWNzc05vZGUp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChj
c3NOb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKyAgICByZXR1cm4gdmFsdWVzOworfQor
CitzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0IENh
bGNFeHByZXNzaW9uTm9kZSYgbm9kZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAg
IHN3aXRjaCAobm9kZS50eXBlKCkpIHsKKyAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6
Ok51bWJlcjogeworICAgICAgICBmbG9hdCB2YWx1ZSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9u
TnVtYmVyPihub2RlKS52YWx1ZSgpOyAvLyBkb3VibGU/CisgICAgICAgIHJldHVybiBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1
ZSwgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVz
c2lvbk5vZGVUeXBlOjpMZW5ndGg6IHsKKyAgICAgICAgYXV0byYgbGVuZ3RoID0gZG93bmNhc3Q8
Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG5vZGUpLmxlbmd0aCgpOworICAgICAgICBpZiAoIWxlbmd0
aC5pc1BlcmNlbnQoKSAmJiBsZW5ndGguaXNaZXJvKCkpCisgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKTsKKyAgICB9CisK
KyAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uOiB7CisgICAgICAgIGF1
dG8gY2hpbGROb2RlID0gY3JlYXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9u
Pihub2RlKS5jaGlsZCgpLCBzdHlsZSk7CisgICAgICAgIGlmICghY2hpbGROb2RlKQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBDU1NDYWxjTmVnYXRlTm9kZTo6
Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisgICAgY2FzZSBDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZlcnNpb246IHsKKyAgICAgICAgYXV0byBjaGlsZE5vZGUg
PSBjcmVhdGVDU1MoKmRvd25jYXN0PENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihub2RlKS5jaGls
ZCgpLCBzdHlsZSk7CisgICAgICAgIGlmICghY2hpbGROb2RlKQorICAgICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgICAgIHJldHVybiBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKGNoaWxk
Tm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpPcGVyYXRpb246IHsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25j
YXN0PENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihub2RlKTsKKyAgICAgICAgYXV0byYgb3BlcmF0
aW9uQ2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgIENhbGNPcGVy
YXRvciBvcCA9IG9wZXJhdGlvbk5vZGUuZ2V0T3BlcmF0b3IoKTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogeworICAgICAg
ICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUp
OworICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjaGlsZHJlblswXSk7CisgICAgICAgICAgICBy
ZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKGNoaWxkcmVuKSk7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7CisgICAg
ICAgICAgICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09IDIpOworCisgICAgICAg
ICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKKyAgICAgICAg
ICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlvbkNoaWxkcmVuLnNpemUo
KSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gZmlyc3RDaGlsZCA9IGNyZWF0ZUNT
Uygqb3BlcmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKKyAgICAgICAgICAgIGF1dG8gc2Vjb25k
Q2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7CisKKyAgICAg
ICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hp
bGQ7CisKKyAgICAgICAgICAgIGF1dG8gbmVnYXRlTm9kZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpj
cmVhdGUoc2Vjb25kQ2hpbGQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICBpZiAoIWZp
cnN0Q2hpbGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG5lZ2F0ZU5vZGU7CisKKyAgICAgICAg
ICAgIHZhbHVlcy5hcHBlbmQoZmlyc3RDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
ICAgIHZhbHVlcy5hcHBlbmQoV1RGTW92ZShuZWdhdGVOb2RlKSk7CisKKyAgICAgICAgICAgIHJl
dHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUodmFsdWVzKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAg
ICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7
CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVQcm9kdWN0KFdURk1vdmUoY2hpbGRyZW4pKTsKKyAgICAgICAgfQorICAgICAgICBjYXNl
IENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7CisgICAgICAgICAgICBBU1NFUlQob3BlcmF0aW9uQ2hp
bGRyZW4uc2l6ZSgpID09IDIpOworCisgICAgICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+IHZhbHVlczsKKyAgICAgICAgICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGF1dG8gZmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMF0sIHN0
eWxlKTsKKyAgICAgICAgICAgIGlmICghZmlyc3RDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgICAgICAgICAgYXV0byBzZWNvbmRDaGlsZCA9IGNyZWF0ZUNTUygq
b3BlcmF0aW9uQ2hpbGRyZW5bMV0sIHN0eWxlKTsKKyAgICAgICAgICAgIGlmICghc2Vjb25kQ2hp
bGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBhdXRvIGlu
dmVydE5vZGUgPSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VO
b25OdWxsKCkpOworCisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUoaW52ZXJ0Tm9k
ZSkpOworCisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVBy
b2R1Y3QoY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSkpOworICAgICAgICB9Cisg
ICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpNYXg6CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogeworICAgICAgICAgICAg
YXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOworICAg
ICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRl
TWluT3JNYXhPckNsYW1wKG9wLCBXVEZNb3ZlKGNoaWxkcmVuKSwgb3BlcmF0aW9uTm9kZS5kZXN0
aW5hdGlvbkNhdGVnb3J5KCkpOworICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRM
ZW5ndGg6IHsKKyAgICAgICAgLy8gRklYTUU6IChodHRwOi8vd2Via2l0Lm9yZy9iLzEyMjAzNikg
Q3JlYXRlIGEgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIGVxdWl2YWxlbnQgb2YgQ2FsY0V4cHJlc3Np
b25CbGVuZExlbmd0aC4KKyAgICAgICAgYXV0byYgYmxlbmQgPSBkb3duY2FzdDxDYWxjRXhwcmVz
c2lvbkJsZW5kTGVuZ3RoPihub2RlKTsKKyAgICAgICAgZmxvYXQgcHJvZ3Jlc3MgPSBibGVuZC5w
cm9ncmVzcygpOworICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShD
YWxjT3BlcmF0b3I6OkFkZCwgY3JlYXRlQmxlbmRIYWxmKGJsZW5kLmZyb20oKSwgc3R5bGUsIDEg
LSBwcm9ncmVzcyksIGNyZWF0ZUJsZW5kSGFsZihibGVuZC50bygpLCBzdHlsZSwgcHJvZ3Jlc3Mp
KTsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpVbmRlZmluZWQ6Cisg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25z
dCBMZW5ndGgmIGxlbmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIHN3aXRj
aCAobGVuZ3RoLnR5cGUoKSkgeworICAgIGNhc2UgTGVuZ3RoVHlwZTo6UGVyY2VudDoKKyAgICBj
YXNlIExlbmd0aFR5cGU6OkZpeGVkOgorICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLCBzdHlsZSkp
OworICAgIGNhc2UgTGVuZ3RoVHlwZTo6Q2FsY3VsYXRlZDoKKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUNTUyhsZW5ndGguY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSwgc3R5bGUpOworICAg
IGNhc2UgTGVuZ3RoVHlwZTo6QXV0bzoKKyAgICBjYXNlIExlbmd0aFR5cGU6OkludHJpbnNpYzoK
KyAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkludHJpbnNpYzoKKyAgICBjYXNlIExlbmd0aFR5cGU6
Ok1pbkNvbnRlbnQ6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpNYXhDb250ZW50OgorICAgIGNhc2Ug
TGVuZ3RoVHlwZTo6RmlsbEF2YWlsYWJsZToKKyAgICBjYXNlIExlbmd0aFR5cGU6OkZpdENvbnRl
bnQ6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpSZWxhdGl2ZToKKyAgICBjYXNlIExlbmd0aFR5cGU6
OlVuZGVmaW5lZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJl
dHVybiBudWxscHRyOworfQorCitDU1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1ZShSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmIGV4cHJlc3Npb24sIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0
aXZlKQorICAgIDogQ1NTVmFsdWUoQ2FsY3VsYXRpb25DbGFzcykKKyAgICAsIG1fZXhwcmVzc2lv
bihXVEZNb3ZlKGV4cHJlc3Npb24pKQorICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUo
c2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQoreworfQorCitDU1NDYWxjVmFsdWU6On5DU1NDYWxj
VmFsdWUoKSA9IGRlZmF1bHQ7CisKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgQ1NTQ2FsY1ZhbHVlOjpj
YXRlZ29yeSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXhwcmVzc2lvbi0+Y2F0ZWdvcnkoKTsK
K30KKworQ1NTVW5pdFR5cGUgQ1NTQ2FsY1ZhbHVlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9leHByZXNzaW9uLT5wcmltaXRpdmVUeXBlKCk7Cit9CisKK1JlZjxDYWxj
dWxhdGlvblZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAg
cmV0dXJuIENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShtX2V4cHJlc3Npb24tPmNyZWF0ZUNhbGNF
eHByZXNzaW9uKGNvbnZlcnNpb25EYXRhKSwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgPyBW
YWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSA6IFZhbHVlUmFuZ2U6OkFsbCk7Cit9CisKK3ZvaWQgQ1NT
Q2FsY1ZhbHVlOjpzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UgcmFuZ2UpCit7Cisg
ICAgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgPSByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGw7
Cit9CisKK3ZvaWQgQ1NTQ2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVu
ZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgbV9l
eHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMp
OworfQorCit2b2lkIENTU0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAg
ICBtX2V4cHJlc3Npb24tPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2ll
cyh2YWx1ZXMpOworfQorCitTdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29u
c3QKK3sKKyAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAgQ1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmJ1aWxkQ1NTVGV4dChtX2V4cHJlc3Npb24uZ2V0KCksIGJ1aWxkZXIpOworICAgIHJldHVy
biBidWlsZGVyLnRvU3RyaW5nKCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ZhbHVlOjplcXVhbHMoY29u
c3QgQ1NTQ2FsY1ZhbHVlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gY29tcGFyZUNTU1Zh
bHVlKG1fZXhwcmVzc2lvbiwgb3RoZXIubV9leHByZXNzaW9uKTsKK30KKworaW5saW5lIGRvdWJs
ZSBDU1NDYWxjVmFsdWU6OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZShkb3VibGUgdmFsdWUpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCA/
IDAgOiB2YWx1ZTsKK30KKworZG91YmxlIENTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25z
dAoreworICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5kb3Vi
bGVWYWx1ZShwcmltaXRpdmVUeXBlKCkpKTsKK30KKworZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29t
cHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25E
YXRhKSBjb25zdAoreworICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNz
aW9uLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpKTsKK30KKworYm9vbCBDU1NDYWxj
VmFsdWU6OmlzQ2FsY0Z1bmN0aW9uKENTU1ZhbHVlSUQgZnVuY3Rpb25JZCkKK3sKKyAgICBzd2l0
Y2ggKGZ1bmN0aW9uSWQpIHsKKyAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKKyAgICBjYXNlIENTU1Zh
bHVlV2Via2l0Q2FsYzoKKyAgICBjYXNlIENTU1ZhbHVlTWluOgorICAgIGNhc2UgQ1NTVmFsdWVN
YXg6CisgICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBDU1NDYWxjVmFsdWU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7Cisg
ICAgdHMgPDwgaW5kZW50IDw8ICIoIiA8PCAiQ1NTQ2FsY1ZhbHVlIjsKKworICAgIFRleHRTdHJl
YW0gbXVsdGlsaW5lU3RyZWFtOworICAgIG11bHRpbGluZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5k
ZW50KCkgKyAyKTsKKworICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoInNob3VsZCBj
bGFtcCBub24tbmVnYXRpdmUiLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7CisgICAgbXVs
dGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgiZXhwcmVzc2lvbiIsIG1fZXhwcmVzc2lvbi5nZXQo
KSk7CisKKyAgICB0cyA8PCBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOworICAgIHRzIDw8ICIp
XG4iOworfQorCitSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NW
YWx1ZUlEIGZ1bmN0aW9uLCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSByYW5nZSkKK3sK
KyAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgcGFyc2VyKGRlc3RpbmF0aW9uQ2F0ZWdv
cnkpOworICAgIGF1dG8gZXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUNhbGModG9rZW5zLCBmdW5j
dGlvbik7CisgICAgaWYgKCFleHByZXNzaW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxl
YXNlTm9uTnVsbCgpLCByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGwpKTsKKyAgICBMT0dfV0lUSF9T
VFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjVmFsdWU6OmNyZWF0ZSAiIDw8ICpyZXN1bHQp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisgICAgCitSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1ND
YWxjVmFsdWU6OmNyZWF0ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlKQoreworICAgIGF1dG8gZXhwcmVzc2lvbiA9IGNyZWF0ZUNTUyh2YWx1
ZS5leHByZXNzaW9uKCksIHN0eWxlKTsKKyAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBzaW1wbGlmaWVkRXhwcmVzc2lvbiA9IENTU0NhbGNP
cGVyYXRpb25Ob2RlOjpzaW1wbGlmeShleHByZXNzaW9uLnJlbGVhc2VOb25OdWxsKCkpOworCisg
ICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKFdURk1vdmUoc2ltcGxp
ZmllZEV4cHJlc3Npb24pLCB2YWx1ZS5zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoKSkpOworICAg
IExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3JlYXRlIGZy
b20gQ2FsY3VsYXRpb25WYWx1ZTogIiA8PCAqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxj
VmFsdWUmIHZhbHVlKQoreworICAgIHZhbHVlLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMv
Q1NTQ2FsY1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NT
Q2FsY1ZhbHVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NT
Q2FsY1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ1NTVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRz
LmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IENTU0NhbGNFeHByZXNzaW9uTm9kZTsKK2NsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CitjbGFz
cyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2VudW0g
Y2xhc3MgQ1NTVW5pdFR5cGUgOiB1aW50OF90OworZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVn
b3J5IDogdWludDhfdDsKK2VudW0gY2xhc3MgVmFsdWVSYW5nZSA6IHVpbnQ4X3Q7CisKK2NsYXNz
IENTU0NhbGNWYWx1ZSBmaW5hbCA6IHB1YmxpYyBDU1NWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9uLCBjb25z
dCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5LCBWYWx1ZVJhbmdlKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3Jl
YXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOworICAgIH5D
U1NDYWxjVmFsdWUoKTsKKworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25z
dDsKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdDsKKyAgICBkb3VibGUgY29tcHV0ZUxl
bmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdDsKKyAgICBDU1NV
bml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3Q7CisKKyAgICBSZWY8Q2FsY3VsYXRpb25WYWx1
ZT4gY3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JikgY29uc3Q7CisgICAgdm9pZCBzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UpOwor
CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JikgY29uc3Q7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OworCisg
ICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKKyAgICBib29sIGVxdWFscyhjb25zdCBD
U1NDYWxjVmFsdWUmKSBjb25zdDsKKyAgICAKKyAgICBzdGF0aWMgYm9vbCBpc0NhbGNGdW5jdGlv
bihDU1NWYWx1ZUlEKTsKKworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgQ1NTQ2FsY1ZhbHVlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGJv
b2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKTsKKworICAgIGRvdWJsZSBjbGFtcFRvUGVybWl0
dGVkUmFuZ2UoZG91YmxlKSBjb25zdDsKKworICAgIGNvbnN0IFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IG1fZXhwcmVzc2lvbjsKKyAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZl
OworfTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ1NTQ2Fs
Y1ZhbHVlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19DU1NfVkFMVUUoQ1NTQ2FsY1ZhbHVlLCBpc0NhbGNWYWx1ZSgpKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlckhlbHBlcnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJz
LmgiCiAKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2Fs
Y1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ2FudmFzVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDcm9z
c2ZhZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKQEAgLTQxLDYg
KzQxLDcgQEAKICNpbmNsdWRlICJDU1NQYWludEltYWdlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQ
YXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJDU1NWYWx1ZVBvb2wuaCIKKyNpbmNsdWRlICJDYWxj
dWxhdGlvbkNhdGVnb3J5LmgiCiAjaW5jbHVkZSAiQ29sb3JDb252ZXJzaW9uLmgiCiAjaW5jbHVk
ZSAiQ29sb3JMdW1pbmFuY2UuaCIKICNpbmNsdWRlICJQYWlyLmgiCkBAIC05NCw3ICs5NSw3IEBA
IHN0YXRpYyBPcHRpb25hbDxkb3VibGU+IGNvbnN1bWVOdW1iZXJPclAKICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OwogfQogCi0vLyBGSVhNRTogY29uc2lkZXIgcHVsbGluZyBpbiB0aGUgcGFyc2lu
ZyBsb2dpYyBmcm9tIENTU0NhbGN1bGF0aW9uVmFsdWUuY3BwLgorLy8gRklYTUU6IGNvbnNpZGVy
IHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXIuCiBjbGFzcyBDYWxjUGFyc2VyIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBDYWxjUGFy
c2VyKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3Rp
bmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UgdmFsdWVSYW5nZSA9IFZhbHVlUmFuZ2U6OkFsbCwg
Q1NTVmFsdWVQb29sJiBjc3NWYWx1ZVBvb2wgPSBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHJl
dmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFs
dWUuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjgyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLQotI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9u
cy5oIgotI2luY2x1ZGUgPGxpbWl0cz4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUmVmPENhbGN1bGF0aW9uVmFsdWU+IENhbGN1bGF0
aW9uVmFsdWU6OmNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiB2YWx1
ZSwgVmFsdWVSYW5nZSByYW5nZSkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDYWxjdWxh
dGlvblZhbHVlKFdURk1vdmUodmFsdWUpLCByYW5nZSkpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVz
c2lvbk51bWJlcjo6ZXZhbHVhdGUoZmxvYXQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fdmFsdWU7
Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25OdW1iZXI6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0Ci17Ci0gICAgdHMgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVn
ZXJzKG1fdmFsdWUpOwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uTnVtYmVyOjpvcGVyYXRvcj09
KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlz
PENhbGNFeHByZXNzaW9uTnVtYmVyPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4
cHJlc3Npb25OdW1iZXI+KG90aGVyKTsKLX0KLQotZmxvYXQgQ2FsY3VsYXRpb25WYWx1ZTo6ZXZh
bHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgZmxvYXQgcmVzdWx0ID0gbV9leHBy
ZXNzaW9uLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgLy8gRklYTUU6IFRoaXMgdGVzdCB3YXMg
b3JpZ2luYWxseSBuZWVkZWQgd2hlbiB3ZSBkaWQgbm90IGRldGVjdCBkaXZpc2lvbiBieSB6ZXJv
IGF0IHBhcnNlIHRpbWUuCi0gICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgaXMgbm93IHVu
bmVlZGVkIGNvZGUgYW5kIGNhbiBiZSByZW1vdmVkLgotICAgIGlmIChzdGQ6OmlzbmFuKHJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdh
dGl2ZSAmJiByZXN1bHQgPCAwID8gMCA6IHJlc3VsdDsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Np
b25OZWdhdGlvbjo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IC1tX2NoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25O
ZWdhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25z
dAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcikgJiYgKnRo
aXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIpOwotfQotCi12b2lk
IENhbGNFeHByZXNzaW9uTmVnYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0g
ICAgdHMgPDwgIi0oIjsKLSAgICB0cyA8PCAqbV9jaGlsZDsKLSAgICB0cyA8PCAiKSI7Ci19Ci0K
LWJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiBhLCBjb25zdCBD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiBiKQotewotICAgIHJldHVybiAqYS5jaGlsZCgpID09ICpi
LmNoaWxkKCk7Ci19Ci0KLWZsb2F0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpldmFsdWF0ZShm
bG9hdCBtYXhWYWx1ZSkgY29uc3QKLXsKLSAgICByZXR1cm4gMS4wZiAvIG1fY2hpbGQtPmV2YWx1
YXRlKG1heFZhbHVlKTsKLX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZHVtcChU
ZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiMS4wIC8gIiA8PCAiKCI7Ci0gICAg
dHMgPDwgKm1fY2hpbGQ7Ci0gICAgdHMgPDwgIikiOwotfQotCi1ib29sIENhbGNFeHByZXNzaW9u
SW52ZXJzaW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcikgJiYg
KnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG90aGVyKTsKLX0KLQot
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBhLCBjb25zdCBD
YWxjRXhwcmVzc2lvbkludmVyc2lvbiYgYikKLXsKLSAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAq
Yi5jaGlsZCgpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChtX29wZXJhdG9yKSB7Ci0gICAg
Y2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogewotICAgICAgICBmbG9hdCBzdW0gPSAwOwotICAgICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAgIHN1bSArPSBjaGls
ZC0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICByZXR1cm4gc3VtOwotICAgIH0KLSAgICBj
YXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAg
QVNTRVJUKG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpOwotICAgICAgICBmbG9hdCBsZWZ0ID0gbV9j
aGlsZHJlblswXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmbG9hdCByaWdodCA9IG1f
Y2hpbGRyZW5bMV0tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGxlZnQgLSBy
aWdodDsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Ci0gICAgICAg
IGZsb2F0IHByb2R1Y3QgPSAxOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJl
bikKLSAgICAgICAgICAgIHByb2R1Y3QgKj0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAg
ICAgICAgcmV0dXJuIHByb2R1Y3Q7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZp
ZGU6IHsKLSAgICAgICAgLy8gRklYTUUKLSAgICAgICAgQVNTRVJUKG1fY2hpbGRyZW4uc2l6ZSgp
ID09IDEgfHwgbV9jaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVu
LnNpemUoKSA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2
YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5l
dmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7Ci0gICAgfQot
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNF
bXB0eSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+Ojpx
dWlldF9OYU4oKTsKLSAgICAgICAgZmxvYXQgbWluaW11bSA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1
YXRlKG1heFZhbHVlKTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0g
ICAgICAgICAgICBtaW5pbXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQtPmV2YWx1YXRlKG1h
eFZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBtaW5pbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNP
cGVyYXRvcjo6TWF4OiB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0g
ICAgICAgIGZsb2F0IG1heGltdW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7
Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgbWF4
aW11bSA9IHN0ZDo6bWF4KG1heGltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkpOwotICAg
ICAgICByZXR1cm4gbWF4aW11bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1w
OiB7Ci0gICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSAhPSAzKQotICAgICAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLQotICAgICAgICBm
bG9hdCBtaW4gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZs
b2F0IHZhbHVlID0gbV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICBm
bG9hdCBtYXggPSBtX2NoaWxkcmVuWzJdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJl
dHVybiBzdGQ6Om1heChtaW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKLSAgICB9Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRz
PGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246
Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAg
ICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKSAmJiAqdGhpcyA9PSBk
b3duY2FzdDxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpOwotfQotCi1ib29sIG9wZXJh
dG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mIGEsIGNvbnN0IENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uJiBiKQotewotICAgIGlmIChhLmdldE9wZXJhdG9yKCkgIT0gYi5nZXRPcGVy
YXRvcigpIHx8IGEuZGVzdGluYXRpb25DYXRlZ29yeSgpICE9IGIuZGVzdGluYXRpb25DYXRlZ29y
eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgLy8gRklYTUU6IFdvdWxkIGJlIG5pY2Ug
dG8gaGF2ZSBhIGhlbHBlciBmdW5jdGlvbiBmb3IgZG9pbmcgYSBkZWVwIGNvbXBhcmUgb24gYSB2
ZWN0b3Igb2YgcG9pbnRlcnMuCi0gICAgaWYgKGEuY2hpbGRyZW4oKS5zaXplKCkgIT0gYi5jaGls
ZHJlbigpLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhLmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCEoKmEu
Y2hpbGRyZW4oKVtpXSA9PSAqYi5jaGlsZHJlbigpW2ldKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25P
cGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgaWYgKG1fb3BlcmF0
b3IgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1h
eCkgewotICAgICAgICB0cyA8PCBtX29wZXJhdG9yIDw8ICIoIjsKLSAgICAgICAgc2l6ZV90IGNo
aWxkcmVuQ291bnQgPSBtX2NoaWxkcmVuLnNpemUoKTsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBjaGlsZHJlbkNvdW50OyBpKyspIHsKLSAgICAgICAgICAgIHRzIDw8IG1fY2hpbGRy
ZW5baV0uZ2V0KCk7Ci0gICAgICAgICAgICBpZiAoaSA8IGNoaWxkcmVuQ291bnQgLSAxKQotICAg
ICAgICAgICAgICAgIHRzIDw8ICIsICI7Ci0gICAgICAgIH0KLSAgICAgICAgdHMgPDwgIikiOwot
ICAgIH0gZWxzZQotICAgICAgICB0cyA8PCBtX2NoaWxkcmVuWzBdLmdldCgpIDw8ICIgIiA8PCBt
X29wZXJhdG9yIDw8ICIgIiA8PCBtX2NoaWxkcmVuWzFdLmdldCgpOwotfQotCi1mbG9hdCBDYWxj
RXhwcmVzc2lvbkxlbmd0aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGZsb2F0VmFsdWVGb3JMZW5ndGgobV9sZW5ndGgsIG1heFZhbHVlKTsKLX0KLQotYm9v
bCBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5v
ZGUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkxlbmd0aD4o
b3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihvdGhlcik7
Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0Ci17Ci0gICAgdHMgPDwgbV9sZW5ndGg7Ci19Ci0KLUNhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGg6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxv
YXQgcHJvZ3Jlc3MpCi0gICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2Rl
VHlwZTo6QmxlbmRMZW5ndGgpCi0gICAgLCBtX2Zyb20oZnJvbSkKLSAgICAsIG1fdG8odG8pCi0g
ICAgLCBtX3Byb2dyZXNzKHByb2dyZXNzKQotewotICAgIC8vIEZsYXR0ZW4gbmVzdGluZyBvZiBD
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGFzIGEgc3BlY3VsYXRpdmUgZml4IGZvciByZGFyOi8v
cHJvYmxlbS8zMDUzMzAwNS4KLSAgICAvLyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGlzIG9u
bHkgdXNlZCBhcyBhIHJlc3VsdCBvZiBhbmltYXRpb24gYW5kIHRoZXkgZG9uJ3QgbmVzdCBpbiBu
b3JtYWwgY2FzZXMuCi0gICAgaWYgKG1fZnJvbS5pc0NhbGN1bGF0ZWQoKSAmJiBtX2Zyb20uY2Fs
Y3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2Rl
VHlwZTo6QmxlbmRMZW5ndGgpCi0gICAgICAgIG1fZnJvbSA9IGRvd25jYXN0PENhbGNFeHByZXNz
aW9uQmxlbmRMZW5ndGg+KG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpKS5m
cm9tKCk7Ci0gICAgaWYgKG1fdG8uaXNDYWxjdWxhdGVkKCkgJiYgbV90by5jYWxjdWxhdGlvblZh
bHVlKCkuZXhwcmVzc2lvbigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVu
ZExlbmd0aCkKLSAgICAgICAgbV90byA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGg+KG1fdG8uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSkudG8oKTsKLX0KLQotZmxv
YXQgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuICgxLjBmIC0gbV9wcm9ncmVzcykgKiBmbG9hdFZhbHVlRm9yTGVu
Z3RoKG1fZnJvbSwgbWF4VmFsdWUpICsgbV9wcm9ncmVzcyAqIGZsb2F0VmFsdWVGb3JMZW5ndGgo
bV90bywgbWF4VmFsdWUpOwotfQotCi1ib29sIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6Om9w
ZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICBy
ZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIpICYmICp0aGlzID09IGRv
d25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKTsKLX0KLQotdm9pZCBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAg
IHRzIDw8ICJibGVuZCgiIDw8IG1fZnJvbSA8PCAiLCAiIDw8IG1fdG8gPDwgIiwgIiA8PCBtX3By
b2dyZXNzIDw8ICIpIjsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0
cywgQ2FsY09wZXJhdG9yIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNlIENhbGNP
cGVyYXRvcjo6QWRkOiB0cyA8PCAiKyI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpT
dWJ0cmFjdDogdHMgPDwgIi0iOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlw
bHk6IHRzIDw8ICIqIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogdHMg
PDwgIi8iOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB0cyA8PCAibWluIjsg
YnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogdHMgPDwgIm1heCI7IGJyZWFrOwot
ICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogdHMgPDwgImNsYW1wIjsgYnJlYWs7Ci0gICAg
fQotICAgIHJldHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgdmFsdWUpCi17Ci0gICAgdHMgPDwgImNhbGMo
IjsKLSAgICB0cyA8PCB2YWx1ZS5leHByZXNzaW9uKCk7Ci0gICAgdHMgPDwgIikiOwotICAgIHJl
dHVybiB0czsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29u
c3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHByZXNzaW9uTm9kZSkKLXsKLSAgICBleHByZXNzaW9u
Tm9kZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmgJKHJl
dmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFs
dWUuaAkobm9uZXhpc3RlbnQpCkBAIC0xLDI4NiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0g
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJMZW5ndGguaCIKLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgot
I2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1u
YW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0KLW5hbWVzcGFjZSBXZWJDb3Jl
IHsKLQotLy8gRklYTUU6IEZpbmQgYSB3YXkgdG8gdW5pZnkgdGhpcyB3aXRoIENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0Q2F0ZWdvcnk/Ci1lbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1
aW50OF90IHsKLSAgICBOdW1iZXIsCi0gICAgTGVuZ3RoLAotICAgIFBlcmNlbnQsCi0gICAgUGVy
Y2VudE51bWJlciwKLSAgICBQZXJjZW50TGVuZ3RoLAotICAgIEFuZ2xlLAotICAgIFRpbWUsCi0g
ICAgRnJlcXVlbmN5LAotICAgIE90aGVyCi19OwotCi0vLyBEb24ndCBjaGFuZ2UgdGhlc2UgdmFs
dWVzOyBwYXJzaW5nIHVzZXMgdGhlbS4KLWVudW0gY2xhc3MgQ2FsY09wZXJhdG9yIDogdWludDhf
dCB7Ci0gICAgQWRkID0gJysnLAotICAgIFN1YnRyYWN0ID0gJy0nLAotICAgIE11bHRpcGx5ID0g
JyonLAotICAgIERpdmlkZSA9ICcvJywKLSAgICBNaW4gPSAwLAotICAgIE1heCwKLSAgICBDbGFt
cCwKLX07Ci0KLWVudW0gY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA6IHVpbnQ4X3Qgewot
ICAgIFVuZGVmaW5lZCwKLSAgICBOdW1iZXIsCi0gICAgTGVuZ3RoLAotICAgIE9wZXJhdGlvbiwK
LSAgICBOZWdhdGlvbiwKLSAgICBJbnZlcnNpb24sCi0gICAgQmxlbmRMZW5ndGgsCi19OwotCi1j
bGFzcyBDYWxjRXhwcmVzc2lvbk5vZGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwot
cHVibGljOgotICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlID0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6VW5kZWZpbmVkKTsKLSAgICB2aXJ0dWFs
IH5DYWxjRXhwcmVzc2lvbk5vZGUoKSA9IGRlZmF1bHQ7Ci0KLSAgICBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KLQotICAgIHZpcnR1YWwgZmxv
YXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgPSAwOwotCi1wcml2YXRlOgot
ICAgIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgbV90eXBlOwotfTsKLQotY2xhc3MgQ2FsY0V4cHJl
c3Npb25OdW1iZXIgZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoK
LSAgICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCk7Ci0KLSAgICBmbG9hdCB2
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotcHJpdmF0ZToKLSAgICBmbG9hdCBl
dmFsdWF0ZShmbG9hdCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZHVtcChXVEY6
OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGZsb2F0IG1fdmFsdWU7Ci19Owot
Ci1jbGFzcyBDYWxjRXhwcmVzc2lvbkxlbmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lv
bk5vZGUgewotcHVibGljOgotICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTGVuZ3RoKExlbmd0
aCk7Ci0KLSAgICBjb25zdCBMZW5ndGgmIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3Ro
OyB9Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0
IG92ZXJyaWRlOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUm
KSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBMZW5ndGggbV9sZW5ndGg7Ci19OwotCi1jbGFzcyBDYWxjRXhwcmVz
c2lvbk5lZ2F0aW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6
Ci0gICAgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Np
b25Ob2RlPiYmIG5vZGUpCi0gICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNz
aW9uTm9kZVR5cGU6Ok5lZ2F0aW9uKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkK
LSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2NoaWxkKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBldmFs
dWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgZHVtcChXVEY6
OlRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKLSAgICAKLSAgICBjb25zdCBDYWxjRXhwcmVzc2lv
bk5vZGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi1wcml2YXRl
OgotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Ci19Owot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYsIGNvbnN0IENh
bGNFeHByZXNzaW9uTmVnYXRpb24mKTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24g
ZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBDYWxjRXhw
cmVzc2lvbkludmVyc2lvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5v
ZGUpCi0gICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6
OkludmVyc2lvbikKLSAgICAgICAgLCBtX2NoaWxkKFdURk1vdmUobm9kZSkpCi0gICAgewotICAg
ICAgICBBU1NFUlQobV9jaGlsZCk7Ci0gICAgfQotCi0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQg
bWF4VmFsdWUpIGNvbnN0IGZpbmFsOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhw
cmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFt
JikgY29uc3QgZmluYWw7Ci0KLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUqIGNoaWxkKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Ci19OwotCi1ib29sIG9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbklu
dmVyc2lvbiYpOwotCi1jbGFzcyBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiBmaW5hbCA6IHB1Ymxp
YyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAgIENhbGNFeHByZXNzaW9uT3BlcmF0
aW9uKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJl
biwgQ2FsY09wZXJhdG9yLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkg
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7Ci0KLSAgICBDYWxjT3BlcmF0b3IgZ2V0T3Bl
cmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yOyB9Ci0gICAgQ2FsY3VsYXRpb25DYXRl
Z29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9kZXN0aW5hdGlvbkNh
dGVnb3J5OyB9Ci0KLSAgICBjb25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNz
aW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLQotcHJp
dmF0ZToKLSAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7
Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
LQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGls
ZHJlbjsKLSAgICBDYWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKLSAgICBDYWxjdWxhdGlvbkNhdGVn
b3J5IG1fZGVzdGluYXRpb25DYXRlZ29yeSB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyIH07
Ci19OwotCi1jbGFzcyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGZpbmFsIDogcHVibGljIENh
bGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0
aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcyk7Ci0KLSAgICBjb25zdCBM
ZW5ndGgmIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KLSAgICBjb25zdCBMZW5ndGgm
IHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQotICAgIGZsb2F0IHByb2dyZXNzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9ncmVzczsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0IGV2YWx1YXRlKGZs
b2F0IG1heFZhbHVlKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1wKFdURjo6
VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTGVuZ3RoIG1fZnJvbTsKLSAgICBM
ZW5ndGggbV90bzsKLSAgICBmbG9hdCBtX3Byb2dyZXNzOwotfTsKLQotY2xhc3MgQ2FsY3VsYXRp
b25WYWx1ZSA6IHB1YmxpYyBSZWZDb3VudGVkPENhbGN1bGF0aW9uVmFsdWU+IHsKLXB1YmxpYzoK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZShz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7Ci0gICAgZmxv
YXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0OwotCi0gICAgYm9vbCBzaG91bGRDbGFt
cFRvTm9uTmVnYXRpdmUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2
ZTsgfQotICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbigpIGNvbnN0IHsg
cmV0dXJuICptX2V4cHJlc3Npb247IH0KLQotcHJpdmF0ZToKLSAgICBDYWxjdWxhdGlvblZhbHVl
KHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsKLQotICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lvbjsKLSAgICBi
b29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlOwotfTsKLQotaW5saW5lIENhbGNFeHByZXNz
aW9uTm9kZTo6Q2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSkK
LSAgICA6IG1fdHlwZSh0eXBlKQotewotfQotCi1pbmxpbmUgQ2FsY3VsYXRpb25WYWx1ZTo6Q2Fs
Y3VsYXRpb25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNz
aW9uLCBWYWx1ZVJhbmdlIHJhbmdlKQotICAgIDogbV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVz
c2lvbikpCi0gICAgLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZShyYW5nZSA9PSBWYWx1ZVJh
bmdlOjpOb25OZWdhdGl2ZSkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxjdWxhdGlvblZhbHVlJiBhLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJiBiKQotewotICAgIHJl
dHVybiBhLmV4cHJlc3Npb24oKSA9PSBiLmV4cHJlc3Npb24oKTsKLX0KLQotaW5saW5lIENhbGNF
eHByZXNzaW9uTnVtYmVyOjpDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCB2YWx1ZSkKLSAgICA6
IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOdW1iZXIpCi0gICAg
LCBtX3ZhbHVlKHZhbHVlKQotewotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENh
bGNFeHByZXNzaW9uTnVtYmVyJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYgYikKLXsK
LSAgICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUoKTsKLX0KLQotaW5saW5lIENhbGNFeHBy
ZXNzaW9uTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkxlbmd0aChMZW5ndGggbGVuZ3RoKQotICAgIDog
Q2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxlbmd0aCkKLSAgICAs
IG1fbGVuZ3RoKGxlbmd0aCkKLXsKLX0KLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxjRXhwcmVzc2lvbkxlbmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGIpCi17
Ci0gICAgcmV0dXJuIGEubGVuZ3RoKCkgPT0gYi5sZW5ndGgoKTsKLX0KLQotaW5saW5lIENhbGNF
eHByZXNzaW9uT3BlcmF0aW9uOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciBv
cCwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotICAgIDogQ2FsY0V4
cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbikKLSAgICAsIG1f
Y2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpCi0gICAgLCBtX29wZXJhdG9yKG9wKQotICAgICwg
bV9kZXN0aW5hdGlvbkNhdGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi17Ci19Ci0KLWJvb2wg
b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYsIGNvbnN0IENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uJik7Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCYg
YikKLXsKLSAgICByZXR1cm4gYS5wcm9ncmVzcygpID09IGIucHJvZ3Jlc3MoKSAmJiBhLmZyb20o
KSA9PSBiLmZyb20oKSAmJiBhLnRvKCkgPT0gYi50bygpOwotfQotCi1XVEY6OlRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYpOwot
V1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IENhbGNF
eHByZXNzaW9uTm9kZSYpOwotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0
cmVhbSYsIENhbGNPcGVyYXRvcik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2RlZmlu
ZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVO
YW1lLCBwcmVkaWNhdGUpIFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6
VG9WYWx1ZVR5cGVOYW1lKSBcCi0gICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OkNhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NB
TENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25OdW1iZXIsIHR5cGUoKSA9PSBXZWJDb3Jl
OjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOdW1iZXIpCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25MZW5ndGgsIHR5cGUoKSA9PSBXZWJD
b3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGgpCi1TUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24sIHR5cGUoKSA9
PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCi1TUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiwg
dHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uKQotU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uSW52
ZXJzaW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJz
aW9uKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGgsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVU
eXBlOjpCbGVuZExlbmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkocmV2
aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
IG11ZWxsZXJAa2RlLm9yZyApCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQW5kcmV3IFdl
bGxpbmd0b24gKHByb3RvbkB3aXJldGFwcGVkLm5ldCkKICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0yNiw2ICsy
Niw5IEBACiAjaW5jbHVkZSAiTGVuZ3RoLmgiCiAKICNpbmNsdWRlICJBbmltYXRpb25VdGlsaXRp
ZXMuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgiCisjaW5jbHVkZSAi
Q2FsY0V4cHJlc3Npb25MZW5ndGguaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlv
bi5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQVNDSUlD
VHlwZS5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGguaCIKKworI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRl
ICJMZW5ndGhGdW5jdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6Q2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVz
cykKKyAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVu
ZExlbmd0aCkKKyAgICAsIG1fZnJvbShmcm9tKQorICAgICwgbV90byh0bykKKyAgICAsIG1fcHJv
Z3Jlc3MocHJvZ3Jlc3MpCit7CisgICAgLy8gRmxhdHRlbiBuZXN0aW5nIG9mIENhbGNFeHByZXNz
aW9uQmxlbmRMZW5ndGggYXMgYSBzcGVjdWxhdGl2ZSBmaXggZm9yIHJkYXI6Ly9wcm9ibGVtLzMw
NTMzMDA1LgorICAgIC8vIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGggaXMgb25seSB1c2VkIGFz
IGEgcmVzdWx0IG9mIGFuaW1hdGlvbiBhbmQgdGhleSBkb24ndCBuZXN0IGluIG5vcm1hbCBjYXNl
cy4KKyAgICBpZiAobV9mcm9tLmlzQ2FsY3VsYXRlZCgpICYmIG1fZnJvbS5jYWxjdWxhdGlvblZh
bHVlKCkuZXhwcmVzc2lvbigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVu
ZExlbmd0aCkKKyAgICAgICAgbV9mcm9tID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aD4obV9mcm9tLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkpLmZyb20oKTsKKyAg
ICBpZiAobV90by5pc0NhbGN1bGF0ZWQoKSAmJiBtX3RvLmNhbGN1bGF0aW9uVmFsdWUoKS5leHBy
ZXNzaW9uKCkudHlwZSgpID09IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQor
ICAgICAgICBtX3RvID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4obV90by5j
YWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpKS50bygpOworfQorCitmbG9hdCBDYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKDEuMGYgLSBtX3Byb2dyZXNzKSAqIGZsb2F0VmFsdWVGb3JMZW5ndGgobV9mcm9t
LCBtYXhWYWx1ZSkgKyBtX3Byb2dyZXNzICogZmxvYXRWYWx1ZUZvckxlbmd0aChtX3RvLCBtYXhW
YWx1ZSk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6b3BlcmF0b3I9PShj
b25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxD
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2Fs
Y0V4cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIpOworfQorCit2b2lkIENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgImJs
ZW5kKCIgPDwgbV9mcm9tIDw8ICIsICIgPDwgbV90byA8PCAiLCAiIDw8IG1fcHJvZ3Jlc3MgPDwg
IikiOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGZp
bmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAgQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBmbG9hdCBwcm9ncmVzcyk7
CisKKyAgICBjb25zdCBMZW5ndGgmIGZyb20oKSBjb25zdCB7IHJldHVybiBtX2Zyb207IH0KKyAg
ICBjb25zdCBMZW5ndGgmIHRvKCkgY29uc3QgeyByZXR1cm4gbV90bzsgfQorICAgIGZsb2F0IHBy
b2dyZXNzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9ncmVzczsgfQorCitwcml2YXRlOgorICAgIGZs
b2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBk
dW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIExlbmd0aCBtX2Zyb207CisgICAg
TGVuZ3RoIG1fdG87CisgICAgZmxvYXQgbV9wcm9ncmVzczsKK307CisKK2lubGluZSBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCYgYSwgY29uc3QgQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aCYgYikKK3sKKyAgICByZXR1cm4gYS5wcm9ncmVzcygpID09IGIu
cHJvZ3Jlc3MoKSAmJiBhLmZyb20oKSA9PSBiLmZyb20oKSAmJiBhLnRvKCkgPT0gYi50bygpOwor
fQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25O
b2RlVHlwZTo6QmxlbmRMZW5ndGgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxj
L0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9u
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmgiCisKKyNp
bmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
ZmxvYXQgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBj
b25zdAoreworICAgIHJldHVybiAxLjBmIC8gbV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOwor
fQorCit2b2lkIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBj
b25zdAoreworICAgIHRzIDw8ICIxLjAgLyAiIDw8ICIoIiA8PCAqbV9jaGlsZCA8PCAiKSI7Cit9
CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4
cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Np
b25JbnZlcnNpb24+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbklu
dmVyc2lvbj4ob3RoZXIpOworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Np
b25JbnZlcnNpb24mIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBiKQoreworICAg
IHJldHVybiAqYS5jaGlsZCgpID09ICpiLmNoaWxkKCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9u
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbkludmVyc2lvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgor
I2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhw
cmVzc2lvbkludmVyc2lvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVi
bGljOgorICAgIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgbm9kZSkKKyAgICAgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4
cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShu
b2RlKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NoaWxkKTsKKyAgICB9CisKKyAgICBjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQo
KTsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25z
dCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Cit9OworCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mLCBjb25zdCBDYWxj
RXhwcmVzc2lvbkludmVyc2lvbiYpOworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FM
Q0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbkludmVyc2lvbiwgdHlwZSgpID09IFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Np
b25MZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25MZW5ndGguaCIK
KworI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbkxl
bmd0aDo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZsb2F0
VmFsdWVGb3JMZW5ndGgobV9sZW5ndGgsIG1heFZhbHVlKTsKK30KKworYm9vbCBDYWxjRXhwcmVz
c2lvbkxlbmd0aDo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBj
b25zdAoreworICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpICYmICp0
aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihvdGhlcik7Cit9CisKK3ZvaWQg
Q2FsY0V4cHJlc3Npb25MZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAg
dHMgPDwgbV9sZW5ndGg7Cit9CisKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbkxlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguaAkobm9uZXhpc3RlbnQpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAq
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICog
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisj
aW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25MZW5ndGggZmluYWwgOiBw
dWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDYWxjRXhw
cmVzc2lvbkxlbmd0aChMZW5ndGgpOworCisgICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgoKSBjb25z
dCB7IHJldHVybiBtX2xlbmd0aDsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZs
b2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdCBmaW5hbDsKKworICAgIExlbmd0aCBtX2xlbmd0aDsKK307CisKK2lubGluZSBDYWxj
RXhwcmVzc2lvbkxlbmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoIGxlbmd0aCkKKyAg
ICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGgpCisg
ICAgLCBtX2xlbmd0aChsZW5ndGgpCit7Cit9CisKK2lubGluZSBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBi
KQoreworICAgIHJldHVybiBhLmxlbmd0aCgpID09IGIubGVuZ3RoKCk7Cit9CisKK30KKworU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTGVu
Z3RoLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHBy
ZXNzaW9uTmVnYXRpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJlc3Npb25OZWdhdGlv
bjo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIC1tX2NoaWxk
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6
b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAg
IHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93
bmNhc3Q8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4ob3RoZXIpOworfQorCit2b2lkIENhbGNFeHBy
ZXNzaW9uTmVnYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwg
Ii0oIiA8PCAqbV9jaGlsZCA8PCAiKSI7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxj
RXhwcmVzc2lvbk5lZ2F0aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiBiKQor
eworICAgIHJldHVybiAqYS5jaGlsZCgpID09ICpiLmNoaWxkKCk7Cit9CisKK30KSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OZWdh
dGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2Fs
Y0V4cHJlc3Npb25OZWdhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5o
IgorI2luY2x1ZGUgPG1lbW9yeT4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxj
RXhwcmVzc2lvbk5lZ2F0aW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Citw
dWJsaWM6CisgICAgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiYmIG5vZGUpCisgICAgICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShu
b2RlKSkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2NoaWxkKTsKKyAgICB9CisgICAgCisgICAg
Y29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQu
Z2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9k
ZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOworfTsK
KworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTmVnYXRpb24mLCBjb25zdCBD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uJik7CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
QUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTmVnYXRpb24sIHR5cGUoKSA9PSBXZWJD
b3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAJKG5vbmV4
aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5v
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKKyNpbmNs
dWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGV4
dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2FsY0V4cHJlc3Npb25O
b2RlJiBleHByZXNzaW9uTm9kZSkKK3sKKyAgICBleHByZXNzaW9uTm9kZS5kdW1wKHRzKTsKKyAg
ICByZXR1cm4gdHM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZW51bSBjbGFzcyBDYWxjRXhw
cmVzc2lvbk5vZGVUeXBlIDogdWludDhfdCB7CisgICAgVW5kZWZpbmVkLAorICAgIE51bWJlciwK
KyAgICBMZW5ndGgsCisgICAgT3BlcmF0aW9uLAorICAgIE5lZ2F0aW9uLAorICAgIEludmVyc2lv
biwKKyAgICBCbGVuZExlbmd0aCwKK307CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTm9kZSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQ2FsY0V4
cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGUgPSBDYWxjRXhwcmVzc2lvbk5vZGVU
eXBlOjpVbmRlZmluZWQpOworICAgIHZpcnR1YWwgfkNhbGNFeHByZXNzaW9uTm9kZSgpID0gZGVm
YXVsdDsKKworICAgIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZTsgfQorCisgICAgdmlydHVhbCBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNz
aW9uTm9kZSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChUZXh0U3RyZWFtJikg
Y29uc3QgPSAwOworCitwcml2YXRlOgorICAgIENhbGNFeHByZXNzaW9uTm9kZVR5cGUgbV90eXBl
OworfTsKKworaW5saW5lIENhbGNFeHByZXNzaW9uTm9kZTo6Q2FsY0V4cHJlc3Npb25Ob2RlKENh
bGNFeHByZXNzaW9uTm9kZVR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworfQorCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5v
ZGUmKTsKKworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJ
T05fTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKSB7IHJldHVybiBu
b2RlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVt
YmVyLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uTnVtYmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9u
TnVtYmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworZmxvYXQgQ2FsY0V4cHJlc3Npb25OdW1iZXI6OmV2YWx1YXRlKGZsb2F0
KSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlOworfQorCit2b2lkIENhbGNFeHByZXNzaW9u
TnVtYmVyOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8IFRleHRTdHJl
YW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2VycyhtX3ZhbHVlKTsKK30KKworYm9vbCBD
YWxjRXhwcmVzc2lvbk51bWJlcjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUm
IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3Ro
ZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihvdGhlcik7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25O
dW1iZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uTnVtYmVyLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNz
aW9uTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHByZXNzaW9u
TnVtYmVyIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25OdW1iZXIoZmxvYXQpOworCisgICAgZmxvYXQgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVh
dGUoZmxvYXQpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhw
cmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNv
bnN0IGZpbmFsOworCisgICAgZmxvYXQgbV92YWx1ZTsKK307CisKK2lubGluZSBDYWxjRXhwcmVz
c2lvbk51bWJlcjo6Q2FsY0V4cHJlc3Npb25OdW1iZXIoZmxvYXQgdmFsdWUpCisgICAgOiBDYWxj
RXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQorICAgICwgbV92
YWx1ZSh2YWx1ZSkKK3sKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhw
cmVzc2lvbk51bWJlciYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OdW1iZXImIGIpCit7CisgICAg
cmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVlKCk7Cit9CisKK30KKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uTnVtYmVyLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVyKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJh
dGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJl
c3Npb25PcGVyYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZXZh
bHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX29wZXJhdG9yKSB7
CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogeworICAgICAgICBmbG9hdCBzdW0gPSAwOwor
ICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgICAgIHN1bSAr
PSBjaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICByZXR1cm4gc3VtOworICAgIH0K
KyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHsKKyAgICAgICAgLy8gRklYTUUKKyAg
ICAgICAgQVNTRVJUKG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICBmbG9hdCBsZWZ0
ID0gbV9jaGlsZHJlblswXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmbG9hdCByaWdo
dCA9IG1fY2hpbGRyZW5bMV0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGxl
ZnQgLSByaWdodDsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Cisg
ICAgICAgIGZsb2F0IHByb2R1Y3QgPSAxOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9j
aGlsZHJlbikKKyAgICAgICAgICAgIHByb2R1Y3QgKj0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIHByb2R1Y3Q7CisgICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpEaXZpZGU6IHsKKyAgICAgICAgLy8gRklYTUUKKyAgICAgICAgQVNTRVJUKG1fY2hpbGRyZW4u
c2l6ZSgpID09IDEgfHwgbV9jaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGlmIChtX2No
aWxkcmVuLnNpemUoKSA9PSAxKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5b
MF0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVu
WzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBsZWZ0IC8gcmlnaHQ7Cisg
ICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHsKKyAgICAgICAgaWYgKG1fY2hpbGRy
ZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8Zmxv
YXQ+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgZmxvYXQgbWluaW11bSA9IG1fY2hpbGRyZW5bMF0t
PmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRy
ZW4pCisgICAgICAgICAgICBtaW5pbXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQtPmV2YWx1
YXRlKG1heFZhbHVlKSk7CisgICAgICAgIHJldHVybiBtaW5pbXVtOworICAgIH0KKyAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TWF4OiB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFO
KCk7CisgICAgICAgIGZsb2F0IG1heGltdW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhW
YWx1ZSk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICAg
ICAgbWF4aW11bSA9IHN0ZDo6bWF4KG1heGltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkp
OworICAgICAgICByZXR1cm4gbWF4aW11bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6
OkNsYW1wOiB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSAhPSAzKQorICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKKworICAg
ICAgICBmbG9hdCBtaW4gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAg
ICAgIGZsb2F0IHZhbHVlID0gbV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAg
ICAgICBmbG9hdCBtYXggPSBtX2NoaWxkcmVuWzJdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAg
ICAgIHJldHVybiBzdGQ6Om1heChtaW4sIHN0ZDo6bWluKHZhbHVlLCBtYXgpKTsKKyAgICB9Cisg
ICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25PcGVy
YXRpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QK
K3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG90aGVyKSAmJiAqdGhp
cyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpOworfQorCitib29s
IG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mIGEsIGNvbnN0IENhbGNF
eHByZXNzaW9uT3BlcmF0aW9uJiBiKQoreworICAgIGlmIChhLmdldE9wZXJhdG9yKCkgIT0gYi5n
ZXRPcGVyYXRvcigpIHx8IGEuZGVzdGluYXRpb25DYXRlZ29yeSgpICE9IGIuZGVzdGluYXRpb25D
YXRlZ29yeSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGEuY2hpbGRyZW4oKS5z
aXplKCkgIT0gYi5jaGlsZHJlbigpLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhLmNoaWxkcmVuKCkuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKCEoKmEuY2hpbGRyZW4oKVtpXSA9PSAqYi5jaGlsZHJlbigpW2ldKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQg
Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBD
YWxjT3BlcmF0b3I6Ok1heCkgeworICAgICAgICB0cyA8PCBtX29wZXJhdG9yIDw8ICIoIjsKKyAg
ICAgICAgc2l6ZV90IGNoaWxkcmVuQ291bnQgPSBtX2NoaWxkcmVuLnNpemUoKTsKKyAgICAgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBjaGlsZHJlbkNvdW50OyBpKyspIHsKKyAgICAgICAgICAg
IHRzIDw8IG1fY2hpbGRyZW5baV0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoaSA8IGNoaWxkcmVu
Q291bnQgLSAxKQorICAgICAgICAgICAgICAgIHRzIDw8ICIsICI7CisgICAgICAgIH0KKyAgICAg
ICAgdHMgPDwgIikiOworICAgIH0gZWxzZQorICAgICAgICB0cyA8PCBtX2NoaWxkcmVuWzBdLmdl
dCgpIDw8ICIgIiA8PCBtX29wZXJhdG9yIDw8ICIgIiA8PCBtX2NoaWxkcmVuWzFdLmdldCgpOwor
fQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
T3BlcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJD
YWxjRXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlICJDYWxjT3BlcmF0b3IuaCIKKyNpbmNsdWRl
ICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lv
bk9wZXJhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgor
ICAgIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJlbiwgQ2FsY09wZXJhdG9yLCBDYWxjdWxhdGlvbkNhdGVn
b3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7CisK
KyAgICBDYWxjT3BlcmF0b3IgZ2V0T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9y
OyB9CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KCkgY29uc3Qg
eyByZXR1cm4gbV9kZXN0aW5hdGlvbkNhdGVnb3J5OyB9CisKKyAgICBjb25zdCBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW47IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBt
YXhWYWx1ZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHBy
ZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29u
c3QgZmluYWw7CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4+IG1fY2hpbGRyZW47CisgICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0b3I7CisgICAgQ2FsY3Vs
YXRpb25DYXRlZ29yeSBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkgeyBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlciB9OworfTsKKworCitpbmxpbmUgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb246OkNhbGNF
eHByZXNzaW9uT3BlcmF0aW9uKFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPj4mJiBjaGlsZHJlbiwgQ2FsY09wZXJhdG9yIG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRl
c3RpbmF0aW9uQ2F0ZWdvcnkpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Np
b25Ob2RlVHlwZTo6T3BlcmF0aW9uKQorICAgICwgbV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVu
KSkKKyAgICAsIG1fb3BlcmF0b3Iob3ApCisgICAgLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkoZGVz
dGluYXRpb25DYXRlZ29yeSkKK3sKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uJiwgY29uc3QgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24mKTsKKworfQor
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Np
b25PcGVyYXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpP
cGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRv
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjT3Bl
cmF0b3IuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY09wZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNPcGVyYXRvci5oIgorCisj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENhbGNPcGVyYXRvciBvcCkK
K3sKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogdHMgPDwg
IisiOyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHRzIDw8ICItIjsg
YnJlYWs7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB0cyA8PCAiKiI7IGJyZWFr
OworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHRzIDw8ICIvIjsgYnJlYWs7CisgICAg
Y2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogdHMgPDwgIm1pbiI7IGJyZWFrOworICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNYXg6IHRzIDw8ICJtYXgiOyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRv
cjo6Q2xhbXA6IHRzIDw8ICJjbGFtcCI7IGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHM7Cit9
CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3Iu
aAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVy
YXRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworLy8gRG9uJ3QgY2hhbmdlIHRoZXNlIHZhbHVlczsgcGFyc2luZyB1c2VzIHRoZW0uCitl
bnVtIGNsYXNzIENhbGNPcGVyYXRvciA6IHVpbnQ4X3QgeworICAgIEFkZCA9ICcrJywKKyAgICBT
dWJ0cmFjdCA9ICctJywKKyAgICBNdWx0aXBseSA9ICcqJywKKyAgICBEaXZpZGUgPSAnLycsCisg
ICAgTWluID0gMCwKKyAgICBNYXgsCisgICAgQ2xhbXAsCit9OworCitUZXh0U3RyZWFtJiBvcGVy
YXRvcjw8KFRleHRTdHJlYW0mLCBDYWxjT3BlcmF0b3IpOworCit9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNh
dGVnb3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDYWxjdWxhdGlvbkNhdGVn
b3J5IGNhdGVnb3J5KQoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjogdHMgPDwgIm51bWJlciI7IGJyZWFrOworICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiB0cyA8PCAibGVuZ3RoIjsgYnJlYWs7CisgICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OiB0cyA8PCAicGVyY2VudCI7IGJyZWFr
OworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjogdHMgPDwgInBl
cmNlbnQtbnVtYmVyIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoOiB0cyA8PCAicGVyY2VudC1sZW5ndGgiOyBicmVhazsKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOiB0cyA8PCAiYW5nbGUiOyBicmVhazsKKyAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6IHRzIDw8ICJ0aW1lIjsgYnJlYWs7CisgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6IHRzIDw8ICJmcmVxdWVuY3kiOyBicmVhazsK
KyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOiB0cyA8PCAib3RoZXIiOyBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gdHM7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Ly8gRklYTUU6IEZpbmQgYSB3YXkgdG8gdW5pZnkgdGhpcyB3aXRoIENTU1ByaW1pdGl2ZVZhbHVl
OjpVbml0Q2F0ZWdvcnk/CitlbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0ZWdvcnkgOiB1aW50OF90
IHsKKyAgICBOdW1iZXIsCisgICAgTGVuZ3RoLAorICAgIFBlcmNlbnQsCisgICAgUGVyY2VudE51
bWJlciwKKyAgICBQZXJjZW50TGVuZ3RoLAorICAgIEFuZ2xlLAorICAgIFRpbWUsCisgICAgRnJl
cXVlbmN5LAorICAgIE90aGVyCit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mLCBDYWxjdWxhdGlvbkNhdGVnb3J5KTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuY3BwCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2Fs
Y3VsYXRpb25WYWx1ZS5oIgorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5j
bHVkZSA8bGltaXRzPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ2FsY3VsYXRpb25WYWx1ZTo6
Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHZhbHVlLCBWYWx1ZVJh
bmdlIHJhbmdlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbGN1bGF0aW9uVmFsdWUo
V1RGTW92ZSh2YWx1ZSksIHJhbmdlKSk7Cit9CisKK0NhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0
aW9uVmFsdWUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lvbiwg
VmFsdWVSYW5nZSByYW5nZSkKKyAgICA6IG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24p
KQorICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUocmFuZ2UgPT0gVmFsdWVSYW5nZTo6
Tm9uTmVnYXRpdmUpCit7Cit9CisKK0NhbGN1bGF0aW9uVmFsdWU6On5DYWxjdWxhdGlvblZhbHVl
KCkgPSBkZWZhdWx0OworCitmbG9hdCBDYWxjdWxhdGlvblZhbHVlOjpldmFsdWF0ZShmbG9hdCBt
YXhWYWx1ZSkgY29uc3QKK3sKKyAgICBmbG9hdCByZXN1bHQgPSBtX2V4cHJlc3Npb24tPmV2YWx1
YXRlKG1heFZhbHVlKTsKKyAgICAvLyBGSVhNRTogVGhpcyB0ZXN0IHdhcyBvcmlnaW5hbGx5IG5l
ZWRlZCB3aGVuIHdlIGRpZCBub3QgZGV0ZWN0IGRpdmlzaW9uIGJ5IHplcm8gYXQgcGFyc2UgdGlt
ZS4KKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBub3cgdW5uZWVkZWQgY29kZSBh
bmQgY2FuIGJlIHJlbW92ZWQuCisgICAgaWYgKHN0ZDo6aXNuYW4ocmVzdWx0KSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgcmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYmIHJlc3Vs
dCA8IDAgPyAwIDogcmVzdWx0OworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY3VsYXRp
b25WYWx1ZSYgYSwgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYikKK3sKKyAgICByZXR1cm4gYS5l
eHByZXNzaW9uKCkgPT0gYi5leHByZXNzaW9uKCk7Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9y
PDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlKQoreworICAg
IHJldHVybiB0cyA8PCAiY2FsYygiIDw8IHZhbHVlLmV4cHJlc3Npb24oKSA8PCAiKSI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY3VsYXRpb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1l
dDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkxlbmd0aC5oIgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25O
b2RlOworCitjbGFzcyBDYWxjdWxhdGlvblZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FsY3Vs
YXRpb25WYWx1ZT4geworcHVibGljOgorICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8Q2Fs
Y3VsYXRpb25WYWx1ZT4gY3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+
LCBWYWx1ZVJhbmdlKTsKKyAgICBXRUJDT1JFX0VYUE9SVCB+Q2FsY3VsYXRpb25WYWx1ZSgpOwor
CisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBz
aG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoKSBjb25zdCB7IHJldHVybiBtX3Nob3VsZENsYW1wVG9O
b25OZWdhdGl2ZTsgfQorICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbigp
IGNvbnN0IHsgcmV0dXJuICptX2V4cHJlc3Npb247IH0KKworcHJpdmF0ZToKKyAgICBDYWxjdWxh
dGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdl
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fZXhwcmVzc2lv
bjsKKyAgICBib29sIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlOworfTsKKworYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJik7
CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IENhbGN1bGF0aW9u
VmFsdWUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAkocmV2aXNpb24gMjc4MjM5KQorKysg
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3LDcgKzI3LDcgQEAKICNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQmFzaWNTaGFw
ZUZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWUu
aCIKICNpbmNsdWRlICJDU1NGb250RmVhdHVyZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFN0
eWxlVmFsdWUuaCIKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJD
U1NSZWZsZWN0VmFsdWUuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2lu
Y2x1ZGUgIkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFNlbGVjdGlv
blZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiR3JpZFBvc2l0
aW9uc1Jlc29sdmVyLmgiCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNzgyNDApCisrKyBUb29scy9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAyMS0wNS0yOSAgU2FtIFdlaW5pZyAgPHdlaW5p
Z0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQgZmlsZXMgaW50byAx
LWNsYXNzIHBlciBmaWxlIHN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ2FsY3VsYXRp
b25WYWx1ZS5jcHA6CisgICAgICAgIFVwZGF0ZSB0ZXN0IHRvIGluY2x1ZGUgYWRkaXRvbmFsIGhl
YWRlciBub3cgbmVlZGVkLgorCiAyMDIxLTA1LTI4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlz
dGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUHVueWNvZGUgZW5jb2RlIFUrMEJFNiB3aGVu
IG5vdCBpbiBjb250ZXh0IG9mIG90aGVyIFRhbWlsIGNoYXJhY3RlcnMKSW5kZXg6IFRvb2xzL1Rl
c3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DYWxjdWxhdGlvblZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ2FsY3VsYXRpb25WYWx1ZS5j
cHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29y
ZS9DYWxjdWxhdGlvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNSw2ICsyNSw3IEBACiAKICNp
bmNsdWRlICJjb25maWcuaCIKIAorI2luY2x1ZGUgPFdlYkNvcmUvQ2FsY0V4cHJlc3Npb25Ob2Rl
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9DYWxjdWxhdGlvblZhbHVlLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZlB0ci5oPgogCg==
</data>
<flag name="commit-queue"
          id="451461"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430108</attachid>
            <date>2021-05-29 13:46:18 -0700</date>
            <delta_ts>2021-05-29 15:37:49 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226421-20210529134617.patch</filename>
            <type>text/plain</type>
            <size>328905</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAyMS0wNS0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQg
ZmlsZXMgaW50byAxLWNsYXNzIHBlciBmaWxlIHN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQncyBib3RoZXJlZCBtZSBmb3IgYSB3aGls
ZSB0aGF0IHRoZSBjYWxjIHJlbGF0ZWQgY2xhc3NlcyAoYm90aCBpbiBjc3MvCisgICAgICAgIGFu
ZCBpbiBwbGF0Zm9ybS8pIHdlcmUgYnVuZGxlZCBhbGwgaW4gdHdvIGJpZyBmaWxlcy4gVGhpcyBj
aGFuZ2Ugc3BsaXRzCisgICAgICAgIHRoZW0gYWxsIG91dCBpbnRvIHRoZWlyIG93biBoZWFkZXIg
YW5kIGltcGxlbWVudGF0aW9uIGZpbGVzIHRoYXQgbWF0Y2gKKyAgICAgICAgdGhlaXIgbmFtZSwg
YW5kIHB1dHMgdGhlbSBpbiBuZXcgY2FsYy8gc3ViZGlyZWN0b3JpZXMgKGNzcy9jYWxjLy4uLiBh
bmQKKyAgICAgICAgcGxhdGZvcm0vY2FsYy8uLi4pLiBUaGlzIHNob3VsZCBob3BlZnVsbHkgbWFr
ZSB0aGUgbW9kaWZpY2F0aW9ucyBJIG5lZWQKKyAgICAgICAgdG8gbWFrZSB0byBjYWxjKCkgdG8g
c3VwcG9ydCByZWxhdGl2ZSBjb2xvciBzeW50YXggYSBsaXR0bGUgZWFzaWVyLgorCisgICAgICAg
ICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlvblZhbHVl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAg
ICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlTWFwcGluZ3MuaDoKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuY3BwOgorICAgICAgICAq
IGNzcy9jYWxjOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBw
aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjYWxjVW5pdENhdGVnb3J5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFzRG91YmxlVmFsdWUpOgorICAgICAgICAqIGNzcy9jYWxjL0NT
U0NhbGNDYXRlZ29yeU1hcHBpbmcuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0eVByaW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpwcmV0dHlQcmludE5vZGVzKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lv
bk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6
OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6
OmNhdGVnb3J5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9k
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6b3BlcmF0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjaGVja0RlcHRoQW5kSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1Byb2R1Y3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNT
dW0pOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjSW52
ZXJ0Tm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0ludmVydE5vZGU6
OmNyZWF0ZUNhbGNFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNJ
bnZlcnROb2RlOjpkb3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
SW52ZXJ0Tm9kZTo6Y29tcHV0ZUxlbmd0aFB4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbGNJbnZlcnROb2RlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxj
SW52ZXJ0Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9k
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0
ZUNhbGNFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNOZWdhdGVO
b2RlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdvcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2F0ZWdvcnlGb3JJbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZWRUeXBl
Rm9yTWluT3JNYXhPckNsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2FtZVBhaXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c29ydGluZ0NhdGVnb3J5Rm9yVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpzb3J0aW5nQ2F0ZWdvcnkpOgorICAgICAgICAoV2ViQ29yZTo6cHJpbWl0aXZlVHlwZUZvckNv
bWJpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnNpb25Ub0FkZFZhbHVlc1dpdGhU
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvbkZyb21PcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29tYmluZUFsbENo
aWxkcmVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
b21iaW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6
OnNpbXBsaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1w
bGlmeVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
c2ltcGxpZnlOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpw
cmltaXRpdmVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25O
b2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpldmFsdWF0ZU9wZXJhdG9yKToKKyAgICAg
ICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBj
c3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpwcmltaXRpdmVUeXBl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OkNT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6aXNOdW1lcmljVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOZWdhdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpuZWdhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aW52ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb252ZXJ0VG9Vbml0VHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmljYWxpemVVbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVu
ZGVuY2llcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNaZXJvIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmVxdWFscyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkdW1w
IGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmg6
IEFkZGVkLgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxlbmRIYWxmKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNTUyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNhdGVnb3J5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6cHJpbWl0aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjb2xs
ZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6ZXF1YWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
VmFsdWU6OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
YWxjOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGg6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fs
Y0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxj
RXhwcmVzc2lvbkludmVyc2lvbjo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkludmVyc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTGVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkxl
bmd0aDo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25M
ZW5ndGg6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Np
b25MZW5ndGg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25MZW5ndGguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkxl
bmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpldmFsdWF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTmVnYXRpb246
OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICog
cGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZTo6
dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGU6OkNhbGNF
eHByZXNzaW9uTm9kZSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51
bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OdW1iZXI6
OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTnVtYmVy
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTnVtYmVyOjpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
TnVtYmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OdW1iZXI6
OkNhbGNFeHByZXNzaW9uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpldmFsdWF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
T3BlcmF0b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNh
dGVnb3J5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fs
Y3VsYXRpb25WYWx1ZTo6Q2FsY3VsYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWxj
dWxhdGlvblZhbHVlOjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGN1
bGF0aW9uVmFsdWU6OnNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWxjdWxhdGlvblZhbHVlOjpleHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKwogMjAyMS0wNS0yOSAgQWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBEbyBub3QgaW5jbHVkZSB2
ZXJ0aWNhbCBzcGFjaW5nIHdoZW4gcmVzb2x2aW5nIHBlcmNlbnQgaGVpZ2h0IGZvciB0YWJsZSBj
b250ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM0MSw3ICszNDEsNiBA
QCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBjcnlwdG8vU2Vy
aWFsaXplZENyeXB0b0tleVdyYXAuaAogCi0gICAgY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuaAog
ICAgIGNzcy9DU1NDb25kaXRpb25SdWxlLmgKICAgICBjc3MvQ1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZS5oCiAgICAgY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCkBAIC0zODksNiArMzg4LDggQEAgc2V0KFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIGNzcy9TdHlsZVNoZWV0Q29udGVu
dHMuaAogICAgIGNzcy9TdHlsZVNoZWV0TGlzdC5oCiAKKyAgICBjc3MvY2FsYy9DU1NDYWxjVmFs
dWUuaAorCiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXIuaAogICAgIGNzcy9wYXJzZXIvQ1NTUGFy
c2VyQ29udGV4dC5oCiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXJNb2RlLmgKQEAgLTEwMDMsNyAr
MTAwNCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAgIHBs
YXRmb3JtL0Fib3J0YWJsZVRhc2tRdWV1ZS5oCiAgICAgcGxhdGZvcm0vQ1BVTW9uaXRvci5oCi0g
ICAgcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5oCiAgICAgcGxhdGZvcm0vQ29sb3JDaG9vc2Vy
LmgKICAgICBwbGF0Zm9ybS9Db2xvckNob29zZXJDbGllbnQuaAogICAgIHBsYXRmb3JtL0NvbnRl
bnRGaWx0ZXJVbmJsb2NrSGFuZGxlci5oCkBAIC0xMTU2LDYgKzExNTYsOSBAQCBzZXQoV2ViQ29y
ZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAKICAgICBwbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvQXVkaW9EZXN0aW5hdGlvbkdTdHJlYW1lci5oCiAKKyAgICBwbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uTm9kZS5oCisgICAgcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmgKKwog
ICAgIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUVuY3J5cHRpb25TY2hlbWUuaAogICAgIHBs
YXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUZhY3RvcnkuaAogICAgIHBsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhL0NETUluc3RhbmNlLmgKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CShyZXZpc2lvbiAyNzgyMzkp
CisrKyBTb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDcg
KzcxOCw2IEBAIGNzcy9DU1NBc3BlY3RSYXRpb1ZhbHVlLmNwcAogY3NzL0NTU0Jhc2ljU2hhcGVz
LmNwcAogY3NzL0NTU0JvcmRlckltYWdlLmNwcAogY3NzL0NTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZS5jcHAKLWNzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmNwcAogY3NzL0NTU0NhbnZhc1ZhbHVlLmNw
cAogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKIGNzcy9DU1NDb25kaXRpb25S
dWxlLmNwcApAQCAtODI1LDYgKzgyNCwxNCBAQCBjc3MvU3R5bGVTaGVldC5jcHAKIGNzcy9TdHls
ZVNoZWV0Q29udGVudHMuY3BwCiBjc3MvU3R5bGVTaGVldExpc3QuY3BwCiBjc3MvVHJhbnNmb3Jt
RnVuY3Rpb25zLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHAKK2Nzcy9j
YWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlci5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmNwcAorY3NzL2NhbGMv
Q1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCitjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAK
K2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwCitjc3MvY2FsYy9DU1NDYWxj
VmFsdWUuY3BwCiBjc3MvcGFyc2VyL0NTU0F0UnVsZUlELmNwcAogY3NzL3BhcnNlci9DU1NEZWZl
cnJlZFBhcnNlci5jcHAKIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTgxNCw3ICsxODIx
LDYgQEAgcGFnZS9zY3JvbGxpbmcvU2Nyb2xsaW5nVHJlZU92ZXJmbG93U2NybwogcGFnZS9zY3Jv
bGxpbmcvU2Nyb2xsaW5nVHJlZVNjcm9sbGluZ05vZGUuY3BwCiBwYWdlL3Njcm9sbGluZy9TY3Jv
bGxpbmdUcmVlU2Nyb2xsaW5nTm9kZURlbGVnYXRlLmNwcAogcGFnZS9zY3JvbGxpbmcvVGhyZWFk
ZWRTY3JvbGxpbmdUcmVlLmNwcAotcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5jcHAKIHBsYXRm
b3JtL0NvbnRlbnRUeXBlLmNwcAogcGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwCiBwbGF0Zm9ybS9D
b250ZXh0TWVudUl0ZW0uY3BwCkBAIC0xOTI4LDYgKzE5MzQsMTYgQEAgcGxhdGZvcm0vYXVkaW8v
U3RlcmVvUGFubmVyLmNwcAogcGxhdGZvcm0vYXVkaW8vVXBTYW1wbGVyLmNwcAogcGxhdGZvcm0v
YXVkaW8vVmVjdG9yTWF0aC5jcHAKIHBsYXRmb3JtL2F1ZGlvL1plcm9Qb2xlLmNwcAorcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcAorcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbkludmVyc2lvbi5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5n
dGguY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24uY3BwCitwbGF0Zm9y
bS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Np
b25OdW1iZXIuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcAor
cGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9u
Q2F0ZWdvcnkuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuY3BwCiBwbGF0Zm9y
bS9lbmNyeXB0ZWRtZWRpYS9DRE1GYWN0b3J5LmNwcAogcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEv
Q0RNTG9nZ2luZy5jcHAKIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETVByaXZhdGUuY3BwCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTEzNTQsNyArMTM1NCw3IEBACiAJ
CTQ5OUIzRUM1MTI4Q0NDNDcwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OUIzRUMzMTI4Q0NDNDcwMEU3
MjZDMiAvKiBQbGF0Zm9ybUNBTGF5ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk0OTlCM0VENzEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NM
YXllckNBLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
OTlCM0VENTEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhpY3NMYXllckNBLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDk5QjNFREQxMjhEQjUwMjAw
RTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OUIzRURDMTI4REI1MDEwMEU3MjZDMiAvKiBQbGF0Zm9y
bUNBQW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKLQkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QUUyRDhE
MTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5
MjBBIC8qIENTU0NhbGNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5QUUyRDk3
MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ5NTEzNEVFNUY5MDA3MjkyMEEgLyog
Q2FsY3VsYXRpb25WYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTQ5QUYyRDY5MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1v
bml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5
QUYyRDY4MTQ0MzVEMDUwMDE2QTc4NCAvKiBEaXNwbGF5UmVmcmVzaE1vbml0b3IuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk0OUM3Qjk5NDEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlDN0I5ODExMDQyRDJEMzAwMDlENDQ3IC8qIEpTV2ViR0xC
dWZmZXIuaCAqLzsgfTsKQEAgLTQxOTAsNiArNDE5MCwyMiBAQAogCQlCQ0VGNDVGNjBFNjg3QjVD
MDAxQzEyODcgLyogSlNUZXh0TWV0cmljcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gQkNFRjQ1RjQwRTY4N0I1QzAwMUMxMjg3IC8qIEpTVGV4dE1ldHJp
Y3MuaCAqLzsgfTsKIAkJQkNFRjg2OUYwRTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1l
TWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNF
Rjg2OUUwRTg0NEU5RDAwQTg1Q0Q1IC8qIFNjcm9sbGJhclRoZW1lTWFjLm1tICovOyB9OwogCQlC
Q0VGRTFFQjBEQ0E1RjY0MDA3MzkyMTkgLyogSlNYU0xUUHJvY2Vzc29yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VGRTFFOTBEQ0E1RjY0MDA3Mzky
MTkgLyogSlNYU0xUUHJvY2Vzc29yLmggKi87IH07CisJCUJDRjE2NDUxMjY2MjlGQzcwMDAyRjdF
RiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDRGMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NTUyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRjE2NDUzMjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlLmggKi87IH07CisJCUJDRjE2NDU5MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxj
TmVnYXRlTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gQkNGMTY0NTcyNjYyQTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmggKi87IH07
CisJCUJDRjE2NDVEMjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NUIyNjYyQTIz
NzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmggKi87IH07CisJCUJDRjE2NDYxMjY2MkEy
OEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NUYyNjYyQTI4RDAwMDJGN0VGIC8qIENT
U0NhbGNPcGVyYXRpb25Ob2RlLmggKi87IH07CisJCUJDRjE2NDY1MjY2MkEzMUEwMDAyRjdFRiAv
KiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDYzMjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxj
RXhwcmVzc2lvbk5vZGVQYXJzZXIuaCAqLzsgfTsKKwkJQkNGMTY0NkEyNjYyQTkzNDAwMDJGN0VG
IC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDY4MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0
ZWdvcnlNYXBwaW5nLmggKi87IH07CisJCUJDRjE2NDZFMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxj
dWxhdGlvbkNhdGVnb3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0YxNjQ2RDI2NjJBQTUwMDAwMkY3RUYgLyogQ2FsY3VsYXRpb25DYXRlZ29yeS5o
ICovOyB9OworCQlCQ0YxNjQ3MjI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ3
MDI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJQkNGMTY0NzYyNjYyQUIzNjAwMDJG
N0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ3NDI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJl
c3Npb25OdW1iZXIuaCAqLzsgfTsKKwkJQkNGMTY0N0EyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNF
eHByZXNzaW9uTGVuZ3RoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0YxNjQ3ODI2NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGgu
aCAqLzsgfTsKKwkJQkNGMTY0N0UyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVn
YXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
RjE2NDdDMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmggKi87IH07
CisJCUJDRjE2NDgyMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0ODAy
NjYyQUM1MTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmggKi87IH07CisJCUJD
RjE2NDg2MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0ODQyNjYyQUNB
MzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmggKi87IH07CisJCUJDRjE2NDhB
MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ4ODI2NjJBRDUyMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oICovOyB9OworCQlCQ0YxNjQ4RTI2
NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ4QzI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09w
ZXJhdG9yLmggKi87IH07CiAJCUJDRjdFNDkxMTM3Q0Q3QzcwMDFEREFFNyAvKiBBZGp1c3RWaWV3
U2l6ZU9yTm90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBCQ0Y0OENFNjEzNzBEMTE0MDA0RTg3RDYgLyogQWRqdXN0Vmlld1NpemVPck5vdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDRkE5MzA4MTAz
MzMxOTMwMDdCMjVEMSAvKiBSZW5kZXJPdmVyZmxvdy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGQTkzMDcxMDMzMzE5MzAwN0IyNUQxIC8qIFJlbmRl
ck92ZXJmbG93LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJQkNGQjJFNUUwOTc5RTQ2NDAwQkE3MDNEIC8qIENhY2hlZFJlc291cmNlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZCMkU1RDA5
NzlFNDY0MDBCQTcwM0QgLyogQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtODQ0Myw4ICs4NDU5LDggQEAKIAkJ
NDk5QjNFRDQxMjhDRDMxNDAwRTcyNkMyIC8qIEdyYXBoaWNzTGF5ZXJDQS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHcmFwaGljc0xheWVyQ0EuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0OTlCM0VENTEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhp
Y3NMYXllckNBLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoaWNzTGF5
ZXJDQS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OTlCM0VEQzEyOERCNTAxMDBF
NzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBQbGF0Zm9ybUNBQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
Ci0JCTQ5QUUyRDhDMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGN1bGF0aW9uVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk0OUFFMkQ4RDEzNEVFNTBDMDA3Mjky
MEEgLyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDU1NDYWxjdWxhdGlvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTQ5QUUyRDhDMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNDlBRTJEOTQxMzRFRTVGOTAwNzI5MjBBIC8qIENh
bGN1bGF0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q2FsY3VsYXRpb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5QUUy
RDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGN1bGF0aW9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlSZWZyZXNoTW9u
aXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEaXNwbGF5UmVmcmVzaE1v
bml0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0NTIxLDYgKzE0NTM3LDM4
IEBACiAJCUJDRUZFMURDMERDQTVDRkQwMDczOTIxOSAvKiBYU0xUUHJvY2Vzc29yLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBYU0xUUHJvY2Vzc29yLmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQkNFRkUxRTgwRENBNUY2NDAwNzM5MjE5IC8qIEpTWFNMVFByb2Nlc3Nvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1hTTFRQcm9jZXNzb3Iu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VGRTFFOTBEQ0E1RjY0MDA3Mzky
MTkgLyogSlNYU0xUUHJvY2Vzc29yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEpTWFNMVFByb2Nlc3Nvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ0
RjI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0NhbGNFeHByZXNzaW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0YxNjQ1MDI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDUzMjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTQyNjYyQTEyMjAwMDJG
N0VGIC8qIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDRjE2NDU3MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRlTm9kZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBDU1NDYWxjTmVnYXRlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQ0YxNjQ1ODI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ1QjI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5v
ZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY0ludmVydE5vZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NUMyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnRO
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGNJbnZlcnROb2RlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NUYyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0Nh
bGNPcGVyYXRpb25Ob2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDYwMjY2MkEyOEQwMDAyRjdFRiAv
KiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDYzMjY2
MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRjE2NDY0MjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGVQYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFy
c2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjgyNjYyQTkzNDAw
MDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2Fs
Y0NhdGVnb3J5TWFwcGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2
OTI2NjJBOTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQkNGMTY0NkQyNjYyQUE1MDAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0ZWdv
cnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY3VsYXRpb25DYXRlZ29yeS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0YxNjQ2RjI2NjJBQTZGMDAwMkY3RUYgLyogQ2FsY3VsYXRpb25D
YXRlZ29yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjdWxhdGlvbkNhdGVnb3J5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzAyNjYyQUFDMzAwMDJGN0VGIC8q
IENhbGNFeHByZXNzaW9uTm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk5vZGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzEyNjYyQUFDMzAwMDJGN0VG
IC8qIENhbGNFeHByZXNzaW9uTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjRXhwcmVz
c2lvbk5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3NDI2NjJB
QjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2Fs
Y0V4cHJlc3Npb25OdW1iZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0
NzUyNjYyQUIzNjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbGNFeHByZXNzaW9uTnVtYmVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQkNGMTY0NzgyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3Ro
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDRjE2NDc5MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bkxlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjRXhwcmVzc2lvbkxlbmd0aC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDdDMjY2MkFCRTcwMDAyRjdFRiAv
KiBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9u
TmVnYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0N0QyNjYyQUJF
NzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDRjE2NDgwMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0YxNjQ4MTI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25JbnZlcnNpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25JbnZlcnNp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4NDI2NjJBQ0EzMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0
ODUyNjYyQUNBMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODgyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4OTI2NjJBRDUyMDAwMkY3RUYg
LyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
QkNGMTY0OEMyNjYyQUREODAwMDJGN0VGIC8qIENhbGNPcGVyYXRvci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDYWxjT3BlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0OEQy
NjYyQUREODAwMDJGN0VGIC8qIENhbGNPcGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
YWxjT3BlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0YzNEEzNjEx
QTIzMUNEMDBDNzE4MDQgLyogTmFtZWROb2RlTWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE5hbWVkTm9kZU1hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUJDRjQ4Q0U2MTM3MEQxMTQwMDRFODdENiAvKiBBZGp1c3RWaWV3U2l6ZU9yTm90Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFkanVzdFZpZXdTaXplT3JOb3QuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGQTkzMDcxMDMzMzE5MzAwN0IyNUQxIC8q
IFJlbmRlck92ZXJmbG93LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlbmRl
ck92ZXJmbG93Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNzg5MSwxMSArMjc5
MzksNjIgQEAKIAkJCW5hbWUgPSBDb25zdHJ1Y3RvcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwogCQl9OworCQlCQ0YxNjQ0RDI2NjI5RjlBMDAwMkY3RUYgLyogY2FsYyAqLyA9IHsKKwkJ
CWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJQkNGMTY0NjkyNjYyQTkzNDAw
MDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuY3BwICovLAorCQkJCUJDRjE2NDY4MjY2
MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmggKi8sCisJCQkJQkNGMTY0
NTAyNjYyOUZDNzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAgKi8sCisJCQkJ
QkNGMTY0NEYyNjYyOUZDNzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oICovLAor
CQkJCUJDRjE2NDY0MjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXIuY3BwICovLAorCQkJCUJDRjE2NDYzMjY2MkEzMUEwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXIuaCAqLywKKwkJCQlCQ0YxNjQ1QzI2NjJBMjM3MDAwMkY3RUYgLyogQ1NT
Q2FsY0ludmVydE5vZGUuY3BwICovLAorCQkJCUJDRjE2NDVCMjY2MkEyMzcwMDAyRjdFRiAvKiBD
U1NDYWxjSW52ZXJ0Tm9kZS5oICovLAorCQkJCUJDRjE2NDU4MjY2MkExRTkwMDAyRjdFRiAvKiBD
U1NDYWxjTmVnYXRlTm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NTcyNjYyQTFFOTAwMDJGN0VGIC8q
IENTU0NhbGNOZWdhdGVOb2RlLmggKi8sCisJCQkJQkNGMTY0NjAyNjYyQTI4RDAwMDJGN0VGIC8q
IENTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcCAqLywKKwkJCQlCQ0YxNjQ1RjI2NjJBMjhEMDAwMkY3
RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCAqLywKKwkJCQlCQ0YxNjQ1NDI2NjJBMTIyMDAw
MkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NTMy
NjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCAqLywKKwkJCQk0
OUFFMkQ4QzEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmNwcCAqLywKKwkJCQk0OUFF
MkQ4RDEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmggKi8sCisJCQkpOworCQkJcGF0
aCA9IGNhbGM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQlCQ0YxNjQ2QzI2
NjJBQTBBMDAwMkY3RUYgLyogY2FsYyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hp
bGRyZW4gPSAoCisJCQkJQkNGMTY0ODkyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGguY3BwICovLAorCQkJCUJDRjE2NDg4MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmggKi8sCisJCQkJQkNGMTY0ODEyNjYyQUM1MTAwMDJGN0VG
IC8qIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcCAqLywKKwkJCQlCQ0YxNjQ4MDI2NjJBQzUx
MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCAqLywKKwkJCQlCQ0YxNjQ3OTI2
NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguY3BwICovLAorCQkJCUJDRjE2
NDc4MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5oICovLAorCQkJCUJD
RjE2NDdEMjY2MkFCRTcwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcCAqLywK
KwkJCQlCQ0YxNjQ3QzI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5o
ICovLAorCQkJCUJDRjE2NDcxMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5vZGUu
Y3BwICovLAorCQkJCUJDRjE2NDcwMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5v
ZGUuaCAqLywKKwkJCQlCQ0YxNjQ3NTI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25O
dW1iZXIuY3BwICovLAorCQkJCUJDRjE2NDc0MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVz
c2lvbk51bWJlci5oICovLAorCQkJCUJDRjE2NDg1MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhw
cmVzc2lvbk9wZXJhdGlvbi5jcHAgKi8sCisJCQkJQkNGMTY0ODQyNjYyQUNBMzAwMDJGN0VGIC8q
IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmggKi8sCisJCQkJQkNGMTY0OEQyNjYyQUREODAwMDJG
N0VGIC8qIENhbGNPcGVyYXRvci5jcHAgKi8sCisJCQkJQkNGMTY0OEMyNjYyQUREODAwMDJGN0VG
IC8qIENhbGNPcGVyYXRvci5oICovLAorCQkJCUJDRjE2NDZGMjY2MkFBNkYwMDAyRjdFRiAvKiBD
YWxjdWxhdGlvbkNhdGVnb3J5LmNwcCAqLywKKwkJCQlCQ0YxNjQ2RDI2NjJBQTUwMDAwMkY3RUYg
LyogQ2FsY3VsYXRpb25DYXRlZ29yeS5oICovLAorCQkJCTQ5QUUyRDk0MTM0RUU1RjkwMDcyOTIw
QSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAqLywKKwkJCQk0OUFFMkQ5NTEzNEVFNUY5MDA3Mjky
MEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovLAorCQkJKTsKKwkJCXBhdGggPSBjYWxjOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJQkNGMUE1QkEwOTc4MzIwOTAwNjFBMTIz
IC8qIHBsYXRmb3JtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
IAkJCQk0OUU5MTJBNDBFRkFDOEU2MDA5RDBDQUYgLyogYW5pbWF0aW9uICovLAogCQkJCUZEMzE2
MDQwMTJCMDI2QTMwMEMxQTM1OSAvKiBhdWRpbyAqLywKKwkJCQlCQ0YxNjQ2QzI2NjJBQTBBMDAw
MkY3RUYgLyogY2FsYyAqLywKIAkJCQkxQUU0MkY2NzBBQTRCOENCMDBDODYxMkQgLyogY2YgKi8s
CiAJCQkJQTVDOTc0Q0UxMTQ4NUZEQTAwNjZGMkFCIC8qIGNvY29hICovLAogCQkJCUNEOTRBNUNC
MUY3MUNCNDYwMEY1MjVDNSAvKiBlbmNyeXB0ZWRtZWRpYSAqLywKQEAgLTI3OTEyLDggKzI4MDEx
LDYgQEAKIAkJCQlCMkMzRDlFQzBEMDA2QzFEMDBFRjZGMjYgLyogdGV4dCAqLywKIAkJCQlFMUVF
OEI2QjI0MTJCMkE3MDBFNzk0RDYgLyogeHIgKi8sCiAJCQkJREZEQjkxMkNGOEU4OEE2REExQUQy
NjRGIC8qIEFib3J0YWJsZVRhc2tRdWV1ZS5oICovLAotCQkJCTQ5QUUyRDk0MTM0RUU1RjkwMDcy
OTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmNwcCAqLywKLQkJCQk0OUFFMkQ5NTEzNEVFNUY5MDA3
MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5oICovLAogCQkJCUMzMzBBMjIxMTNFQzE5NkIwMDAw
QjQ1QiAvKiBDb2xvckNob29zZXIuaCAqLywKIAkJCQlDMzdDREVCQzE0OUVGMjAzMDA0MjA5MEQg
LyogQ29sb3JDaG9vc2VyQ2xpZW50LmggKi8sCiAJCQkJQkNDOENGQ0EwOTg2Q0QyNDAwMTQwQkYy
IC8qIENvbG9yRGF0YS5ncGVyZiAqLywKQEAgLTI5NzA3LDYgKzI5ODA0LDcgQEAKIAkJRjUyM0Qx
ODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJQkNGMTY0NEQyNjYyOUY5QTAwMDJGN0VGIC8qIGNhbGMgKi8sCiAJ
CQkJOTQ2RDM3MjcxRDZDQjIyNTAwNzcwODRGIC8qIHBhcnNlciAqLywKIAkJCQk0QkFGRDBEQTIx
OTIxRUFEMDBDMEFCNjQgLyogdHlwZWRvbSAqLywKIAkJCQlGQkQ2QUY4NDE1RUYyMUQ0MDA4Qjcx
MTAgLyogQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAgKi8sCkBAIC0yOTcyMCw4ICsyOTgxOCw2IEBA
CiAJCQkJRTE2QTg0RjgxNEM4NUNDQzAwMjk3N0RGIC8qIENTU0JvcmRlckltYWdlLmggKi8sCiAJ
CQkJQkMyNzRCMzAxNDBFQkVEODAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5j
cHAgKi8sCiAJCQkJQkMyNzRCMkUxNDBFQkVCMjAwRUFERkE2IC8qIENTU0JvcmRlckltYWdlU2xp
Y2VWYWx1ZS5oICovLAotCQkJCTQ5QUUyRDhDMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxh
dGlvblZhbHVlLmNwcCAqLywKLQkJCQk0OUFFMkQ4RDEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5oICovLAogCQkJCUJDNjA0QTQyMERCNTYzNEUwMDIwNDczOSAvKiBDU1ND
YW52YXNWYWx1ZS5jcHAgKi8sCiAJCQkJQkM2MDQ5Q0IwREI1NjBDMjAwMjA0NzM5IC8qIENTU0Nh
bnZhc1ZhbHVlLmggKi8sCiAJCQkJQkNFQTQ3N0MwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1
dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgKi8sCkBAIC0zMTgxMSw2ICszMTkwNywxNSBAQAogCQkJ
CTQxRDEyOUQzMUYzRDBGMTYwMEQxNUU0NyAvKiBDYWNoZVN0b3JhZ2VDb25uZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk0MUQxMjlENTFGM0QwRjY5MDBEMTVFNDcgLyogQ2FjaGVTdG9yYWdl
UHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0M0FGOEU3MUFDNUI3RUMwMENBNzE3RSAv
KiBDYWNoZVZhbGlkYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDhBMjY2MkFENTIw
MDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKKwkJ
CQlCQ0YxNjQ4MjI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCBp
biBIZWFkZXJzICovLAorCQkJCUJDRjE2NDdBMjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVz
c2lvbkxlbmd0aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0N0UyNjYyQUJFNzAwMDJGN0VG
IC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDcy
MjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUJDRjE2NDc2MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0ODYyNjYyQUNBMzAwMDJGN0VGIC8qIENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ4RTI2NjJBREQ4MDAwMkY3
RUYgLyogQ2FsY09wZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ2RTI2NjJBQTUw
MDAwMkY3RUYgLyogQ2FsY3VsYXRpb25DYXRlZ29yeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlB
RTJEOTcxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTdDMUU4RDAxMUVEMEMyREEwMEIxRDk4MyAvKiBDYWxsYmFja1Jlc3VsdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRUZDQzZDOEYyMEZFOTE0NDAwQTIzMjFCIC8qIENhbnZhc0FjdGl2aXR5
UmVjb3JkLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMDgxLDcgKzMyMTg2LDE0IEBACiAJCQkJRkJE
NkFGODgxNUVGMjVDOTAwOEI3MTEwIC8qIENTU0Jhc2ljU2hhcGVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFMTZBODRGQTE0Qzg1Q0NDMDAyOTc3REYgLyogQ1NTQm9yZGVySW1hZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMjc0QjJGMTQwRUJFQjIwMEVBREZBNiAvKiBDU1NCb3JkZXJJbWFnZVNs
aWNlVmFsdWUuaCBpbiBIZWFkZXJzICovLAotCQkJCTQ5QUUyRDhGMTM0RUU1MEMwMDcyOTIwQSAv
KiBDU1NDYWxjdWxhdGlvblZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ2QTI2NjJB
OTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJQkNGMTY0NTEyNjYyOUZDNzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NjUyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NUQyNjYyQTIzNzAw
MDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ1
OTI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCUJDRjE2NDYxMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NTUyNjYyQTEyMjAwMDJGN0VGIC8qIENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTQ5QUUyRDhGMTM0RUU1MEMwMDcy
OTIwQSAvKiBDU1NDYWxjVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDNjA0OUNDMERCNTYw
QzIwMDIwNDczOSAvKiBDU1NDYW52YXNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNFQTQ3
OTAwOTdDQUFDODAwOTRDOUU0IC8qIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTMwQUFDOUEyNTBFQjg0OTAwMTNEQTlGIC8qIENTU0NvbmRpdGlvblJ1
bGUuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxh
dGlvblZhbHVlLmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwCShub25leGlzdGVudCkKQEAgLTEsMjE5MCArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVl
LmgiCi0KLSNpbmNsdWRlICJDU1NQYXJzZXIuaCIKLSNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJh
bmdlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1zdGF0aWMgY29uc3QgaW50IG1heEV4cHJlc3Np
b25EZXB0aCA9IDEwMDsKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotY2xhc3MgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTsKLWNsYXNzIENTU0NhbGNPcGVyYXRpb25Ob2RlOwotY2xhc3MgQ1NTQ2Fs
Y05lZ2F0ZU5vZGU7Ci1jbGFzcyBDU1NDYWxjSW52ZXJ0Tm9kZTsKLX0KLQotU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNzc0Nh
bGNQcmltaXRpdmVWYWx1ZSkKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJ
T05fTk9ERShDU1NDYWxjT3BlcmF0aW9uTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY09wZXJhdGlvbikKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShDU1NDYWxjTmVnYXRlTm9kZSwgdHlwZSgpID09
IFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY05lZ2F0ZSkKLVNQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShDU1NDYWxjSW52ZXJ0
Tm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6Q3Nz
Q2FsY0ludmVydCkKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYsIGNv
bnN0IFJlbmRlclN0eWxlJik7Ci1zdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4g
Y3JlYXRlQ1NTKGNvbnN0IExlbmd0aCYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0KLXN0YXRpYyBU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmIG5vZGUpCi17Ci0gICAgbm9kZS5kdW1wKHRzKTsKLSAgICByZXR1cm4gdHM7Ci19
Ci0KLXN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGNVbml0Q2F0ZWdvcnkoQ1NTVW5pdFR5
cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOwot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0VYUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0NNOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfSU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19QQzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUToKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhT
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aDsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICAg
ICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ7Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0RFRzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19HUkFEOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19UVVJOOgot
ICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU7Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX01TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgotICAgICAgICBy
ZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfSFo6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0tIWjoKLSAgICAgICAgcmV0dXJuIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgfQotfQotCi1zdGF0aWMgQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oQ1NTVW5pdFR5
cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfTlVNQkVSOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOwot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Q006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1BDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19QRVJDRU5UQUdFOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dDsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpB
bmdsZTsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1M6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOwotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19IWjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfS0ha
OgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OwotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VYUzoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19SRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19DSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1
cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgfQotfQotCi1zdGF0aWMgQ1NTVW5p
dFR5cGUgY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KENhbGN1bGF0aW9u
Q2F0ZWdvcnkgY2F0ZWdvcnkpCi17Ci0gICAgc3dpdGNoIChjYXRlZ29yeSkgewotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19OVU1C
RVI7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6IHJldHVybiBDU1NVbml0
VHlwZTo6Q1NTX1BYOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDogcmV0
dXJuIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRTsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OkFuZ2xlOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19ERUc7Ci0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpUaW1lOiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19NUzsKLSAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTogcmV0dXJuIENTU1VuaXRUeXBlOjpD
U1NfSFo7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpQZXJjZW50TGVuZ3RoOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047
Ci19Ci0KLXN0YXRpYyBib29sIGhhc0RvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHR5cGUpCi17Ci0g
ICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKLSAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0NIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKLSAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfUFg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
SU46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19QQzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01TOgot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19I
WjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfS0haOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19ESU1FTlNJT046Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19WSDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
RFBQWDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFBJOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19EUENNOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19GUjoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU1RS
SU5HOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19GT05UX0ZBTUlMWToKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfVVJJOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JREVOVDoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQVRUUjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
Q09VTlRFUjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVDVDoKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfUkdCQ09MT1I6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BBSVI6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1VOSUNPREVfUkFOR0U6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0NPVU5URVJfTkFNRToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU0hBUEU6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1FVSVJLWV9FTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NBTEM6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX05VTUJFUjoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTEVOR1RIOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19QUk9QRVJUWV9JRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
VkFMVUVfSUQ6Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotc3RhdGljIENTU1ZhbHVlSUQgZnVu
Y3Rpb25Gcm9tT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsK
LSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0
cmFjdDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6Ci0gICAgY2FzZSBDYWxjT3Bl
cmF0b3I6OkRpdmlkZToKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2FsYzsKLSAgICBjYXNlIENh
bGNPcGVyYXRvcjo6TWluOgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVNaW47Ci0gICAgY2FzZSBD
YWxjT3BlcmF0b3I6Ok1heDoKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlTWF4OwotICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpDbGFtcDoKLSAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2xhbXA7Ci0gICAg
fQotICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0
aWMgU3RyaW5nIHByZXR0eVByaW50Tm9kZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5v
ZGUpCi17Ci0gICAgVGV4dFN0cmVhbSBtdWx0aWxpbmVTdHJlYW07Ci0gICAgbXVsdGlsaW5lU3Ry
ZWFtIDw8IG5vZGU7Ci0gICAgcmV0dXJuIG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Ci19Ci0K
LXN0YXRpYyBTdHJpbmcgcHJldHR5UHJpbnROb2Rlcyhjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4+JiBub2RlcykKLXsKLSAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVh
bTsKLSAgICBtdWx0aWxpbmVTdHJlYW0gPDwgbm9kZXM7Ci0gICAgcmV0dXJuIG11bHRpbGluZVN0
cmVhbS5yZWxlYXNlKCk7Ci19Ci0jZW5kaWYKLQotY2xhc3MgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4gY3JlYXRlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUo
V1RGTW92ZSh2YWx1ZSkpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+IGNyZWF0ZShkb3VibGUgdmFsdWUsIENTU1VuaXRUeXBlIHR5cGUpCi0g
ICAgewotICAgICAgICBpZiAoIXN0ZDo6aXNmaW5pdGUodmFsdWUpKQotICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB0eXBlKSkpOwotICAg
IH0KLQotICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX3ZhbHVlLT5jc3NUZXh0KCk7Ci0gICAgfQotCi0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0
aXZlVHlwZSgpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICByZXR1cm4gbV92YWx1ZS0+cHJp
bWl0aXZlVHlwZSgpOwotICAgIH0KLQotICAgIGJvb2wgaXNOdW1lcmljVmFsdWUoKSBjb25zdDsK
LSAgICBib29sIGlzTmVnYXRpdmUoKSBjb25zdDsKLQotICAgIHZvaWQgbmVnYXRlKCk7Ci0gICAg
dm9pZCBpbnZlcnQoKTsKLQotICAgIGVudW0gY2xhc3MgVW5pdENvbnZlcnNpb24gewotICAgICAg
ICBJbnZhbGlkLAotICAgICAgICBQcmVzZXJ2ZSwKLSAgICAgICAgQ2Fub25pY2FsaXplCi0gICAg
fTsKLSAgICB2b2lkIGFkZChjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiwgVW5pdENv
bnZlcnNpb24gPSBVbml0Q29udmVyc2lvbjo6UHJlc2VydmUpOwotICAgIHZvaWQgbXVsdGlwbHko
ZG91YmxlKTsKLQotICAgIHZvaWQgY29udmVydFRvVW5pdFR5cGUoQ1NTVW5pdFR5cGUpOwotICAg
IHZvaWQgY2Fub25pY2FsaXplVW5pdCgpOwotCi0gICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUm
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQotCi1wcml2YXRlOgotICAg
IGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiAhbV92YWx1
ZS0+ZG91YmxlVmFsdWUoKTsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCBmaW5hbDsKLSAgICBUeXBlIHR5cGUoKSBjb25z
dCBmaW5hbCB7IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFsdWU7IH0KLQotICAgIHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUgZG91Ymxl
VmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOwotCi0gICAgZG91YmxlIGNvbXB1dGVMZW5n
dGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0gICAg
dm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1By
b3BlcnR5SUQ+JikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFs
OwotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKLQotcHJpdmF0ZToK
LSAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFJlZjxDU1NQcmltaXRpdmVW
YWx1ZT4mJiB2YWx1ZSkKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2FsY1VuaXRD
YXRlZ29yeSh2YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSkKLSAgICAgICAgLCBtX3ZhbHVlKFdURk1v
dmUodmFsdWUpKQotICAgIHsKLSAgICB9Ci0KLSAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG1f
dmFsdWU7Ci19OwotCi0vLyBGSVhNRTogVXNlIGNhbGNVbml0Q2F0ZWdvcnk/Ci1ib29sIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzTnVtZXJpY1ZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1
cm4gbV92YWx1ZS0+aXNMZW5ndGgoKSB8fCBtX3ZhbHVlLT5pc051bWJlcigpIHx8IG1fdmFsdWUt
PmlzUGVyY2VudGFnZSgpIHx8IG1fdmFsdWUtPmlzQW5nbGUoKQotICAgICAgICB8fCBtX3ZhbHVl
LT5pc1RpbWUoKSB8fCBtX3ZhbHVlLT5pc1Jlc29sdXRpb24oKSB8fCBtX3ZhbHVlLT5pc0ZsZXgo
KSB8fCBtX3ZhbHVlLT5pc0ZyZXF1ZW5jeSgpOwotfQotCi1ib29sIENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU6OmlzTmVnYXRpdmUoKSBjb25zdAotewotICAgIHJldHVybiBpc051bWVyaWNWYWx1
ZSgpICYmIG1fdmFsdWUtPmRvdWJsZVZhbHVlKCkgPCAwLjA7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZTo6bmVnYXRlKCkKLXsKLSAgICBBU1NFUlQoaXNOdW1lcmljVmFsdWUo
KSk7Ci0gICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMC4wIC0gbV92YWx1
ZS0+ZG91YmxlVmFsdWUoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKTsKLX0KLQotdm9pZCBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppbnZlcnQoKQotewotICAgIEFTU0VSVChpc051bWVy
aWNWYWx1ZSgpKTsKLSAgICBpZiAoIW1fdmFsdWUtPmRvdWJsZVZhbHVlKCkpCi0gICAgICAgIG1f
dmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91
YmxlPjo6aW5maW5pdHkoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKTsKLQotICAgIG1fdmFs
dWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDEuMCAvIG1fdmFsdWUtPmRvdWJsZVZhbHVl
KCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6YWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmIG5vZGUsIFVu
aXRDb252ZXJzaW9uIHVuaXRDb252ZXJzaW9uKQotewotICAgIGF1dG8gdmFsdWVUeXBlID0gbV92
YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOwotCi0gICAgc3dpdGNoICh1bml0Q29udmVyc2lvbikgewot
ICAgIGNhc2UgVW5pdENvbnZlcnNpb246OkludmFsaWQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2
ZToKLSAgICAgICAgQVNTRVJUKG5vZGUucHJpbWl0aXZlVHlwZSgpID09IHZhbHVlVHlwZSk7Ci0g
ICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG1fdmFsdWUtPmRvdWJs
ZVZhbHVlKCkgKyBub2RlLmRvdWJsZVZhbHVlKHZhbHVlVHlwZSksIHZhbHVlVHlwZSk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgVW5pdENvbnZlcnNpb246OkNhbm9uaWNhbGl6ZTogewotICAg
ICAgICBhdXRvIHZhbHVlQ2F0ZWdvcnkgPSB1bml0Q2F0ZWdvcnkodmFsdWVUeXBlKTsKLSAgICAg
ICAgLy8gRklYTUU6IEl0J3MgYXdrd2FyZCB0aGF0IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2F0ZWdv
cnkoKSBoYXMgc3BlY2lhbCBoYW5kbGluZyBmb3IgQ1NTVW5pdENhdGVnb3J5OjpQZXJjZW50Lgot
ICAgICAgICBhdXRvIGNhbm9uaWNhbFR5cGUgPSB2YWx1ZUNhdGVnb3J5ID09IENTU1VuaXRDYXRl
Z29yeTo6UGVyY2VudCA/IENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRSA6IGNhbm9uaWNhbFVu
aXRUeXBlRm9yQ2F0ZWdvcnkodmFsdWVDYXRlZ29yeSk7Ci0gICAgICAgIEFTU0VSVChjYW5vbmlj
YWxUeXBlICE9IENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTik7Ci0gICAgICAgIGRvdWJsZSBsZWZ0
VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKLSAgICAgICAgZG91
YmxlIHJpZ2h0VmFsdWUgPSBub2RlLmRvdWJsZVZhbHVlKGNhbm9uaWNhbFR5cGUpOwotICAgICAg
ICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsZWZ0VmFsdWUgKyByaWdodFZh
bHVlLCBjYW5vbmljYWxUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIH0KLX0KLQot
dm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjptdWx0aXBseShkb3VibGUgbXVsdGlwbGll
cikKLXsKLSAgICBhdXRvIHZhbHVlVHlwZSA9IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKLSAg
ICBBU1NFUlQoaGFzRG91YmxlVmFsdWUodmFsdWVUeXBlKSk7Ci0gICAgbV92YWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobV92YWx1ZS0+ZG91YmxlVmFsdWUodmFsdWVUeXBlKSAqIG11
bHRpcGxpZXIsIHZhbHVlVHlwZSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y29udmVydFRvVW5pdFR5cGUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpCi17Ci0gICAgQVNTRVJU
KHVuaXRDYXRlZ29yeSh1bml0VHlwZSkgPT0gdW5pdENhdGVnb3J5KG1fdmFsdWUtPnByaW1pdGl2
ZVR5cGUoKSkpOwotICAgIGRvdWJsZSBuZXdWYWx1ZSA9IG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVu
aXRUeXBlKTsKLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShuZXdWYWx1
ZSwgdW5pdFR5cGUpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNhbm9u
aWNhbGl6ZVVuaXQoKQotewotICAgIGF1dG8gY2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5
Rm9yQ29tYmluYXRpb24obV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKTsKLSAgICBpZiAoY2F0ZWdv
cnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGF1dG8gY2Fub25pY2FsVHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRl
Z29yeShjYXRlZ29yeSk7Ci0gICAgaWYgKGNhbm9uaWNhbFR5cGUgPT0gbV92YWx1ZS0+cHJpbWl0
aXZlVHlwZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBkb3VibGUgbmV3VmFsdWUgPSBtX3Zh
bHVlLT5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShuZXdWYWx1ZSwgY2Fub25pY2FsVHlwZSk7Ci19Ci0KLXN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNy
ZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhKSBjb25zdAotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkoKSkgewotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxD
YWxjRXhwcmVzc2lvbk51bWJlcj4obV92YWx1ZS0+ZmxvYXRWYWx1ZSgpKTsKLSAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2Fs
Y0V4cHJlc3Npb25MZW5ndGg+KExlbmd0aChtX3ZhbHVlLT5jb21wdXRlTGVuZ3RoPGZsb2F0Pihj
b252ZXJzaW9uRGF0YSksIExlbmd0aFR5cGU6OkZpeGVkKSk7Ci0gICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aDogewotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0
aD4obV92YWx1ZS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkRmxvYXRDb252ZXJzaW9uIHwgUGVyY2Vu
dENvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKSk7Ci0gICAgfQotICAgIC8vIE9ubHkgdHlwZXMg
dGhhdCBjb3VsZCBiZSBwYXJ0IG9mIGEgTGVuZ3RoIGV4cHJlc3Npb24gY2FuIGJlIGNvbnZlcnRl
ZAotICAgIC8vIHRvIGEgQ2FsY0V4cHJlc3Npb25Ob2RlLiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TnVtYmVyIG1ha2VzIG5vIHNlbnNlIGFzIGEgTGVuZ3RoLgotICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OkFuZ2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKLSAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLWRvdWJsZSBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkb3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlw
ZSkgY29uc3QKLXsKLSAgICBpZiAoaGFzRG91YmxlVmFsdWUodW5pdFR5cGUpKSB7Ci0gICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBBU1NFUlQodW5pdENhdGVnb3J5KG1fdmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSkgPT0gdW5pdENhdGVnb3J5KHVuaXRUeXBlKSksIGJ1dCBvbmx5IHdoZW4gYWxs
IGNhbGxlcnMgYXJlIGZpeGVkIChlLmcuIHdlYmtpdC5vcmcvYi8yMDQ4MjYpLgotICAgICAgICBp
ZiAodW5pdENhdGVnb3J5KG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSkgIT0gdW5pdENhdGVnb3J5
KHVuaXRUeXBlKSkgewotICAgICAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8
PCAiQ2FsbGluZyBkb3VibGVWYWx1ZSgpIHdpdGggdW5pdCAiIDw8IHVuaXRUeXBlIDw8ICIgb24g
YSBub2RlIG9mIHVuaXQgdHlwZSAiIDw8IG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA8PCAiIHdo
aWNoIGlzIGluY29tcGF0aWJsZSIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0K
LQotICAgICAgICByZXR1cm4gbV92YWx1ZS0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOwotICAgIH0K
LSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotZG91YmxlIENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKGNh
dGVnb3J5KCkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAgICAg
ICAgcmV0dXJuIG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZG91YmxlPihjb252ZXJzaW9uRGF0YSk7
Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OgotICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TnVtYmVyOgotICAgICAgICByZXR1cm4gbV92YWx1ZS0+ZG91YmxlVmFs
dWUoKTsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6Ci0gICAg
Y2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1l
OgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgotICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
ICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIDA7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29sbGVjdERpcmVj
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVz
KSBjb25zdAotewotICAgIG1fdmFsdWUtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5k
ZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29s
bGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBtX3ZhbHVlLT5jb2xsZWN0RGlyZWN0Um9vdENv
bXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotYm9vbCBDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikg
Y29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZShtX3ZhbHVlLCBzdGF0aWNfY2Fz
dDxjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJj4ob3RoZXIpLm1fdmFsdWUpOwotfQot
Ci12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNv
bnN0Ci17Ci0gICAgdHMgPDwgInZhbHVlICIgPDwgbV92YWx1ZS0+Y3VzdG9tQ1NTVGV4dCgpIDw8
ICIgKGNhdGVnb3J5OiAiIDw8IGNhdGVnb3J5KCkgPDwgIiwgdHlwZTogIiA8PCBwcmltaXRpdmVU
eXBlKCkgPDwgIikiOwotfQotCi1jbGFzcyBDU1NDYWxjTmVnYXRlTm9kZSBmaW5hbCA6IHB1Ymxp
YyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTQ2Fs
Y05lZ2F0ZU5vZGU+IGNyZWF0ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY05lZ2F0ZU5vZGUoV1RG
TW92ZShjaGlsZCkpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUm
IGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotICAgIENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgY2hpbGQoKSB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0KLSAgICB2b2lk
IHNldENoaWxkKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpIHsgbV9jaGlsZCA9
IFdURk1vdmUoY2hpbGQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTQ2FsY05lZ2F0ZU5vZGUoUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUoY2hpbGQtPmNhdGVnb3J5KCkpCi0gICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKGNo
aWxkKSkKLSAgICB7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9u
Tm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSYpIGNvbnN0IGZpbmFsOwotCi0gICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2NoaWxkLT5pc1plcm8oKTsgfQotICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlw
ZSB1bml0VHlwZSkgY29uc3QgZmluYWwgeyByZXR1cm4gLW1fY2hpbGQtPmRvdWJsZVZhbHVlKHVu
aXRUeXBlKTsgfQotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIC1tX2No
aWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRhdGEpOyB9Ci0gICAgVHlwZSB0eXBlKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gVHlwZTo6Q3NzQ2FsY05lZ2F0ZTsgfQotICAgIENTU1VuaXRU
eXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5wcmltaXRp
dmVUeXBlKCk7IH0KLQotICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBt
X2NoaWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVz
KTsgfQotICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVz
KEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGls
ZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMp
OyB9Ci0KLSAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGlsZDsKLX07Ci0KLXN0ZDo6dW5pcXVlX3B0cjxD
YWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lv
bihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QK
LXsKLSAgICBhdXRvIGNoaWxkTm9kZSA9IG1fY2hpbGQtPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNv
bnZlcnNpb25EYXRhKTsKLSAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uPihXVEZNb3ZlKGNoaWxkTm9kZSkpOwotfQotCi12b2lkIENTU0NhbGNOZWdhdGVOb2RlOjpk
dW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICItIiA8PCBtX2NoaWxkLmdl
dCgpOwotfQotCi1jbGFzcyBDU1NDYWxjSW52ZXJ0Tm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0ludmVydE5v
ZGU+IGNyZWF0ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY0ludmVydE5vZGUoV1RGTW92ZShjaGls
ZCkpKTsKLSAgICB9Ci0KLSAgICBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQotICAgIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSYgY2hpbGQoKSB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0KLSAgICB2b2lkIHNldENoaWxk
KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpIHsgbV9jaGlsZCA9IFdURk1vdmUo
Y2hpbGQpOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTQ2FsY0ludmVydE5vZGUoUmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUo
Y2hpbGQtPmNhdGVnb3J5KCkpCi0gICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKGNoaWxkKSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3Jl
YXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0
IGZpbmFsOwotCi0gICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxk
LT5pc1plcm8oKTsgfQotICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3Qg
ZmluYWw7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0gICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gVHlwZTo6Q3NzQ2FsY0ludmVydDsgfQotICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5wcmltaXRpdmVUeXBlKCk7IH0KLQot
ICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0
RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQotICAgIHZvaWQg
Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVj
dFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9Ci0KLSAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgUmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gbV9jaGlsZDsKLX07Ci0KLXN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5v
ZGU+IENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKLXsKLSAgICBhdXRvIGNo
aWxkTm9kZSA9IG1fY2hpbGQtPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsK
LSAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4oV1RGTW92ZShj
aGlsZE5vZGUpKTsKLX0KLQotZG91YmxlIENTU0NhbGNJbnZlcnROb2RlOjpkb3VibGVWYWx1ZShD
U1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QKLXsKLSAgICBhdXRvIGNoaWxkVmFsdWUgPSBtX2No
aWxkLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7Ci0gICAgaWYgKCFjaGlsZFZhbHVlKQotICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOwotICAgIHJl
dHVybiAxLjAgLyBjaGlsZFZhbHVlOwotfQotCi1kb3VibGUgQ1NTQ2FsY0ludmVydE5vZGU6OmNv
bXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9u
RGF0YSkgY29uc3QKLXsKLSAgICBhdXRvIGNoaWxkVmFsdWUgPSBtX2NoaWxkLT5jb21wdXRlTGVu
Z3RoUHgoY29udmVyc2lvbkRhdGEpOwotICAgIGlmICghY2hpbGRWYWx1ZSkKLSAgICAgICAgcmV0
dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKLSAgICByZXR1cm4g
MS4wIC8gY2hpbGRWYWx1ZTsKLX0KLQotdm9pZCBDU1NDYWxjSW52ZXJ0Tm9kZTo6ZHVtcChUZXh0
U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiMS8iIDw8IG1fY2hpbGQuZ2V0KCk7Ci19
Ci0KLS8vIFRoaXMgaXMgdGhlIHJlc3VsdCBvZiB0aGUgIlRvIGFkZCB0d28gdHlwZXMgdHlwZTEg
YW5kIHR5cGUyLCBwZXJmb3JtIHRoZSBmb2xsb3dpbmcgc3RlcHM6IiBydWxlcy4KLQotc3RhdGlj
IGNvbnN0IENhbGN1bGF0aW9uQ2F0ZWdvcnkgYWRkU3VidHJhY3RSZXN1bHRbc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV1bc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKV0gPSB7Ci0vLyAgICBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXIgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGggICAgICAg
ICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50ICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TnVtYmVyICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoCi0gICAg
eyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
ciB9LCAvLyAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcgotICAgIHsgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3Ro
LCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0
aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgKLSAgICB7IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgs
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudAotICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyCi0gICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwg
ICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgKLX07Ci0KLXN0YXRpYyBDYWxjdWxhdGlvbkNhdGVn
b3J5IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbGVmdFNp
ZGUsIGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRTaWRlLCBDYWxjT3BlcmF0b3Ig
b3ApCi17Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBsZWZ0Q2F0ZWdvcnkgPSBsZWZ0U2lkZS5j
YXRlZ29yeSgpOwotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgcmlnaHRDYXRlZ29yeSA9IHJpZ2h0
U2lkZS5jYXRlZ29yeSgpOwotICAgIEFTU0VSVChsZWZ0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcik7Ci0gICAgQVNTRVJUKHJpZ2h0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcik7Ci0KLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDYWxjT3BlcmF0
b3I6OkFkZDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAgICAgIGlmIChs
ZWZ0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiByaWdodENhdGVnb3J5
IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpCi0gICAgICAgICAgICByZXR1cm4gYWRkU3Vi
dHJhY3RSZXN1bHRbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGxlZnRDYXRlZ29yeSldW3N0YXRpY19j
YXN0PHVuc2lnbmVkPihyaWdodENhdGVnb3J5KV07Ci0gICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkg
PT0gcmlnaHRDYXRlZ29yeSkKLSAgICAgICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7Ci0gICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6TXVsdGlwbHk6Ci0gICAgICAgIGlmIChsZWZ0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TnVtYmVyICYmIHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwot
ICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJl
ciA/IHJpZ2h0Q2F0ZWdvcnkgOiBsZWZ0Q2F0ZWdvcnk7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6
OkRpdmlkZToKLSAgICAgICAgaWYgKHJpZ2h0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyIHx8IHJpZ2h0U2lkZS5pc1plcm8oKSkKLSAgICAgICAgICAgIHJldHVybiBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICAgICAgcmV0dXJuIGxlZnRDYXRlZ29yeTsKLSAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0g
ICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIH0KLQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcjsKLX0KLQotLy8gRklYTUU6IE5lZWQgdG8gaW1wbGVtZW50IGNvcnJlY3QgY2F0ZWdv
cnkgY29tcHV0YXRpb24gcGVyOgotLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1ob3VkaW5pLm9yZy9j
c3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLWludmVydC1hLXR5cGU+Ci0vLyBUbyBpbnZl
cnQgYSB0eXBlIHR5cGUsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoKLS8vIExldCByZXN1
bHQgYmUgYSBuZXcgdHlwZSB3aXRoIGFuIGluaXRpYWxseSBlbXB0eSBvcmRlcmVkIG1hcCBhbmQg
YW4gaW5pdGlhbGx5IG51bGwgcGVyY2VudCBoaW50Ci0vLyBGb3IgZWFjaCB1bml0IOKGkiBleHBv
bmVudCBvZiB0eXBlLCBzZXQgcmVzdWx0W3VuaXRdIHRvICgtMSAqIGV4cG9uZW50KS4KLXN0YXRp
YyBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5Rm9ySW52ZXJ0KENhbGN1bGF0aW9uQ2F0ZWdv
cnkgY2F0ZWdvcnkpCi17Ci0gICAgcmV0dXJuIGNhdGVnb3J5OwotfQotCi1zdGF0aWMgQ2FsY3Vs
YXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4+JiBub2RlcywgQ2FsY09wZXJhdG9yIG9wKQotewotICAgIGlmIChub2Rl
cy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsK
LQotICAgIGF1dG8gY3VycmVudENhdGVnb3J5ID0gbm9kZXNbMF0tPmNhdGVnb3J5KCk7Ci0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbm9kZXMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
Y29uc3QgYXV0byYgbm9kZSA9IG5vZGVzW2ldLmdldCgpOwotICAgICAgICAKLSAgICAgICAgYXV0
byB1c2VkT3BlcmF0b3IgPSBvcDsKLSAgICAgICAgaWYgKG5vZGUudHlwZSgpID09IENTU0NhbGNF
eHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY0ludmVydCkKLSAgICAgICAgICAgIHVzZWRPcGVy
YXRvciA9IENhbGNPcGVyYXRvcjo6RGl2aWRlOwotCi0gICAgICAgIGF1dG8gbmV4dENhdGVnb3J5
ID0gbm9kZS5jYXRlZ29yeSgpOwotCi0gICAgICAgIHN3aXRjaCAodXNlZE9wZXJhdG9yKSB7Ci0g
ICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpTdWJ0cmFjdDoKLSAgICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5v
cmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVyaWN2YWx1ZS1hZGQtdHdvLXR5cGVzPgotICAgICAg
ICAgICAgLy8gQXQgYSArIG9yIC0gc3ViLWV4cHJlc3Npb24sIGF0dGVtcHQgdG8gYWRkIHRoZSB0
eXBlcyBvZiB0aGUgbGVmdCBhbmQgcmlnaHQgYXJndW1lbnRzLgotICAgICAgICAgICAgLy8gSWYg
dGhpcyByZXR1cm5zIGZhaWx1cmUsIHRoZSBlbnRpcmUgY2FsY3VsYXRpb27igJlzIHR5cGUgaXMg
ZmFpbHVyZS4gT3RoZXJ3aXNlLCB0aGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJl
dHVybmVkIHR5cGUuCi0gICAgICAgICAgICBpZiAoY3VycmVudENhdGVnb3J5IDwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6QW5nbGUgJiYgbmV4dENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
QW5nbGUpCi0gICAgICAgICAgICAgICAgY3VycmVudENhdGVnb3J5ID0gYWRkU3VidHJhY3RSZXN1
bHRbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGN1cnJlbnRDYXRlZ29yeSldW3N0YXRpY19jYXN0PHVu
c2lnbmVkPihuZXh0Q2F0ZWdvcnkpXTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGN1cnJlbnRDYXRl
Z29yeSAhPSBuZXh0Q2F0ZWdvcnkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok90aGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBDYWxj
T3BlcmF0b3I6Ok11bHRpcGx5OgotICAgICAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNzcy1o
b3VkaW5pLm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLW11bHRpcGx5LXR3by10
eXBlcz4KLSAgICAgICAgICAgIC8vIEF0IGEgKiBzdWItZXhwcmVzc2lvbiwgbXVsdGlwbHkgdGhl
IHR5cGVzIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVudHMuIFRoZSBzdWItZXhwcmVzc2lv
buKAmXMgdHlwZSBpcyB0aGUgcmV0dXJuZWQgcmVzdWx0LgotICAgICAgICAgICAgaWYgKGN1cnJl
bnRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgbmV4dENhdGVnb3J5
ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0KLSAgICAgICAgICAgIGN1cnJlbnRDYXRlZ29y
eSA9IGN1cnJlbnRDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgPyBuZXh0
Q2F0ZWdvcnkgOiBjdXJyZW50Q2F0ZWdvcnk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7Ci0gICAgICAgICAgICBhdXRvIGludmVydENh
dGVnb3J5ID0gY2F0ZWdvcnlGb3JJbnZlcnQobmV4dENhdGVnb3J5KTsKLSAgICAgICAgICAgIAot
ICAgICAgICAgICAgLy8gQXQgYSAvIHN1Yi1leHByZXNzaW9uLCBsZXQgbGVmdCB0eXBlIGJlIHRo
ZSByZXN1bHQgb2YgZmluZGluZyB0aGUgdHlwZXMgb2YgaXRzIGxlZnQgYXJndW1lbnQsCi0gICAg
ICAgICAgICAvLyBhbmQgcmlnaHQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRpbmcgdGhlIHR5
cGVzIG9mIGl0cyByaWdodCBhcmd1bWVudCBhbmQgdGhlbiBpbnZlcnRpbmcgaXQuCi0gICAgICAg
ICAgICAvLyBUaGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJlc3VsdCBvZiBtdWx0
aXBseWluZyB0aGUgbGVmdCB0eXBlIGFuZCByaWdodCB0eXBlLgotICAgICAgICAgICAgaWYgKGlu
dmVydENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCBub2RlLmlzWmVy
bygpKQotICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok1pbjoKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDoKLSAgICAgICAgY2FzZSBD
YWxjT3BlcmF0b3I6OkNsYW1wOgotICAgICAgICAgICAgLy8gVGhlIHR5cGUgb2YgYSBtaW4oKSwg
bWF4KCksIG9yIGNsYW1wKCkgZXhwcmVzc2lvbiBpcyB0aGUgcmVzdWx0IG9mIGFkZGluZyB0aGUg
dHlwZXMgb2YgaXRzIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbnMKLSAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiBjdXJyZW50Q2F0ZWdvcnk7Ci19Ci0KLXN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5
IHJlc29sdmVkVHlwZUZvck1pbk9yTWF4T3JDbGFtcChDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVn
b3J5LCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi17Ci0gICAgc3dp
dGNoIChjYXRlZ29yeSkgewotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgotICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnRMZW5ndGg6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpGcmVxdWVuY3k6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoK
LSAgICAgICAgcmV0dXJuIGNhdGVnb3J5OwotCi0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50OgotICAgICAgICBpZiAoZGVzdGluYXRpb25DYXRlZ29yeSA9PSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpMZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aDsKLSAgICAgICAgaWYgKGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI7Ci0gICAgICAgIHJldHVybiBjYXRlZ29yeTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzU2FtZVBhaXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBhLCBDYWxjdWxhdGlvbkNhdGVnb3J5
IGIsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgeCwgQ2FsY3VsYXRpb25DYXRlZ29yeSB5KQotewotICAg
IHJldHVybiAoYSA9PSB4ICYmIGIgPT0geSkgfHwgKGEgPT0geSAmJiBiID09IHgpOwotfQotCi1j
bGFzcyBDU1NDYWxjT3BlcmF0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRp
YyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZShDYWxjT3BlcmF0b3IsIFJlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZlB0cjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+JiYgcmlnaHRTaWRlKTsKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRp
b25Ob2RlPiBjcmVhdGVTdW0oVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZh
bHVlcyk7Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlUHJv
ZHVjdChWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKTsKLSAgICBz
dGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGVNaW5Pck1heE9yQ2xhbXAo
Q2FsY09wZXJhdG9yLCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVz
LCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotCi0gICAgc3RhdGlj
IFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNpbXBsaWZ5KFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+JiYpOwotCi0gICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0KGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYsIFN0cmluZ0J1aWxkZXImKTsKLQotICAgIENhbGNPcGVyYXRvciBjYWxj
T3BlcmF0b3IoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yOyB9Ci0gICAgYm9vbCBpc0NhbGNT
dW1Ob2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6OkFkZDsg
fQotICAgIGJvb2wgaXNDYWxjUHJvZHVjdE5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9y
ID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHk7IH0KLSAgICBib29sIGlzTWluT3JNYXhOb2RlKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBtX29wZXJh
dG9yID09IENhbGNPcGVyYXRvcjo6TWF4OyB9Ci0gICAgYm9vbCBzaG91bGRTb3J0Q2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiBpc0NhbGNTdW1Ob2RlKCkgfHwgaXNDYWxjUHJvZHVjdE5vZGUoKTsg
fQotCi0gICAgdm9pZCBob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcik7Ci0g
ICAgdm9pZCBjb21iaW5lQ2hpbGRyZW4oKTsKLSAgICAKLSAgICBib29sIGNhbkNvbWJpbmVBbGxD
aGlsZHJlbigpIGNvbnN0OwotCi0gICAgY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9Ci0gICAgVmVj
dG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2No
aWxkcmVuOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoQ2FsY3VsYXRp
b25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBSZWY8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYmIGxlZnRTaWRlLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lk
ZSkKLSAgICAgICAgOiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnkpCi0gICAgICAgICwg
bV9vcGVyYXRvcihvcCkKLSAgICB7Ci0gICAgICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSgyKTsKLSAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShs
ZWZ0U2lkZSkpOwotICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJp
Z2h0U2lkZSkpOwotICAgIH0KLQotICAgIENTU0NhbGNPcGVyYXRpb25Ob2RlKENhbGN1bGF0aW9u
Q2F0ZWdvcnkgY2F0ZWdvcnksIENhbGNPcGVyYXRvciBvcCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+PiYmIGNoaWxkcmVuKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9k
ZShjYXRlZ29yeSkKLSAgICAgICAgLCBtX29wZXJhdG9yKG9wKQotICAgICAgICAsIG1fY2hpbGRy
ZW4oV1RGTW92ZShjaGlsZHJlbikpCi0gICAgewotICAgIH0KLQotICAgIFR5cGUgdHlwZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNPcGVyYXRpb247IH0KLQotICAgIGJvb2wgaXNaZXJv
KCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIHJldHVybiAhZG91YmxlVmFsdWUocHJpbWl0
aXZlVHlwZSgpKTsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmKSBjb25zdCBmaW5hbDsKLQotICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBj
b25zdCBmaW5hbDsKLSAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZp
bmFsOwotICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRp
b25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7Ci0g
ICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNl
dDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0IGZpbmFsOwotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdCBmaW5hbDsKLQotICAgIHN0YXRpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIGdl
dE51bWJlclNpZGUoQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2lkZSwgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlJiByaWdodFNpZGUpCi0gICAgewotICAgICAgICBpZiAobGVmdFNpZGUuY2F0ZWdv
cnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4g
JmxlZnRTaWRlOwotICAgICAgICBpZiAocmlnaHRTaWRlLmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgcmV0dXJuICZyaWdodFNpZGU7Ci0gICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIGRvdWJsZSBldmFsdWF0ZShjb25zdCBW
ZWN0b3I8ZG91YmxlPiYgY2hpbGRyZW4pIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gZXZh
bHVhdGVPcGVyYXRvcihtX29wZXJhdG9yLCBjaGlsZHJlbik7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGRvdWJsZSBldmFsdWF0ZU9wZXJhdG9yKENhbGNPcGVyYXRvciwgY29uc3QgVmVjdG9yPGRvdWJs
ZT4mKTsKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlOb2Rl
KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYsIGludCBkZXB0aCk7Ci0gICAgc3RhdGljIFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHNpbXBsaWZ5UmVjdXJzaXZlKFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYsIGludCBkZXB0aCk7Ci0gICAgCi0gICAgZW51bSBjbGFzcyBHcm91cGlu
Z1BhcmVucyB7Ci0gICAgICAgIE9taXQsCi0gICAgICAgIEluY2x1ZGUKLSAgICB9OwotICAgIHN0
YXRpYyB2b2lkIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUmLCBTdHJpbmdCdWlsZGVyJiwgR3JvdXBpbmdQYXJlbnMgPSBHcm91cGluZ1BhcmVuczo6SW5j
bHVkZSk7Ci0KLSAgICBDYWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKLSAgICBWZWN0b3I8UmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4+IG1fY2hpbGRyZW47Ci19OwotCi1SZWZQdHI8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGUoQ2FsY09wZXJhdG9yIG9w
LCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkKLXsKLSAgICBpZiAoIWxlZnRTaWRlIHx8ICFy
aWdodFNpZGUpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQVNTRVJUKG9wID09IENh
bGNPcGVyYXRvcjo6QWRkIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOwotCi0gICAg
QVNTRVJUKGxlZnRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIp
OwotICAgIEFTU0VSVChyaWdodFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcik7Ci0KLSAgICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkoKmxl
ZnRTaWRlLCAqcmlnaHRTaWRlLCBvcCk7Ci0gICAgaWYgKG5ld0NhdGVnb3J5ID09IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJl
YW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgIiA8PCBvcCA8PCAi
IG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0
dHlQcmludE5vZGUoKmxlZnRTaWRlKSA8PCAiIGFuZCAiIDw8ICpyaWdodFNpZGUpOwotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0Nh
bGNPcGVyYXRpb25Ob2RlKG5ld0NhdGVnb3J5LCBvcCwgbGVmdFNpZGUucmVsZWFzZU5vbk51bGwo
KSwgcmlnaHRTaWRlLnJlbGVhc2VOb25OdWxsKCkpKTsKLX0KLQotUmVmUHRyPENTU0NhbGNPcGVy
YXRpb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFZlY3RvcjxSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpCi17Ci0gICAgaWYgKHZhbHVlcy5pc0VtcHR5
KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBuZXdDYXRlZ29yeSA9IGRl
dGVybWluZUNhdGVnb3J5KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpBZGQpOwotICAgIGlmIChuZXdD
YXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHN1bSBub2RlIGJlY2F1
c2UgdW5hYmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2Rl
cyh2YWx1ZXMpKTsKLSAgICAgICAgbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSh2YWx1
ZXMsIENhbGNPcGVyYXRvcjo6QWRkKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShuZXdDYXRlZ29y
eSwgQ2FsY09wZXJhdG9yOjpBZGQsIFdURk1vdmUodmFsdWVzKSkpOwotfQotCi1SZWZQdHI8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFZl
Y3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpCi17Ci0gICAgaWYgKHZh
bHVlcy5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgYXV0byBuZXdD
YXRlZ29yeSA9IGRldGVybWluZUNhdGVnb3J5KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eSk7Ci0gICAgaWYgKG5ld0NhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVh
dGUgcHJvZHVjdCBub2RlIGJlY2F1c2UgdW5hYmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9t
ICIgPDwgcHJldHR5UHJpbnROb2Rlcyh2YWx1ZXMpKTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgfQotCi0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShu
ZXdDYXRlZ29yeSwgQ2FsY09wZXJhdG9yOjpNdWx0aXBseSwgV1RGTW92ZSh2YWx1ZXMpKSk7Ci19
Ci0KLVJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNy
ZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25D
YXRlZ29yeSkKLXsKLSAgICBBU1NFUlQob3AgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgb3AgPT0g
Q2FsY09wZXJhdG9yOjpNYXggfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpDbGFtcCk7Ci0gICAgQVNT
RVJUX0lNUExJRVMob3AgPT0gQ2FsY09wZXJhdG9yOjpDbGFtcCwgdmFsdWVzLnNpemUoKSA9PSAz
KTsKLQotICAgIE9wdGlvbmFsPENhbGN1bGF0aW9uQ2F0ZWdvcnk+IGNhdGVnb3J5ID0gc3RkOjpu
dWxsb3B0OwotICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpIHsKLSAgICAgICAgYXV0byB2
YWx1ZUNhdGVnb3J5ID0gcmVzb2x2ZWRUeXBlRm9yTWluT3JNYXhPckNsYW1wKHZhbHVlLT5jYXRl
Z29yeSgpLCBkZXN0aW5hdGlvbkNhdGVnb3J5KTsKLQotICAgICAgICBBU1NFUlQodmFsdWVDYXRl
Z29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLSAgICAgICAgaWYgKCFjYXRlZ29y
eSkgewotICAgICAgICAgICAgaWYgKHZhbHVlQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIpIHsKLSAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFt
IDw8ICJGYWlsZWQgdG8gY3JlYXRlIENTU0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBu
b2RlIGJlY2F1c2UgdW5hYmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5
UHJpbnROb2Rlcyh2YWx1ZXMpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGNhdGVnb3J5ID0gdmFsdWVDYXRlZ29yeTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGlmIChjYXRlZ29yeSAhPSB2YWx1ZUNhdGVnb3J5KSB7Ci0gICAgICAg
ICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgpLCB2YWx1ZUNhdGVnb3J5LCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5n
dGgpKSB7Ci0gICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TGVuZ3RoOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKGlzU2FtZVBhaXIoY2F0ZWdvcnkudmFsdWUoKSwgdmFsdWVDYXRlZ29y
eSwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TnVtYmVyKSkgewotICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudE51bWJlcjsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICB9Ci0gICAgfQotCi0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShjYXRlZ29yeS52YWx1
ZSgpLCBvcCwgV1RGTW92ZSh2YWx1ZXMpKSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQotewotICAgIEFT
U0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6OkFkZCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok11bHRp
cGx5KTsKLQotICAgIGF1dG8gaGFzQ2hpbGRXaXRoT3BlcmF0b3IgPSBbJl0gKENhbGNPcGVyYXRv
ciBvcCkgewotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAg
ICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkgJiYgZG93bmNh
c3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBv
cCkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfTsKLQotICAgIGlmICghaGFzQ2hpbGRXaXRoT3BlcmF0b3Iob3ApKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+
IG5ld0NoaWxkcmVuOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7Ci0gICAg
ICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0
PENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3Ap
IHsKLSAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZHJlbigpOwotICAgICAgICAgICAgZm9yIChhdXRvJiBj
aGlsZFRvTW92ZSA6IGNoaWxkcmVuKQotICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVu
ZChXVEZNb3ZlKGNoaWxkVG9Nb3ZlKSk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbmV3
Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKLSAgICB9Ci0gICAgCi0gICAgbmV3Q2hp
bGRyZW4uc2hyaW5rVG9GaXQoKTsKLSAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJl
bik7Ci19Ci0KLWVudW0gY2xhc3MgU29ydGluZ0NhdGVnb3J5IHsKLSAgICBOdW1iZXIsCi0gICAg
UGVyY2VudCwKLSAgICBEaW1lbnNpb24sCi0gICAgT3RoZXIKLX07Ci0KLXN0YXRpYyBTb3J0aW5n
Q2F0ZWdvcnkgc29ydGluZ0NhdGVnb3J5Rm9yVHlwZShDU1NVbml0VHlwZSB1bml0VHlwZSkKLXsK
LSAgICBzdGF0aWMgY29uc3RleHByIFNvcnRpbmdDYXRlZ29yeSBzb3J0T3JkZXJbXSA9IHsKLSAg
ICAgICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpOdW1iZXIsCi0gICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OlBl
cmNlbnQsICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsCi0gICAgICAgIFNv
cnRpbmdDYXRlZ29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlciwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLAotICAgICAgICBTb3J0aW5nQ2F0ZWdv
cnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLAotICAgICAg
ICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlRpbWUsCi0gICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5LAotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok90aGVy
LCAgICAgICAgIC8vIFVPdGhlcgotICAgIH07Ci0KLSAgICBDT01QSUxFX0FTU0VSVChBUlJBWV9T
SVpFKHNvcnRPcmRlcikgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyKSArIDEsIHNvcnRPcmRlcl9zaXplX3Nob3VsZF9tYXRjaF9Vbml0Q2F0ZWdvcnkp
OwotICAgIHJldHVybiBzb3J0T3JkZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhbGNVbml0Q2F0
ZWdvcnkodW5pdFR5cGUpKV07Ci19Ci0KLXN0YXRpYyBTb3J0aW5nQ2F0ZWdvcnkgc29ydGluZ0Nh
dGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkKLXsKLSAgICBpZiAoaXM8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpCi0gICAgICAgIHJldHVybiBzb3J0aW5n
Q2F0ZWdvcnlGb3JUeXBlKG5vZGUucHJpbWl0aXZlVHlwZSgpKTsKLQotICAgIHJldHVybiBTb3J0
aW5nQ2F0ZWdvcnk6Ok90aGVyOwotfQotCi1zdGF0aWMgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlw
ZUZvckNvbWJpbmF0aW9uKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkKLXsKLSAg
ICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpCi0gICAgICAgIHJldHVy
biBub2RlLnByaW1pdGl2ZVR5cGUoKTsKLSAgICAKLSAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19VTktOT1dOOwotfQotCi1zdGF0aWMgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENv
bnZlcnNpb24gY29udmVyc2lvblRvQWRkVmFsdWVzV2l0aFR5cGVzKENTU1VuaXRUeXBlIGZpcnN0
VHlwZSwgQ1NTVW5pdFR5cGUgc2Vjb25kVHlwZSkKLXsKLSAgICBpZiAoZmlyc3RUeXBlID09IENT
U1VuaXRUeXBlOjpDU1NfVU5LTk9XTiB8fCBzZWNvbmRUeXBlID09IENTU1VuaXRUeXBlOjpDU1Nf
VU5LTk9XTikKLSAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRD
b252ZXJzaW9uOjpJbnZhbGlkOwotCi0gICAgYXV0byBmaXJzdENhdGVnb3J5ID0gY2FsY3VsYXRp
b25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKGZpcnN0VHlwZSk7Ci0KLSAgICAvLyBDb21wYXRpYmxl
IHR5cGVzLgotICAgIGlmIChmaXJzdENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyICYmIGZpcnN0Q2F0ZWdvcnkgPT0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9u
KHNlY29uZFR5cGUpKQotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
VW5pdENvbnZlcnNpb246OkNhbm9uaWNhbGl6ZTsKLQotICAgIC8vIE1hdGNoaW5nIHR5cGVzLgot
ICAgIGlmIChmaXJzdFR5cGUgPT0gc2Vjb25kVHlwZSAmJiBoYXNEb3VibGVWYWx1ZShmaXJzdFR5
cGUpKQotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZl
cnNpb246OlByZXNlcnZlOwotCi0gICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
OlVuaXRDb252ZXJzaW9uOjpJbnZhbGlkOwotfQotCi1ib29sIENTU0NhbGNPcGVyYXRpb25Ob2Rl
OjpjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdAotewotICAgIGlmIChtX2NoaWxkcmVuLnNp
emUoKSA8IDIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICghaXM8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4obV9jaGlsZHJlblswXSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIGF1dG8gZmlyc3RVbml0VHlwZSA9IG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUo
KTsKLSAgICBhdXRvIGZpcnN0Q2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmlu
YXRpb24obV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpKTsKLQotICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIG5v
ZGUgPSBtX2NoaWxkcmVuW2ldOwotCi0gICAgICAgIGlmICghaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZh
bHVlTm9kZT4obm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0
byBub2RlVW5pdFR5cGUgPSBub2RlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIGF1dG8gbm9k
ZUNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG5vZGVVbml0VHlw
ZSk7Ci0KLSAgICAgICAgaWYgKG5vZGVDYXRlZ29yeSAhPSBmaXJzdENhdGVnb3J5KQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmIChub2RlQ2F0ZWdvcnkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIgJiYgbm9kZVVuaXRUeXBlICE9IGZpcnN0VW5pdFR5cGUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWhhc0RvdWJs
ZVZhbHVlKG5vZGVVbml0VHlwZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQot
Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbWJp
bmVDaGlsZHJlbigpCi17Ci0gICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpIDwgMikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKHNob3VsZFNvcnRDaGlsZHJlbigpKSB7Ci0gICAgICAgIC8vIDxo
dHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzb3J0LWEtY2FsY3VsYXRpb25z
LWNoaWxkcmVuPgotICAgICAgICBzdGQ6OnN0YWJsZV9zb3J0KG1fY2hpbGRyZW4uYmVnaW4oKSwg
bV9jaGlsZHJlbi5lbmQoKSwgW10oY29uc3QgYXV0byYgZmlyc3QsIGNvbnN0IGF1dG8mIHNlY29u
ZCkgewotICAgICAgICAgICAgLy8gU29ydCBvcmRlcjogbnVtYmVyLCBwZXJjZW50YWdlLCBkaW1l
bnNpb24sIG90aGVyLgotICAgICAgICAgICAgU29ydGluZ0NhdGVnb3J5IGZpcnN0Q2F0ZWdvcnkg
PSBzb3J0aW5nQ2F0ZWdvcnkoZmlyc3QuZ2V0KCkpOwotICAgICAgICAgICAgU29ydGluZ0NhdGVn
b3J5IHNlY29uZENhdGVnb3J5ID0gc29ydGluZ0NhdGVnb3J5KHNlY29uZC5nZXQoKSk7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGlmIChmaXJzdENhdGVnb3J5ID09IFNvcnRpbmdDYXRlZ29y
eTo6RGltZW5zaW9uICYmIHNlY29uZENhdGVnb3J5ID09IFNvcnRpbmdDYXRlZ29yeTo6RGltZW5z
aW9uKSB7Ci0gICAgICAgICAgICAgICAgLy8gSWYgbm9kZXMgY29udGFpbnMgYW55IGRpbWVuc2lv
bnMsIHJlbW92ZSB0aGVtIGZyb20gbm9kZXMsIHNvcnQgdGhlbSBieSB0aGVpciB1bml0cywgYW5k
IGFwcGVuZCB0aGVtIHRvIHJldC4KLSAgICAgICAgICAgICAgICBhdXRvIGZpcnN0VW5pdFN0cmlu
ZyA9IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyhmaXJzdC0+cHJpbWl0aXZlVHlw
ZSgpKTsKLSAgICAgICAgICAgICAgICBhdXRvIHNlY29uZFVuaXRTdHJpbmcgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcoc2Vjb25kLT5wcmltaXRpdmVUeXBlKCkpOwotICAgICAg
ICAgICAgICAgIHJldHVybiBjb2RlUG9pbnRDb21wYXJlTGVzc1RoYW4oZmlyc3RVbml0U3RyaW5n
LCBzZWNvbmRVbml0U3RyaW5nKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihmaXJzdENhdGVnb3J5KSA8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihzZWNvbmRDYXRlZ29yeSk7Ci0gICAgICAgIH0pOwotCi0gICAgICAgIExPR19XSVRIX1NU
UkVBTShDYWxjLCBzdHJlYW0gPDwgInBvc3Qtc29ydDogIiA8PCAqdGhpcyk7Ci0gICAgfQotCi0g
ICAgaWYgKGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7Ci0gICAgICAgIC8v
IEZvciBlYWNoIHNldCBvZiByb2904oCZcyBjaGlsZHJlbiB0aGF0IGFyZSBudW1lcmljIHZhbHVl
cyB3aXRoIGlkZW50aWNhbCB1bml0cywKLSAgICAgICAgLy8gcmVtb3ZlIHRob3NlIGNoaWxkcmVu
IGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHNpbmdsZSBudW1lcmljIHZhbHVlIGNvbnRhaW5pbmcK
LSAgICAgICAgLy8gdGhlIHN1bSBvZiB0aGUgcmVtb3ZlZCBub2RlcywgYW5kIHdpdGggdGhlIHNh
bWUgdW5pdC4KLSAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBuZXdD
aGlsZHJlbjsKLSAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2No
aWxkcmVuLnNpemUoKSk7Ci0gICAgICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChtX2No
aWxkcmVuWzBdLmNvcHlSZWYoKSk7Ci0KLSAgICAgICAgQ1NTVW5pdFR5cGUgcHJldmlvdXNUeXBl
ID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG5ld0NoaWxkcmVuWzBdLmdldCgpKTsKLQot
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkg
ewotICAgICAgICAgICAgYXV0byYgY3VycmVudE5vZGUgPSBtX2NoaWxkcmVuW2ldOwotICAgICAg
ICAgICAgQ1NTVW5pdFR5cGUgY3VycmVudFR5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRp
b24oY3VycmVudE5vZGUuZ2V0KCkpOwotCi0gICAgICAgICAgICBhdXRvIGNvbnZlcnNpb25UeXBl
ID0gY29udmVyc2lvblRvQWRkVmFsdWVzV2l0aFR5cGVzKHByZXZpb3VzVHlwZSwgY3VycmVudFR5
cGUpOwotICAgICAgICAgICAgaWYgKGNvbnZlcnNpb25UeXBlICE9IENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU6OlVuaXRDb252ZXJzaW9uOjpJbnZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgZG93
bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW4ubGFzdCgpLmdldCgp
KS5hZGQoZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY3VycmVudE5vZGUuZ2V0
KCkpLCBjb252ZXJzaW9uVHlwZSk7Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHByZXZpb3VzVHlwZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21i
aW5hdGlvbihjdXJyZW50Tm9kZSk7Ci0gICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRB
cHBlbmQoY3VycmVudE5vZGUuY29weVJlZigpKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAg
ICAgbmV3Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKLSAgICAgICAgbV9jaGlsZHJlbiA9IFdURk1v
dmUobmV3Q2hpbGRyZW4pOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGNhbGNP
cGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpIHsKLSAgICAgICAgLy8gSWYgcm9v
dCBoYXMgbXVsdGlwbGUgY2hpbGRyZW4gdGhhdCBhcmUgbnVtYmVycyAobm90IHBlcmNlbnRhZ2Vz
IG9yIGRpbWVuc2lvbnMpLAotICAgICAgICAvLyByZW1vdmUgdGhlbSBhbmQgcmVwbGFjZSB0aGVt
IHdpdGggYSBzaW5nbGUgbnVtYmVyIGNvbnRhaW5pbmcgdGhlIHByb2R1Y3Qgb2YgdGhlIHJlbW92
ZWQgbm9kZXMuCi0gICAgICAgIGRvdWJsZSBtdWx0aXBsaWVyID0gMTsKLQotICAgICAgICAvLyBT
b3J0aW5nIHdpbGwgaGF2ZSBwdXQgdGhlIG51bWJlciBub2RlcyBmaXJzdC4KLSAgICAgICAgdW5z
aWduZWQgbGVhZGluZ051bWJlck5vZGVDb3VudCA9IDA7Ci0gICAgICAgIGZvciAoYXV0byYgbm9k
ZSA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGF1dG8gbm9kZVR5cGUgPSBwcmltaXRpdmVU
eXBlRm9yQ29tYmluYXRpb24obm9kZS5nZXQoKSk7Ci0gICAgICAgICAgICBpZiAobm9kZVR5cGUg
IT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIG11bHRpcGxpZXIgKj0gbm9kZS0+ZG91YmxlVmFsdWUoQ1NT
VW5pdFR5cGU6OkNTU19OVU1CRVIpOwotICAgICAgICAgICAgKytsZWFkaW5nTnVtYmVyTm9kZUNv
dW50OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOwotICAgICAgICBuZXdDaGlsZHJlbi5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIElm
IHJvb3QgY29udGFpbnMgb25seSB0d28gY2hpbGRyZW4sIG9uZSBvZiB3aGljaCBpcyBhIG51bWJl
ciAobm90IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24pIGFuZCB0aGUgb3RoZXIgb2YKLSAgICAg
ICAgLy8gd2hpY2ggaXMgYSBTdW0gd2hvc2UgY2hpbGRyZW4gYXJlIGFsbCBudW1lcmljIHZhbHVl
cywgbXVsdGlwbHkgYWxsIG9mIHRoZSBTdW3igJlzIGNoaWxkcmVuIGJ5IHRoZSBudW1iZXIsIHRo
ZW4KLSAgICAgICAgLy8gcmV0dXJuIHRoZSBTdW0uCi0gICAgICAgIC8vIFRoZSBTdW0ncyBjaGls
ZHJlbiBzaW1wbGlmaWNhdGlvbiB3aWxsIGhhdmUgaGFwcGVuZWQgYWxyZWFkeS4KLSAgICAgICAg
Ym9vbCBkaWRNdWx0aXBseSA9IGZhbHNlOwotICAgICAgICBpZiAobGVhZGluZ051bWJlck5vZGVD
b3VudCAmJiBtX2NoaWxkcmVuLnNpemUoKSAtIGxlYWRpbmdOdW1iZXJOb2RlQ291bnQgPT0gMSkg
ewotICAgICAgICAgICAgYXV0byBtdWx0aXBsaWNhbmRDYXRlZ29yeSA9IGNhbGNVbml0Q2F0ZWdv
cnkocHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKSk7
Ci0gICAgICAgICAgICBpZiAobXVsdGlwbGljYW5kQ2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpIHsKLSAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBl
bmQobV9jaGlsZHJlbi5sYXN0KCkuY29weVJlZigpKTsKLSAgICAgICAgICAgICAgICBkb3duY2Fz
dDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdDaGlsZHJlblswXS5nZXQoKSkubXVsdGlw
bHkobXVsdGlwbGllcik7Ci0gICAgICAgICAgICAgICAgZGlkTXVsdGlwbHkgPSB0cnVlOwotICAg
ICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5s
YXN0KCkuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihtX2NoaWxkcmVu
Lmxhc3QoKS5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpBZGQpIHsKLSAg
ICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBtdWx0aXBseWluZyB3aXRoIGFub3RoZXIgb3BlcmF0
aW9uIHRoYXQgaXMgYW4gYWRkaXRpb24gYW5kIGFsbCB0aGUgYWRkZWQgY2hpbGRyZW4KLSAgICAg
ICAgICAgICAgICAvLyBhcmUgcGVyY2VudGFnZXMgb3IgZGltZW5zaW9ucywgd2Ugc2hvdWxkIG11
bHRpcGx5IGVhY2ggY2hpbGQgYW5kIG1ha2UgdGhpcyBleHByZXNzaW9uIGFuCi0gICAgICAgICAg
ICAgICAgLy8gYWRkaXRpb24uCi0gICAgICAgICAgICAgICAgYXV0byBhbGxDaGlsZHJlbkFyZVBy
aW1pdGl2ZVZhbHVlcyA9IFtdKGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
Pj4mIGNoaWxkcmVuKSAtPiBib29sCi0gICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
ICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQuZ2V0KCkpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgICAgICAgICB9
OwotCi0gICAgICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGFsbENoaWxkcmVuQXJlUHJpbWl0aXZlVmFsdWVzKGNoaWxkcmVuKSkgewot
ICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hpbGRyZW4pIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChjaGlsZC5jb3B5UmVmKCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZT4obmV3Q2hpbGRyZW4ubGFzdCgpLmdldCgpKS5tdWx0aXBseShtdWx0aXBsaWVyKTsKLSAgICAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBtX29wZXJhdG9yID0gQ2FsY09w
ZXJhdG9yOjpBZGQ7Ci0gICAgICAgICAgICAgICAgICAgIGRpZE11bHRpcGx5ID0gdHJ1ZTsKLSAg
ICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAo
IWRpZE11bHRpcGx5KSB7Ci0gICAgICAgICAgICBpZiAobGVhZGluZ051bWJlck5vZGVDb3VudCkg
ewotICAgICAgICAgICAgICAgIGF1dG8gbXVsdGlwbGllck5vZGUgPSBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtdWx0aXBsaWVyLCBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOwotICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKG11bHRpcGxpZXJOb2RlKSk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGxlYWRpbmdOdW1iZXJOb2RlQ291bnQ7IGkg
PCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKQotICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLnVu
Y2hlY2tlZEFwcGVuZChtX2NoaWxkcmVuW2ldLmNvcHlSZWYoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwotICAgICAgICBtX2NoaWxkcmVuID0gV1RG
TW92ZShuZXdDaGlsZHJlbik7Ci0gICAgfQotCi0gICAgaWYgKGlzTWluT3JNYXhOb2RlKCkgJiYg
Y2FuQ29tYmluZUFsbENoaWxkcmVuKCkpIHsKLSAgICAgICAgYXV0byBjb21iaW5lZFVuaXRUeXBl
ID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAgICBhdXRvIGNhdGVnb3J5
ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKGNvbWJpbmVkVW5pdFR5cGUpOwot
ICAgICAgICBpZiAoY2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCi0gICAg
ICAgICAgICBjb21iaW5lZFVuaXRUeXBlID0gY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlv
bkNhdGVnb3J5KGNhdGVnb3J5KTsKLQotICAgICAgICBkb3VibGUgcmVzb2x2ZWRWYWx1ZSA9IGRv
dWJsZVZhbHVlKGNvbWJpbmVkVW5pdFR5cGUpOwotICAgICAgICBhdXRvIG5ld0NoaWxkID0gQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
cmVzb2x2ZWRWYWx1ZSwgY29tYmluZWRVbml0VHlwZSkpOwotCi0gICAgICAgIG1fY2hpbGRyZW4u
Y2xlYXIoKTsKLSAgICAgICAgbV9jaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShuZXdDaGlsZCkpOwot
ICAgIH0KLX0KLQotLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jc2lt
cGxpZnktYS1jYWxjdWxhdGlvbi10cmVlCi0KLVJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYm
IHJvb3ROb2RlKQotewotICAgIHJldHVybiBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKHJvb3RO
b2RlKSwgMCk7Ci19Ci0KLVJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpzaW1wbGlmeVJlY3Vyc2l2ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJv
b3ROb2RlLCBpbnQgZGVwdGgpCi17Ci0gICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihy
b290Tm9kZSkpIHsKLSAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0Nh
bGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZS5nZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBhdXRv
JiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRv
IGNoaWxkID0gY2hpbGRyZW5baV0uY29weVJlZigpOwotICAgICAgICAgICAgYXV0byBuZXdOb2Rl
ID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7Ci0gICAgICAg
ICAgICBpZiAobmV3Tm9kZS5wdHIoKSAhPSBjaGlsZHJlbltpXS5wdHIoKSkKLSAgICAgICAgICAg
ICAgICBjaGlsZHJlbltpXSA9IFdURk1vdmUobmV3Tm9kZSk7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgYXV0byYg
bmVnYXRlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZS5nZXQoKSk7
Ci0gICAgICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNoaWxkID0gbmVnYXRlTm9kZS5j
aGlsZCgpOwotICAgICAgICBhdXRvIG5ld05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3Zl
KGNoaWxkKSwgZGVwdGggKyAxKTsKLSAgICAgICAgaWYgKG5ld05vZGUucHRyKCkgIT0gJm5lZ2F0
ZU5vZGUuY2hpbGQoKSkKLSAgICAgICAgICAgIG5lZ2F0ZU5vZGUuc2V0Q2hpbGQoV1RGTW92ZShu
ZXdOb2RlKSk7Ci0gICAgfSBlbHNlIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4ocm9vdE5vZGUp
KSB7Ci0gICAgICAgIGF1dG8mIGludmVydE5vZGUgPSBkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9k
ZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBj
aGlsZCA9IGludmVydE5vZGUuY2hpbGQoKTsKLSAgICAgICAgYXV0byBuZXdOb2RlID0gc2ltcGxp
ZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCksIGRlcHRoICsgMSk7Ci0gICAgICAgIGlmIChuZXdO
b2RlLnB0cigpICE9ICZpbnZlcnROb2RlLmNoaWxkKCkpCi0gICAgICAgICAgICBpbnZlcnROb2Rl
LnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkpOwotICAgIH0KLQotICAgIHJldHVybiBzaW1wbGlm
eU5vZGUoV1RGTW92ZShyb290Tm9kZSksIGRlcHRoKTsKLX0KLQotUmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5Tm9kZShSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYmIHJvb3ROb2RlLCBpbnQgZGVwdGgpCi17Ci0gICAgaWYgKGlzPENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICAvLyBJZiByb290IGlz
IGEgcGVyY2VudGFnZSB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgYWdhaW5zdCBhbm90aGVyIHZhbHVl
LCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0aW9uCi0gICAgICAgIC8vIGF2YWlsYWJsZSB0
byByZXNvbHZlIGl0LCBkbyBzbywgYW5kIGV4cHJlc3MgdGhlIHJlc3VsdGluZyBudW1lcmljIHZh
bHVlIGluIHRoZSBhcHByb3ByaWF0ZSBjYW5vbmljYWwKLSAgICAgICAgLy8gdW5pdC4gUmV0dXJu
IHRoZSB2YWx1ZS4KLQotICAgICAgICAvLyBJZiByb290IGlzIGEgZGltZW5zaW9uIHRoYXQgaXMg
bm90IGV4cHJlc3NlZCBpbiBpdHMgY2Fub25pY2FsIHVuaXQsIGFuZCB0aGVyZSBpcyBlbm91Z2gg
aW5mb3JtYXRpb24KLSAgICAgICAgLy8gYXZhaWxhYmxlIHRvIGNvbnZlcnQgaXQgdG8gdGhlIGNh
bm9uaWNhbCB1bml0LCBkbyBzbywgYW5kIHJldHVybiB0aGUgdmFsdWUuCi0gICAgICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+
KHJvb3ROb2RlLmdldCgpKTsKLSAgICAgICAgcHJpbWl0aXZlVmFsdWVOb2RlLmNhbm9uaWNhbGl6
ZVVuaXQoKTsKLSAgICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOwotICAgIH0KLQotICAg
IC8vIElmIHJvb3QgaXMgYW4gb3BlcmF0b3Igbm9kZSB0aGF04oCZcyBub3Qgb25lIG9mIHRoZSBj
YWxjLW9wZXJhdG9yIG5vZGVzLCBhbmQgYWxsIG9mIGl0cyBjaGlsZHJlbiBhcmUgbnVtZXJpYyB2
YWx1ZXMKLSAgICAvLyB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiB0byBjb21wdXRlZCB0aGUgb3Bl
cmF0aW9uIHJvb3QgcmVwcmVzZW50cywgcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyByb290
4oCZcyBvcGVyYXRpb24KLSAgICAvLyB1c2luZyBpdHMgY2hpbGRyZW4sIGV4cHJlc3NlZCBpbiB0
aGUgcmVzdWx04oCZcyBjYW5vbmljYWwgdW5pdC4KLSAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBhdXRvJiBjYWxjT3BlcmF0aW9uTm9kZSA9IGRv
d25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZS5nZXQoKSk7Ci0gICAgICAgIC8v
IERvbid0IHNpbXBsaWZ5IGF0IHRoZSByb290LCBvdGhlcndpc2Ugd2UgbG9zZSB0cmFjayBvZiB0
aGUgb3BlcmF0aW9uIGZvciBzZXJpYWxpemF0aW9uLgotICAgICAgICBpZiAoY2FsY09wZXJhdGlv
bk5vZGUuY2hpbGRyZW4oKS5zaXplKCkgPT0gMSAmJiBkZXB0aCkKLSAgICAgICAgICAgIHJldHVy
biBXVEZNb3ZlKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKClbMF0pOwotICAgICAgICAKLSAg
ICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5vZGUoKSkgewotICAgICAgICAg
ICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0
b3I6OkFkZCk7Ci0gICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4o
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5pc0NhbGNQcm9k
dWN0Tm9kZSgpKSB7Ci0gICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5ob2lzdENoaWxkcmVu
V2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOwotICAgICAgICAgICAgY2FsY09w
ZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5pc01pbk9yTWF4Tm9kZSgpKQotICAgICAgICAgICAg
Y2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7Ci0KLSAgICAgICAgLy8gSWYgb25s
eSBvbmUgY2hpbGQgcmVtYWlucywgcmV0dXJuIHRoZSBjaGlsZCAoZXhjZXB0IGF0IHRoZSByb290
KS4KLSAgICAgICAgYXV0byBzaG91bGRDb21iaW5lUGFyZW50V2l0aE9ubHlDaGlsZCA9IFtdKGNv
bnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBwYXJlbnQsIGludCBkZXB0aCkKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYgKHBhcmVudC5jaGlsZHJlbigpLnNpemUoKSAhPSAxKQotICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gQWx3YXlzIHNpbXBsaWZ5IGJl
bG93IHRoZSByb290LgotICAgICAgICAgICAgaWYgKGRlcHRoKQotICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotCi0gICAgICAgICAgICAvLyBBdCB0aGUgcm9vdCwgcHJlc2VydmUgdGhlIHJv
b3QgZnVuY3Rpb24gYnkgb25seSBtZXJnaW5nIG5vZGVzIHdpdGggdGhlIHNhbWUgZnVuY3Rpb24u
Ci0gICAgICAgICAgICBhdXRvJiBjaGlsZCA9IHBhcmVudC5jaGlsZHJlbigpLmZpcnN0KCk7Ci0g
ICAgICAgICAgICBpZiAoIWlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBhdXRvIHBhcmVudEZ1bmN0aW9u
ID0gZnVuY3Rpb25Gcm9tT3BlcmF0b3IocGFyZW50LmNhbGNPcGVyYXRvcigpKTsKLSAgICAgICAg
ICAgIGF1dG8gY2hpbGRGdW5jdGlvbiA9IGZ1bmN0aW9uRnJvbU9wZXJhdG9yKGRvd25jYXN0PENT
U0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkpOwotICAgICAg
ICAgICAgcmV0dXJuIGNoaWxkRnVuY3Rpb24gPT0gcGFyZW50RnVuY3Rpb247Ci0gICAgICAgIH07
Ci0KLSAgICAgICAgaWYgKHNob3VsZENvbWJpbmVQYXJlbnRXaXRoT25seUNoaWxkKGNhbGNPcGVy
YXRpb25Ob2RlLCBkZXB0aCkpCi0gICAgICAgICAgICByZXR1cm4gV1RGTW92ZShjYWxjT3BlcmF0
aW9uTm9kZS5jaGlsZHJlbigpLmZpcnN0KCkpOwotCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJv
b3ROb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3ROb2Rl
KSkgewotICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRlTm9k
ZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7Ci0gICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxk
IGlzIGEgbnVtZXJpYyB2YWx1ZSwgcmV0dXJuIGFuIGVxdWl2YWxlbnQgbnVtZXJpYyB2YWx1ZSwg
YnV0IHdpdGggdGhlIHZhbHVlIG5lZ2F0ZWQgKDAgLSB2YWx1ZSkuCi0gICAgICAgIGlmIChpczxD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpICYmIGRvd25jYXN0PENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNOdW1lcmljVmFsdWUoKSkgewotICAgICAg
ICAgICAgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5uZWdh
dGUoKTsKLSAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7Ci0gICAgICAgIH0KLSAgICAgICAg
Ci0gICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGEgTmVnYXRlIG5vZGUsIHJldHVybiB0
aGUgY2hpbGTigJlzIGNoaWxkLgotICAgICAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KGNo
aWxkTm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+
KGNoaWxkTm9kZSkuY2hpbGQoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJv
b3ROb2RlKTsKLSAgICB9Ci0KLSAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2Rl
KSkgewotICAgICAgICBhdXRvJiBjaGlsZE5vZGUgPSBkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9k
ZT4ocm9vdE5vZGUuZ2V0KCkpLmNoaWxkKCk7Ci0gICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxk
IGlzIGEgbnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9yIGRpbWVuc2lvbikgcmV0dXJuIHRoZSBy
ZWNpcHJvY2FsIG9mIHRoZSBjaGlsZOKAmXMgdmFsdWUuCi0gICAgICAgIGlmIChpczxDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZE5vZGUpICYmIGRvd25jYXN0PENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaXNOdW1lcmljVmFsdWUoKSkgewotICAgICAgICAgICAg
ZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pbnZlcnQoKTsK
LSAgICAgICAgICAgIHJldHVybiBjaGlsZE5vZGU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJ
ZiByb2904oCZcyBjaGlsZCBpcyBhbiBJbnZlcnQgbm9kZSwgcmV0dXJuIHRoZSBjaGlsZOKAmXMg
Y2hpbGQuCi0gICAgICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGROb2RlKSkKLSAg
ICAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGROb2RlKS5j
aGlsZCgpOwotCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7Ci19Ci0KLUNTU1VuaXRUeXBlIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QKLXsKLSAgICBhdXRvIHVuaXRDYXRlZ29y
eSA9IGNhdGVnb3J5KCk7Ci0gICAgc3dpdGNoICh1bml0Q2F0ZWdvcnkpIHsKLSAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKLSNpZiBBU1NFUlRfRU5BQkxFRAotICAgICAgICBm
b3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgICAgIEFTU0VSVChjaGlsZC0+
Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpOwotI2VuZGlmCi0gICAg
ICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjsKLQotICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudDogewotICAgICAgICBpZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkp
Ci0gICAgICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOwotCi0gICAgICAg
IGlmIChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKSB7Ci0gICAgICAgICAgICBpZiAobV9jaGlsZHJl
blswXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMV0tPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAg
ICAgIGlmIChtX2NoaWxkcmVuWzFdLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZl
VHlwZSgpOwotICAgICAgICB9Ci0gICAgICAgIENTU1VuaXRUeXBlIGZpcnN0VHlwZSA9IG1fY2hp
bGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1f
Y2hpbGRyZW4pIHsKLSAgICAgICAgICAgIGlmIChmaXJzdFR5cGUgIT0gY2hpbGQtPnByaW1pdGl2
ZVR5cGUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dO
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmaXJzdFR5cGU7Ci0gICAgfQotCi0gICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpBbmdsZToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6Ci0gICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6Ci0gICAgICAgIGlmIChtX2NoaWxkcmVu
LnNpemUoKSA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW4uZmlyc3QoKS0+cHJp
bWl0aXZlVHlwZSgpOwotICAgICAgICByZXR1cm4gY2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxh
dGlvbkNhdGVnb3J5KHVuaXRDYXRlZ29yeSk7Ci0KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnRMZW5ndGg6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TnVtYmVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgIHJl
dHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgIHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVh
dGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJz
aW9uRGF0YSkgY29uc3QKLXsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNz
aW9uTm9kZT4+IG5vZGVzOwotICAgIG5vZGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGls
ZHJlbi5zaXplKCkpOwotCi0gICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pIHsKLSAg
ICAgICAgYXV0byBub2RlID0gY2hpbGQtPmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZlcnNpb25E
YXRhKTsKLSAgICAgICAgaWYgKCFub2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgICAgIG5vZGVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKG5vZGUpKTsKLSAgICB9Ci0KLSAg
ICAvLyBSZXZlcnNlIHRoZSBvcGVyYXRpb24gd2UgZGlkIHdoZW4gY3JlYXRpbmcgdGhpcyBub2Rl
LCByZWNvdmVyaW5nIGEgc3VpdGFibGUgZGVzdGluYXRpb24gY2F0ZWdvcnkgZm9yIG90aGVyd2lz
ZS1hbWJpZ3VvdXMgbWluL21heC9jbGFtcCBub2Rlcy4KLSAgICAvLyBOb3RlIHRoYXQgdGhpcyBj
YXRlZ29yeSBpcyByZWFsbHkgb25seSBnb29kIGVub3VnaCBmb3IgdGhhdCBwdXJwb3NlIGFuZCBp
cyBub3QgYWNjdXJhdGUgZm9yIG90aGVyIG5vZGUgdHlwZXM7IHdlIGNvdWxkIHVzZSBhIGJvb2xl
YW4gaW5zdGVhZC4KLSAgICBhdXRvIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjsKLSAgICBpZiAoY2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpQZXJjZW50TGVuZ3RoKQotICAgICAgICBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TGVuZ3RoOwotICAgIGVsc2UgaWYgKGNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudE51bWJlcikKLSAgICAgICAgZGVzdGluYXRpb25DYXRlZ29yeSA9
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsKLQotICAgIHJldHVybiBtYWtlVW5pcXVlPENh
bGNFeHByZXNzaW9uT3BlcmF0aW9uPihXVEZNb3ZlKG5vZGVzKSwgbV9vcGVyYXRvciwgZGVzdGlu
YXRpb25DYXRlZ29yeSk7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZG91Ymxl
VmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5cGUpIGNvbnN0Ci17Ci0gICAgYm9vbCBhbGxvd051bWJl
cnMgPSBjYWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OwotCi0gICAgcmV0
dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsmXSAoYXV0byYgY2hpbGQpIHsKLSAgICAgICAg
Q1NTVW5pdFR5cGUgY2hpbGRUeXBlID0gdW5pdFR5cGU7Ci0gICAgICAgIGlmIChhbGxvd051bWJl
cnMgJiYgdW5pdFR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIgJiYgY2hpbGQtPnByaW1p
dGl2ZVR5cGUoKSA9PSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikKLSAgICAgICAgICAgIGNoaWxk
VHlwZSA9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOwotICAgICAgICByZXR1cm4gY2hpbGQtPmRv
dWJsZVZhbHVlKGNoaWxkVHlwZSk7Ci0gICAgfSkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY09wZXJh
dGlvbk5vZGU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSkgY29uc3QKLXsKLSAgICByZXR1cm4gZXZhbHVhdGUobV9jaGlsZHJl
bi5tYXAoWyZdIChhdXRvJiBjaGlsZCkgewotICAgICAgICByZXR1cm4gY2hpbGQtPmNvbXB1dGVM
ZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7Ci0gICAgfSkpOwotfQotCi12b2lkIENTU0NhbGNPcGVy
YXRpb25Ob2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgZm9yIChhdXRvJiBjaGlsZCA6
IG1fY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERl
cGVuZGVuY2llcyh2YWx1ZXMpOwotfQotCi12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb2xs
ZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0
eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVu
KQotICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKHZhbHVlcyk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxk
ZXIpCi17Ci0gICAgYXV0byBzaG91bGRPdXRwdXRFbmNsb3NpbmdDYWxjID0gW10oY29uc3QgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlJiByb290Tm9kZSkgewotICAgICAgICBpZiAoaXM8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9k
ZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihyb290Tm9kZSk7Ci0gICAgICAgICAg
ICByZXR1cm4gb3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkgfHwgb3BlcmF0aW9uTm9kZS5p
c0NhbGNQcm9kdWN0Tm9kZSgpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiAhaXM8Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUpOwotICAgIH07Ci0gICAgCi0gICAgYm9vbCBv
dXRwdXRDYWxjID0gc2hvdWxkT3V0cHV0RW5jbG9zaW5nQ2FsYyhub2RlKTsKLSAgICBpZiAob3V0
cHV0Q2FsYykKLSAgICAgICAgYnVpbGRlci5hcHBlbmQoImNhbGMoIik7Ci0KLSAgICBidWlsZENT
U1RleHRSZWN1cnNpdmUobm9kZSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQpOwotCi0g
ICAgaWYgKG91dHB1dENhbGMpCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7Ci19Ci0KLXN0
YXRpYyBjb25zdCBjaGFyKiBmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKENhbGNPcGVyYXRvciBv
cCkKLXsKLSAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKLSAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11
bHRpcGx5OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gIiI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6
Ok1pbjogcmV0dXJuICJtaW4oIjsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiByZXR1cm4g
Im1heCgiOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogcmV0dXJuICJjbGFtcCgiOwot
ICAgIH0KLSAgICAKLSAgICByZXR1cm4gIiI7Ci19Ci0KLS8vIDxodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLXZhbHVlcy00LyNzZXJpYWxpemUtYS1jYWxjdWxhdGlvbi10cmVlPgotdm9pZCBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgbm9kZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgR3JvdXBpbmdQYXJl
bnMgcGFyZW5zKQotewotICAgIC8vIElmIHJvb3QgaXMgYSBudW1lcmljIHZhbHVlLCBvciBhIG5v
bi1tYXRoIGZ1bmN0aW9uLCBzZXJpYWxpemUgcm9vdCBwZXIgdGhlIG5vcm1hbCBydWxlcyBmb3Ig
aXQgYW5kIHJldHVybiB0aGUgcmVzdWx0LgotICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiB2YWx1ZU5vZGUgPSBkb3duY2FzdDxDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKTsKLSAgICAgICAgYnVpbGRlci5hcHBlbmQodmFs
dWVOb2RlLmN1c3RvbUNTU1RleHQoKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBp
ZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIG9wZXJh
dGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obm9kZSk7Ci0KLSAgICAg
ICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9kZSgpKSB7Ci0gICAgICAgICAgICAvLyBJ
ZiByb290IGlzIGEgU3VtIG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWlu
aW5nICIoIi4KLSAgICAgICAgICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1
ZGUpCi0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJygnKTsKLQotICAgICAgICAgICAg
Ly8gU2ltcGxpZmljYXRpb24gYWxyZWFkeSBzb3J0ZWQgY2hpbGRyZW4uCi0gICAgICAgICAgICBh
dXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIEFT
U0VSVChjaGlsZHJlbi5zaXplKCkpOwotICAgICAgICAgICAgLy8gU2VyaWFsaXplIHJvb3TigJlz
IGZpcnN0IGNoaWxkLCBhbmQgYXBwZW5kIGl0IHRvIHMuCi0gICAgICAgICAgICBidWlsZENTU1Rl
eHRSZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVpbGRlcik7Ci0KLSAgICAgICAgICAgIC8v
IEZvciBlYWNoIGNoaWxkIG9mIHJvb3QgYmV5b25kIHRoZSBmaXJzdDoKLSAgICAgICAgICAgIC8v
IElmIGNoaWxkIGlzIGEgTmVnYXRlIG5vZGUsIGFwcGVuZCAiIC0gIiB0byBzLCB0aGVuIHNlcmlh
bGl6ZSB0aGUgTmVnYXRl4oCZcyBjaGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KLSAg
ICAgICAgICAgIC8vIElmIGNoaWxkIGlzIGEgbmVnYXRpdmUgbnVtZXJpYyB2YWx1ZSwgYXBwZW5k
ICIgLSAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBuZWdhdGlvbiBvZiBjaGlsZCBhcyBub3Jt
YWwgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAgICAgICAgICAvLyBPdGhlcndpc2Us
IGFwcGVuZCAiICsgIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSBjaGlsZCBhbmQgYXBwZW5kIHRoZSBy
ZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjaGlsZHJl
bi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGF1dG8mIGNoaWxkID0gY2hpbGRyZW5b
aV07Ci0gICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAtICIpOwotICAgICAgICAgICAg
ICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+
KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsKLSAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQuZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWVOb2RlLmlzTmVnYXRpdmUoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIiAtICIpOwotICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2Vy
aWFsaXplIHRoZSBuZWdhdGlvbiBvZiBjaGlsZC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGF1
dG8gdW5pdFR5cGUgPSBwcmltaXRpdmVWYWx1ZU5vZGUudmFsdWUoKS5wcmltaXRpdmVUeXBlKCk7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgwIC0gcHJpbWl0aXZlVmFs
dWVOb2RlLnZhbHVlKCkuZG91YmxlVmFsdWUoKSwgQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBl
U3RyaW5nKHVuaXRUeXBlKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICsgIik7Ci0gICAgICAgICAgICAgICAg
YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSkKLSAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOwotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc0NhbGNQcm9kdWN0
Tm9kZSgpKSB7Ci0gICAgICAgICAgICAvLyBJZiByb290IGlzIGEgUHJvZHVjdCBub2RlLCBsZXQg
cyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIuCi0gICAgICAgICAgICBpZiAo
cGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQotICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCcoJyk7Ci0KLSAgICAgICAgICAgIC8vIFNpbXBsaWZpY2F0aW9uIGFscmVhZHkg
c29ydGVkIGNoaWxkcmVuLgotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25O
b2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpKTsKLSAg
ICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBjaGlsZCwgYW5kIGFwcGVuZCBp
dCB0byBzLgotICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0
KCksIGJ1aWxkZXIpOwotCi0gICAgICAgICAgICAvLyBGb3IgZWFjaCBjaGlsZCBvZiByb290IGJl
eW9uZCB0aGUgZmlyc3Q6Ci0gICAgICAgICAgICAvLyBJZiBjaGlsZCBpcyBhbiBJbnZlcnQgbm9k
ZSwgYXBwZW5kICIgLyAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBJbnZlcnTigJlzIGNoaWxk
IGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgotICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBh
cHBlbmQgIiAqICIgdG8gcywgdGhlbiBzZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVz
dWx0IHRvIHMuCi0gICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4u
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ld
OwotICAgICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGQpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgLyAiKTsKLSAgICAgICAgICAgICAg
ICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGRvd25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihj
aGlsZC5nZXQoKSkuY2hpbGQoKSwgYnVpbGRlcik7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgKiAiKTsKLSAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGQsIGJ1
aWxkZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3Vw
aW5nUGFyZW5zOjpJbmNsdWRlKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBJZiByb290IGlz
IGFueXRoaW5nIGJ1dCBhIFN1bSwgTmVnYXRlLCBQcm9kdWN0LCBvciBJbnZlcnQgbm9kZSwgc2Vy
aWFsaXplIGEgbWF0aCBmdW5jdGlvbiBmb3IgdGhlCi0gICAgICAgIC8vIGZ1bmN0aW9uIGNvcnJl
c3BvbmRpbmcgdG8gdGhlIG5vZGUgdHlwZSwgdHJlYXRpbmcgdGhlIG5vZGXigJlzIGNoaWxkcmVu
IGFzIHRoZSBmdW5jdGlvbuKAmXMKLSAgICAgICAgLy8gY29tbWEtc2VwYXJhdGVkIGNhbGN1bGF0
aW9uIGFyZ3VtZW50cywgYW5kIHJldHVybiB0aGUgcmVzdWx0LgotICAgICAgICBidWlsZGVyLmFw
cGVuZChmdW5jdGlvblByZWZpeEZvck9wZXJhdG9yKG9wZXJhdGlvbk5vZGUuY2FsY09wZXJhdG9y
KCkpKTsKLQotICAgICAgICBhdXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4o
KTsKLSAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgIGJ1aWxkQ1NTVGV4
dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWlsZGVyLCBHcm91cGluZ1BhcmVuczo6T21p
dCk7Ci0KLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiLCAiKTsKLSAgICAgICAgICAgIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbltpXSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6
Ok9taXQpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScp
OwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIAotICAgIGlmIChpczxDU1NDYWxjTmVnYXRl
Tm9kZT4obm9kZSkpIHsKLSAgICAgICAgYXV0byYgbmVnYXRlTm9kZSA9IGRvd25jYXN0PENTU0Nh
bGNOZWdhdGVOb2RlPihub2RlKTsKLSAgICAgICAgLy8gSWYgcm9vdCBpcyBhIE5lZ2F0ZSBub2Rl
LCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKC0xICogIi4KLSAgICAg
ICAgYnVpbGRlci5hcHBlbmQoIi0xICoiKTsKLSAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZl
KG5lZ2F0ZU5vZGUuY2hpbGQoKSwgYnVpbGRlcik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0g
ICAgCi0gICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihub2RlKSkgewotICAgICAgICBhdXRv
JiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KG5vZGUpOwotICAgICAg
ICAvLyBJZiByb290IGlzIGFuIEludmVydCBub2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFs
bHkgY29udGFpbmluZyAiKDEgLyAiLgotICAgICAgICBidWlsZGVyLmFwcGVuZCgiMSAvICIpOwot
ICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoaW52ZXJ0Tm9kZS5jaGlsZCgpLCBidWlsZGVy
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLX0KLQotdm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiY2FsYyBvcGVyYXRp
b24gIiA8PCBtX29wZXJhdG9yIDw8ICIgKGNhdGVnb3J5OiAiIDw8IGNhdGVnb3J5KCkgPDwgIiwg
dHlwZSAiIDw8IHByaW1pdGl2ZVR5cGUoKSA8PCAiKSI7Ci0KLSAgICBUZXh0U3RyZWFtOjpHcm91
cFNjb3BlIHNjb3BlKHRzKTsKLSAgICB0cyA8PCBtX2NoaWxkcmVuLnNpemUoKSA8PCAiIGNoaWxk
cmVuIjsKLSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgdHMuZHVt
cFByb3BlcnR5KCJub2RlIiwgY2hpbGQpOwotfQotCi1ib29sIENTU0NhbGNPcGVyYXRpb25Ob2Rl
OjplcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHApIGNvbnN0Ci17Ci0gICAg
aWYgKHR5cGUoKSAhPSBleHAudHlwZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBj
b25zdCBDU1NDYWxjT3BlcmF0aW9uTm9kZSYgb3RoZXIgPSBzdGF0aWNfY2FzdDxjb25zdCBDU1ND
YWxjT3BlcmF0aW9uTm9kZSY+KGV4cCk7Ci0KLSAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgIT0g
b3RoZXIubV9jaGlsZHJlbi5zaXplKCkgfHwgbV9vcGVyYXRvciAhPSBvdGhlci5tX29wZXJhdG9y
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1f
Y2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKCFjb21wYXJlQ1NTVmFsdWUobV9j
aGlsZHJlbltpXSwgb3RoZXIubV9jaGlsZHJlbltpXSkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi1kb3VibGUgQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wLCBjb25zdCBWZWN0b3I8ZG91
YmxlPiYgY2hpbGRyZW4pCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpBZGQ6IHsKLSAgICAgICAgZG91YmxlIHN1bSA9IDA7Ci0gICAgICAgIGZvciAoYXV0byYg
Y2hpbGQgOiBjaGlsZHJlbikKLSAgICAgICAgICAgIHN1bSArPSBjaGlsZDsKLSAgICAgICAgcmV0
dXJuIHN1bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgotICAgICAg
ICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDIpOwotICAgICAgICByZXR1cm4gY2hpbGRyZW5b
MF0gLSBjaGlsZHJlblsxXTsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHsKLSAg
ICAgICAgZG91YmxlIHByb2R1Y3QgPSAxOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogY2hp
bGRyZW4pCi0gICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxkOwotICAgICAgICByZXR1cm4gcHJv
ZHVjdDsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKLSAgICAgICAgQVNT
RVJUKGNoaWxkcmVuLnNpemUoKSA9PSAxIHx8IGNoaWxkcmVuLnNpemUoKSA9PSAyKTsKLSAgICAg
ICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQotICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIHJldHVybiBjaGlsZHJl
blswXSAvIGNoaWxkcmVuWzFdOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHsKLSAgICAg
ICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICBkb3VibGUgbWluaW11bSA9
IGNoaWxkcmVuWzBdOwotICAgICAgICBmb3IgKGF1dG8gY2hpbGQgOiBjaGlsZHJlbikKLSAgICAg
ICAgICAgIG1pbmltdW0gPSBzdGQ6Om1pbihtaW5pbXVtLCBjaGlsZCk7Ci0gICAgICAgIHJldHVy
biBtaW5pbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiB7Ci0gICAgICAg
IGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsKLSAgICAgICAgZG91YmxlIG1heGltdW0gPSBj
aGlsZHJlblswXTsKLSAgICAgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCi0gICAgICAg
ICAgICBtYXhpbXVtID0gc3RkOjptYXgobWF4aW11bSwgY2hpbGQpOwotICAgICAgICByZXR1cm4g
bWF4aW11bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7Ci0gICAgICAg
IGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVy
aWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAgICAgICBkb3VibGUgbWluID0gY2hp
bGRyZW5bMF07Ci0gICAgICAgIGRvdWJsZSB2YWx1ZSA9IGNoaWxkcmVuWzFdOwotICAgICAgICBk
b3VibGUgbWF4ID0gY2hpbGRyZW5bMl07Ci0gICAgICAgIHJldHVybiBzdGQ6Om1heChtaW4sIHN0
ZDo6bWluKHZhbHVlLCBtYXgpKTsKLSAgICB9Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOwotICAgIHJldHVybiAwOwotfQotCi0KLWNsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9kZVBh
cnNlciB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
KENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkKLSAgICAgICAgOiBtX2Rl
c3RpbmF0aW9uQ2F0ZWdvcnkoZGVzdGluYXRpb25DYXRlZ29yeSkKLSAgICB7IH0KLQotICAgIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdl
LCBDU1NWYWx1ZUlEIGZ1bmN0aW9uKTsKLSAgICAKLXByaXZhdGU6Ci0gICAgY2hhciBvcGVyYXRv
clZhbHVlKGNvbnN0IENTU1BhcnNlclRva2VuJiB0b2tlbikKLSAgICB7Ci0gICAgICAgIGlmICh0
b2tlbi50eXBlKCkgPT0gRGVsaW1pdGVyVG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gdG9rZW4u
ZGVsaW1pdGVyKCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGJvb2wgcGFyc2VW
YWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4m
KTsKLSAgICBib29sIHBhcnNlVmFsdWVUZXJtKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVw
dGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0gICAgYm9vbCBwYXJzZUNhbGNG
dW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiwgQ1NTVmFsdWVJRCwgaW50IGRlcHRoLCBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VDYWxjU3VtKENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
Jik7Ci0gICAgYm9vbCBwYXJzZUNhbGNQcm9kdWN0KENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQg
ZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0gICAgYm9vbCBwYXJzZUNh
bGNWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYpOwotCi0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2Rlc3RpbmF0aW9u
Q2F0ZWdvcnk7Ci19OwotCi0vLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMt
NC8jY2FsYy1zeW50YXg+OgotLy8gPGNhbGMoKT4gID0gY2FsYyggPGNhbGMtc3VtPiApCi0vLyA8
bWluKCk+ICAgPSBtaW4oIDxjYWxjLXN1bT4jICkKLS8vIDxtYXgoKT4gICA9IG1heCggPGNhbGMt
c3VtPiMgKQotLy8gPGNsYW1wKCk+ID0gY2xhbXAoIDxjYWxjLXN1bT4jezN9ICkKLS8vIDxzaW4o
KT4gICA9IHNpbiggPGNhbGMtc3VtPiApCi0vLyA8Y29zKCk+ICAgPSBjb3MoIDxjYWxjLXN1bT4g
KQotLy8gPHRhbigpPiAgID0gdGFuKCA8Y2FsYy1zdW0+ICkKLS8vIDxhc2luKCk+ICA9IGFzaW4o
IDxjYWxjLXN1bT4gKQotLy8gPGFjb3MoKT4gID0gYWNvcyggPGNhbGMtc3VtPiApCi0vLyA8YXRh
bigpPiAgPSBhdGFuKCA8Y2FsYy1zdW0+ICkKLS8vIDxhdGFuMigpPiA9IGF0YW4yKCA8Y2FsYy1z
dW0+LCA8Y2FsYy1zdW0+ICkKLS8vIDxwb3coKT4gICA9IHBvdyggPGNhbGMtc3VtPiwgPGNhbGMt
c3VtPiApCi0vLyA8c3FydCgpPiAgPSBzcXJ0KCA8Y2FsYy1zdW0+ICkKLS8vIDxoeXBvdCgpPiA9
IGh5cG90KCA8Y2FsYy1zdW0+IyApCi0vLyA8Y2FsYy1zdW0+ID0gPGNhbGMtcHJvZHVjdD4gWyBb
ICcrJyB8ICctJyBdIDxjYWxjLXByb2R1Y3Q+IF0qCi0vLyA8Y2FsYy1wcm9kdWN0PiA9IDxjYWxj
LXZhbHVlPiBbIFsgJyonIHwgJy8nIF0gPGNhbGMtdmFsdWU+IF0qCi0vLyA8Y2FsYy12YWx1ZT4g
PSA8bnVtYmVyPiB8IDxkaW1lbnNpb24+IHwgPHBlcmNlbnRhZ2U+IHwgKCA8Y2FsYy1zdW0+ICkK
LVJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNl
cjo6cGFyc2VDYWxjKENTU1BhcnNlclRva2VuUmFuZ2UgdG9rZW5zLCBDU1NWYWx1ZUlEIGZ1bmN0
aW9uKQotewotICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOwotCi0gICAgUmVmUHRyPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4gcmVzdWx0OwotICAgIGJvb2wgb2sgPSBwYXJzZUNhbGNGdW5j
dGlvbih0b2tlbnMsIGZ1bmN0aW9uLCAwLCByZXN1bHQpOwotICAgIGlmICghb2sgfHwgIXRva2Vu
cy5hdEVuZCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGlmICghcmVzdWx0KQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJl
YW0gPDwgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjICIgPDwgcHJldHR5
UHJpbnROb2RlKCpyZXN1bHQpKTsKLQotICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2Rl
OjpzaW1wbGlmeShyZXN1bHQucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICBMT0dfV0lUSF9TVFJF
QU0oQ2FsYywgc3RyZWFtIDw8ICJDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2Fs
YyAtIGFmdGVyIHNpbXBsaWZpY2F0aW9uICIgPDwgcHJldHR5UHJpbnROb2RlKCpyZXN1bHQpKTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWVudW0gUGFyc2VTdGF0ZSB7Ci0gICAgT0ssCi0g
ICAgVG9vRGVlcCwKLSAgICBOb01vcmVUb2tlbnMKLX07Ci0KLXN0YXRpYyBQYXJzZVN0YXRlIGNo
ZWNrRGVwdGhBbmRJbmRleChpbnQgZGVwdGgsIENTU1BhcnNlclRva2VuUmFuZ2UgdG9rZW5zKQot
ewotICAgIGlmICh0b2tlbnMuYXRFbmQoKSkKLSAgICAgICAgcmV0dXJuIE5vTW9yZVRva2VuczsK
LSAgICBpZiAoZGVwdGggPiBtYXhFeHByZXNzaW9uRGVwdGgpIHsKLSAgICAgICAgTE9HX1dJVEhf
U1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRGVwdGggIiA8PCBkZXB0aCA8PCAiIGV4Y2VlZGVkIG1h
eEV4cHJlc3Npb25EZXB0aCAiIDw8IG1heEV4cHJlc3Npb25EZXB0aCk7Ci0gICAgICAgIHJldHVy
biBUb29EZWVwOwotICAgIH0KLSAgICByZXR1cm4gT0s7Ci19Ci0KLWJvb2wgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNGdW5jdGlvbihDU1NQYXJzZXJUb2tlblJhbmdlJiB0
b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb25JRCwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQotewotICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVw
dGgsIHRva2VucykgIT0gT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vICJhcmd1
bWVudHMiIHJlZmVycyB0byB0aGluZ3MgYmV0d2VlbiBjb21tYXMuCi0gICAgdW5zaWduZWQgbWlu
QXJndW1lbnRDb3VudCA9IDE7Ci0gICAgT3B0aW9uYWw8dW5zaWduZWQ+IG1heEFyZ3VtZW50Q291
bnQ7Ci0KLSAgICBzd2l0Y2ggKGZ1bmN0aW9uSUQpIHsKLSAgICBjYXNlIENTU1ZhbHVlTWluOgot
ICAgIGNhc2UgQ1NTVmFsdWVNYXg6Ci0gICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSBzdGQ6Om51
bGxvcHQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKLSAgICAgICAg
bWluQXJndW1lbnRDb3VudCA9IDM7Ci0gICAgICAgIG1heEFyZ3VtZW50Q291bnQgPSAzOwotICAg
ICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKLSAgICAgICAgbWF4QXJndW1lbnRD
b3VudCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIC8vIFRPRE86IGNsYW1wLCBzaW4sIGNvcywg
dGFuLCBhc2luLCBhY29zLCBhdGFuLCBhdGFuMiwgcG93LCBzcXJ0LCBoeXBvdC4KLSAgICBkZWZh
dWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4+IG5vZGVzOwotCi0gICAgYm9vbCByZXF1aXJlQ29tbWEgPSBmYWxzZTsKLSAg
ICB1bnNpZ25lZCBhcmd1bWVudENvdW50ID0gMDsKLSAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgp
KSB7Ci0gICAgICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgICAgICBpZiAocmVx
dWlyZUNvbW1hKSB7Ci0gICAgICAgICAgICBpZiAodG9rZW5zLmNvbnN1bWUoKS50eXBlKCkgIT0g
Q29tbWFUb2tlbikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB0
b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFJlZlB0cjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5vZGU7Ci0gICAgICAgIGlmICghcGFyc2VDYWxjU3VtKHRv
a2VucywgZGVwdGgsIG5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
ICsrYXJndW1lbnRDb3VudDsKLSAgICAgICAgaWYgKG1heEFyZ3VtZW50Q291bnQgJiYgYXJndW1l
bnRDb3VudCA+IG1heEFyZ3VtZW50Q291bnQudmFsdWUoKSkKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBub2Rlcy5hcHBlbmQobm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAg
ICAgICAgcmVxdWlyZUNvbW1hID0gdHJ1ZTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGFyZ3VtZW50
Q291bnQgPCBtaW5Bcmd1bWVudENvdW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBz
d2l0Y2ggKGZ1bmN0aW9uSUQpIHsKLSAgICBjYXNlIENTU1ZhbHVlTWluOgotICAgICAgICByZXN1
bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVy
YXRvcjo6TWluLCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5KTsKLSAgICAg
ICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZU1heDoKLSAgICAgICAgcmVzdWx0ID0gQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6Ok1heCwg
V1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7Ci0gICAgICAgIGJyZWFrOwot
ICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKLSAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3I6OkNsYW1wLCBXVEZNb3Zl
KG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBDU1NWYWx1ZVdlYmtpdENhbGM6Ci0gICAgY2FzZSBDU1NWYWx1ZUNhbGM6Ci0gICAgICAgIHJl
c3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShub2RlcykpOwot
ICAgICAgICBicmVhazsKLSAgICAvLyBUT0RPOiBjbGFtcCwgc2luLCBjb3MsIHRhbiwgYXNpbiwg
YWNvcywgYXRhbiwgYXRhbjIsIHBvdywgc3FydCwgaHlwb3QKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gISFyZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZVZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmIHRv
a2VucywgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBDU1NQ
YXJzZXJUb2tlbiB0b2tlbiA9IHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwot
ICAgIGlmICghKHRva2VuLnR5cGUoKSA9PSBOdW1iZXJUb2tlbiB8fCB0b2tlbi50eXBlKCkgPT0g
UGVyY2VudGFnZVRva2VuIHx8IHRva2VuLnR5cGUoKSA9PSBEaW1lbnNpb25Ub2tlbikpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBhdXRvIHR5cGUgPSB0b2tlbi51bml0VHlwZSgp
OwotICAgIGlmIChjYWxjVW5pdENhdGVnb3J5KHR5cGUpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok90aGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgcmVzdWx0ID0gQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodG9r
ZW4ubnVtZXJpY1ZhbHVlKCksIHR5cGUpKTsKLSAgICAKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1ZhbHVlKENTU1BhcnNl
clRva2VuUmFuZ2UmIHRva2VucywgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPiYgcmVzdWx0KQotewotICAgIGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2Vu
cykgIT0gT0spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8gZmluZEZ1bmN0aW9u
SWQgPSBbJl0oQ1NTVmFsdWVJRCYgZnVuY3Rpb25JZCkgewotICAgICAgICBpZiAodG9rZW5zLnBl
ZWsoKS50eXBlKCkgPT0gTGVmdFBhcmVudGhlc2lzVG9rZW4pIHsKLSAgICAgICAgICAgIGZ1bmN0
aW9uSWQgPSBDU1NWYWx1ZUNhbGM7Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
fQotCi0gICAgICAgIGZ1bmN0aW9uSWQgPSB0b2tlbnMucGVlaygpLmZ1bmN0aW9uSWQoKTsKLSAg
ICAgICAgcmV0dXJuIENTU0NhbGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oZnVuY3Rpb25JZCk7Ci0g
ICAgfTsKLQotICAgIENTU1ZhbHVlSUQgZnVuY3Rpb25JZDsKLSAgICBpZiAoZmluZEZ1bmN0aW9u
SWQoZnVuY3Rpb25JZCkpIHsKLSAgICAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSBpbm5lclJhbmdl
ID0gdG9rZW5zLmNvbnN1bWVCbG9jaygpOwotICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3Bh
Y2UoKTsKLSAgICAgICAgaW5uZXJSYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgICAgICBy
ZXR1cm4gcGFyc2VDYWxjRnVuY3Rpb24oaW5uZXJSYW5nZSwgZnVuY3Rpb25JZCwgZGVwdGggKyAx
LCByZXN1bHQpOwotICAgIH0KLQotICAgIHJldHVybiBwYXJzZVZhbHVlKHRva2VucywgcmVzdWx0
KTsKLX0KLQotYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1Byb2R1
Y3QoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChk
ZXB0aCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZmlyc3RWYWx1ZTsKLSAgICBpZiAoIXBhcnNlQ2FsY1Zh
bHVlKHRva2VucywgZGVwdGgsIGZpcnN0VmFsdWUpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5vZGVzOwotCi0gICAgd2hp
bGUgKCF0b2tlbnMuYXRFbmQoKSkgewotICAgICAgICBjaGFyIG9wZXJhdG9yQ2hhcmFjdGVyID0g
b3BlcmF0b3JWYWx1ZSh0b2tlbnMucGVlaygpKTsKLSAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFj
dGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpICYmIG9wZXJh
dG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6RGl2aWRlKSkK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKLSAgICAgICAgCi0gICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IG5leHRWYWx1ZTsKLSAgICAgICAgaWYgKCFwYXJzZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRoLCBu
ZXh0VmFsdWUpIHx8ICFuZXh0VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVy
YXRvcjo6RGl2aWRlKSkKLSAgICAgICAgICAgIG5leHRWYWx1ZSA9IENTU0NhbGNJbnZlcnROb2Rl
OjpjcmVhdGUobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAgIGlmIChmaXJz
dFZhbHVlKQotICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGZpcnN0VmFsdWUucmVsZWFzZU5vbk51
bGwoKSk7Ci0KLSAgICAgICAgbm9kZXMuYXBwZW5kKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKLSAgICB9Ci0KLSAgICBpZiAobm9kZXMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHJlc3VsdCA9
IFdURk1vdmUoZmlyc3RWYWx1ZSk7Ci0gICAgICAgIHJldHVybiAhIXJlc3VsdDsKLSAgICB9Ci0K
LSAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3Zl
KG5vZGVzKSk7Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi1ib29sIENTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjU3VtKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2Vucywg
aW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQotewotICAg
IGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFs
dWU7Ci0gICAgaWYgKCFwYXJzZUNhbGNQcm9kdWN0KHRva2VucywgZGVwdGgsIGZpcnN0VmFsdWUp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+IG5vZGVzOwotCi0gICAgd2hpbGUgKCF0b2tlbnMuYXRFbmQoKSkgewotICAgICAg
ICBjaGFyIG9wZXJhdG9yQ2hhcmFjdGVyID0gb3BlcmF0b3JWYWx1ZSh0b2tlbnMucGVlaygpKTsK
LSAgICAgICAgaWYgKG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNP
cGVyYXRvcjo6QWRkKSAmJiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihD
YWxjT3BlcmF0b3I6OlN1YnRyYWN0KSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlm
ICgoJnRva2Vucy5wZWVrKCkgLSAxKS0+dHlwZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2FsYygxcHgrIDJweCkgaXMgaW52YWxpZAotCi0gICAg
ICAgIHRva2Vucy5jb25zdW1lKCk7Ci0gICAgICAgIGlmICh0b2tlbnMucGVlaygpLnR5cGUoKSAh
PSBXaGl0ZXNwYWNlVG9rZW4pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4
ICsycHgpIGlzIGludmFsaWQKLQotICAgICAgICB0b2tlbnMuY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKLQotICAgICAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBuZXh0VmFs
dWU7Ci0gICAgICAgIGlmICghcGFyc2VDYWxjUHJvZHVjdCh0b2tlbnMsIGRlcHRoLCBuZXh0VmFs
dWUpIHx8ICFuZXh0VmFsdWUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKG9wZXJhdG9yQ2hhcmFjdGVyID09IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6
U3VidHJhY3QpKQotICAgICAgICAgICAgbmV4dFZhbHVlID0gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNy
ZWF0ZShuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7Ci0KLSAgICAgICAgaWYgKGZpcnN0VmFs
dWUpCi0gICAgICAgICAgICBub2Rlcy5hcHBlbmQoZmlyc3RWYWx1ZS5yZWxlYXNlTm9uTnVsbCgp
KTsKLQotICAgICAgICBub2Rlcy5hcHBlbmQobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwot
ICAgIH0KLQotICAgIGlmIChub2Rlcy5pc0VtcHR5KCkpIHsKLSAgICAgICAgcmVzdWx0ID0gV1RG
TW92ZShmaXJzdFZhbHVlKTsKLSAgICAgICAgcmV0dXJuICEhcmVzdWx0OwotICAgIH0KLQotICAg
IHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZShub2Rlcykp
OwotICAgIHJldHVybiAhIXJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+IGNyZWF0ZUJsZW5kSGFsZihjb25zdCBMZW5ndGgmIGxlbmd0aCwgY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBjcmVhdGVD
U1MobGVuZ3RoLCBzdHlsZSksCi0gICAgICAgIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNy
ZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByb2dyZXNzLCBDU1NVbml0VHlwZTo6Q1NT
X05VTUJFUikpKTsKLX0KLQotc3RhdGljIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
Pj4gY3JlYXRlQ1NTKGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPj4mIG5vZGVzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCi17Ci0gICAgVmVjdG9yPFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7Ci0gICAgdmFsdWVzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkobm9kZXMuc2l6ZSgpKTsKLSAgICBmb3IgKGF1dG8mIG5vZGUgOiBub2Rlcykg
ewotICAgICAgICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1MoKm5vZGUsIHN0eWxlKTsKLSAgICAg
ICAgaWYgKCFjc3NOb2RlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHZhbHVlcy51
bmNoZWNrZWRBcHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHZhbHVlczsKLX0KLQotc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNy
ZWF0ZUNTUyhjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSkKLXsKLSAgICBzd2l0Y2ggKG5vZGUudHlwZSgpKSB7Ci0gICAgY2FzZSBDYWxjRXhw
cmVzc2lvbk5vZGVUeXBlOjpOdW1iZXI6IHsKLSAgICAgICAgZmxvYXQgdmFsdWUgPSBkb3duY2Fz
dDxDYWxjRXhwcmVzc2lvbk51bWJlcj4obm9kZSkudmFsdWUoKTsgLy8gZG91YmxlPwotICAgICAg
ICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUodmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7Ci0gICAgfQotICAg
IGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoOiB7Ci0gICAgICAgIGF1dG8mIGxl
bmd0aCA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihub2RlKS5sZW5ndGgoKTsKLSAg
ICAgICAgaWYgKCFsZW5ndGguaXNQZXJjZW50KCkgJiYgbGVuZ3RoLmlzWmVybygpKQotICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHJldHVybiBjcmVhdGVDU1MobGVuZ3RoLCBz
dHlsZSk7Ci0gICAgfQotCi0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlv
bjogewotICAgICAgICBhdXRvIGNoaWxkTm9kZSA9IGNyZWF0ZUNTUygqZG93bmNhc3Q8Q2FsY0V4
cHJlc3Npb25OZWdhdGlvbj4obm9kZSkuY2hpbGQoKSwgc3R5bGUpOwotICAgICAgICBpZiAoIWNo
aWxkTm9kZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NT
Q2FsY05lZ2F0ZU5vZGU6OmNyZWF0ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAg
fQotICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uOiB7Ci0gICAgICAg
IGF1dG8gY2hpbGROb2RlID0gY3JlYXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkludmVy
c2lvbj4obm9kZSkuY2hpbGQoKSwgc3R5bGUpOwotICAgICAgICBpZiAoIWNoaWxkTm9kZSkKLSAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4gQ1NTQ2FsY0ludmVydE5v
ZGU6OmNyZWF0ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotICAgIGNhc2Ug
Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uOiB7Ci0gICAgICAgIGF1dG8mIG9wZXJh
dGlvbk5vZGUgPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4obm9kZSk7Ci0gICAg
ICAgIGF1dG8mIG9wZXJhdGlvbkNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwot
ICAgICAgICBDYWxjT3BlcmF0b3Igb3AgPSBvcGVyYXRpb25Ob2RlLmdldE9wZXJhdG9yKCk7Ci0g
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKG9wKSB7Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9y
OjpBZGQ6IHsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9u
Q2hpbGRyZW4sIHN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBpZiAoY2hpbGRyZW4u
c2l6ZSgpID09IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2hpbGRyZW5bMF0p
OwotICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RG
TW92ZShjaGlsZHJlbikpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpT
dWJ0cmFjdDogewotICAgICAgICAgICAgQVNTRVJUKG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSA9
PSAyKTsKLQotICAgICAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2
YWx1ZXM7Ci0gICAgICAgICAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcGVyYXRp
b25DaGlsZHJlbi5zaXplKCkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIGZpcnN0
Q2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzBdLCBzdHlsZSk7Ci0gICAgICAg
ICAgICBhdXRvIHNlY29uZENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblsxXSwg
c3R5bGUpOwotCi0gICAgICAgICAgICBpZiAoIXNlY29uZENoaWxkKQotICAgICAgICAgICAgICAg
IHJldHVybiBmaXJzdENoaWxkOwotCi0gICAgICAgICAgICBhdXRvIG5lZ2F0ZU5vZGUgPSBDU1ND
YWxjTmVnYXRlTm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOwotICAg
ICAgICAgICAgaWYgKCFmaXJzdENoaWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBuZWdhdGVO
b2RlOwotCi0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51
bGwoKSk7Ci0gICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUobmVnYXRlTm9kZSkpOwot
Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZN
b3ZlKHZhbHVlcykpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0
aXBseTogewotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhvcGVyYXRpb25D
aGlsZHJlbiwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3ZlKGNoaWxkcmVuKSk7Ci0gICAgICAg
IH0KLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogewotICAgICAgICAgICAgQVNT
RVJUKG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSA9PSAyKTsKLQotICAgICAgICAgICAgVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7Ci0gICAgICAgICAgICB2YWx1ZXMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBhdXRvIGZpcnN0Q2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlv
bkNoaWxkcmVuWzBdLCBzdHlsZSk7Ci0gICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2hp
bGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7Ci0gICAgICAgICAg
ICBpZiAoIXNlY29uZENoaWxkKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgYXV0byBpbnZlcnROb2RlID0gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZShzZWNv
bmRDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChm
aXJzdENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICAgICAgdmFsdWVzLmFwcGVuZChX
VEZNb3ZlKGludmVydE5vZGUpKTsKLQotICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpjcmVhdGVQcm9kdWN0KGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUp
KTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgotICAgICAgICBj
YXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6
IHsKLSAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRy
ZW4sIHN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJh
dGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChvcCwgV1RGTW92ZShjaGlsZHJlbiksIG9w
ZXJhdGlvbk5vZGUuZGVzdGluYXRpb25DYXRlZ29yeSgpKTsKLSAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLSAgICBjYXNlIENhbGNFeHByZXNzaW9u
Tm9kZVR5cGU6OkJsZW5kTGVuZ3RoOiB7Ci0gICAgICAgIC8vIEZJWE1FOiAoaHR0cDovL3dlYmtp
dC5vcmcvYi8xMjIwMzYpIENyZWF0ZSBhIENTU0NhbGNFeHByZXNzaW9uTm9kZSBlcXVpdmFsZW50
IG9mIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguCi0gICAgICAgIGF1dG8mIGJsZW5kID0gZG93
bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4obm9kZSk7Ci0gICAgICAgIGZsb2F0IHBy
b2dyZXNzID0gYmxlbmQucHJvZ3Jlc3MoKTsKLSAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRp
b25Ob2RlOjpjcmVhdGUoQ2FsY09wZXJhdG9yOjpBZGQsIGNyZWF0ZUJsZW5kSGFsZihibGVuZC5m
cm9tKCksIHN0eWxlLCAxIC0gcHJvZ3Jlc3MpLCBjcmVhdGVCbGVuZEhhbGYoYmxlbmQudG8oKSwg
c3R5bGUsIHByb2dyZXNzKSk7Ci0gICAgfQotICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6VW5kZWZpbmVkOgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci19Ci0KLXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiBjcmVhdGVDU1MoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkKLXsKLSAgICBzd2l0Y2ggKGxlbmd0aC50eXBlKCkpIHsKLSAgICBjYXNlIExlbmd0aFR5cGU6
OlBlcmNlbnQ6Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpGaXhlZDoKLSAgICAgICAgcmV0dXJuIENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KGxlbmd0aCwgc3R5bGUpKTsKLSAgICBjYXNlIExlbmd0aFR5cGU6OkNhbGN1bGF0ZWQ6Ci0gICAg
ICAgIHJldHVybiBjcmVhdGVDU1MobGVuZ3RoLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9u
KCksIHN0eWxlKTsKLSAgICBjYXNlIExlbmd0aFR5cGU6OkF1dG86Ci0gICAgY2FzZSBMZW5ndGhU
eXBlOjpJbnRyaW5zaWM6Ci0gICAgY2FzZSBMZW5ndGhUeXBlOjpNaW5JbnRyaW5zaWM6Ci0gICAg
Y2FzZSBMZW5ndGhUeXBlOjpNaW5Db250ZW50OgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6TWF4Q29u
dGVudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6OkZpbGxBdmFpbGFibGU6Ci0gICAgY2FzZSBMZW5n
dGhUeXBlOjpGaXRDb250ZW50OgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6UmVsYXRpdmU6Ci0gICAg
Y2FzZSBMZW5ndGhUeXBlOjpVbmRlZmluZWQ6Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotU3RyaW5nIENTU0NhbGNWYWx1ZTo6
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0Ci17Ci0gICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAg
IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQobV9leHByZXNzaW9uLmdldCgpLCBi
dWlsZGVyKTsKLSAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOwotfQotCi1ib29sIENTU0Nh
bGNWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0NhbGNWYWx1ZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIGNvbXBhcmVDU1NWYWx1ZShtX2V4cHJlc3Npb24sIG90aGVyLm1fZXhwcmVzc2lvbik7
Ci19Ci0KLWlubGluZSBkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVybWl0dGVkUmFuZ2Uo
ZG91YmxlIHZhbHVlKSBjb25zdAotewotICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9Ob25OZWdh
dGl2ZSAmJiB2YWx1ZSA8IDAgPyAwIDogdmFsdWU7Ci19Ci0KLWRvdWJsZSBDU1NDYWxjVmFsdWU6
OmRvdWJsZVZhbHVlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRlZFJhbmdl
KG1fZXhwcmVzc2lvbi0+ZG91YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKSk7Ci19Ci0KLWRvdWJs
ZSBDU1NDYWxjVmFsdWU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKLXsKLSAgICByZXR1cm4gY2xhbXBUb1Blcm1p
dHRlZFJhbmdlKG1fZXhwcmVzc2lvbi0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKSk7
Ci19Ci0KLWJvb2wgQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihDU1NWYWx1ZUlEIGZ1bmN0
aW9uSWQpCi17Ci0gICAgc3dpdGNoIChmdW5jdGlvbklkKSB7Ci0gICAgY2FzZSBDU1NWYWx1ZUNh
bGM6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENhbGM6Ci0gICAgY2FzZSBDU1NWYWx1ZU1pbjoK
LSAgICBjYXNlIENTU1ZhbHVlTWF4OgotICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ZhbHVlOjpkdW1wKFRleHRTdHJl
YW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8IGluZGVudCA8PCAiKCIgPDwgIkNTU0NhbGNWYWx1
ZSI7Ci0KLSAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKLSAgICBtdWx0aWxpbmVTdHJl
YW0uc2V0SW5kZW50KHRzLmluZGVudCgpICsgMik7Ci0KLSAgICBtdWx0aWxpbmVTdHJlYW0uZHVt
cFByb3BlcnR5KCJzaG91bGQgY2xhbXAgbm9uLW5lZ2F0aXZlIiwgbV9zaG91bGRDbGFtcFRvTm9u
TmVnYXRpdmUpOwotICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoImV4cHJlc3Npb24i
LCBtX2V4cHJlc3Npb24uZ2V0KCkpOwotCi0gICAgdHMgPDwgbXVsdGlsaW5lU3RyZWFtLnJlbGVh
c2UoKTsKLSAgICB0cyA8PCAiKVxuIjsKLX0KLQotUmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2Fs
Y1ZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5S
YW5nZSYgdG9rZW5zLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZh
bHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHBhcnNl
cihkZXN0aW5hdGlvbkNhdGVnb3J5KTsKLSAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJzZXIucGFy
c2VDYWxjKHRva2VucywgZnVuY3Rpb24pOwotICAgIGlmICghZXhwcmVzc2lvbikKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZihuZXcgQ1NTQ2FsY1Zh
bHVlKGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSwgcmFuZ2UgIT0gVmFsdWVSYW5nZTo6QWxs
KSk7Ci0gICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY1ZhbHVlOjpj
cmVhdGUgIiA8PCAqcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotICAgIAotUmVmUHRy
PENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1
ZSYgdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLXsKLSAgICBhdXRvIGV4cHJlc3Np
b24gPSBjcmVhdGVDU1ModmFsdWUuZXhwcmVzc2lvbigpLCBzdHlsZSk7Ci0gICAgaWYgKCFleHBy
ZXNzaW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIGF1dG8gc2ltcGxpZmllZEV4
cHJlc3Npb24gPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkoZXhwcmVzc2lvbi5yZWxl
YXNlTm9uTnVsbCgpKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNW
YWx1ZShXVEZNb3ZlKHNpbXBsaWZpZWRFeHByZXNzaW9uKSwgdmFsdWUuc2hvdWxkQ2xhbXBUb05v
bk5lZ2F0aXZlKCkpKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDU1ND
YWxjVmFsdWU6OmNyZWF0ZSBmcm9tIENhbGN1bGF0aW9uVmFsdWU6ICIgPDwgKnJlc3VsdCk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiB0cywgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLXsKLSAgICBzd2l0Y2ggKGNhdGVn
b3J5KSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6IHRzIDw8ICJudW1i
ZXIiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDogdHMgPDwg
Imxlbmd0aCI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDog
dHMgPDwgInBlcmNlbnQiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnROdW1iZXI6IHRzIDw8ICJwZXJjZW50LW51bWJlciI7IGJyZWFrOwotICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDogdHMgPDwgInBlcmNlbnQtbGVuZ3RoIjsg
YnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTogdHMgPDwgImFuZ2xl
IjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOiB0cyA8PCAidGlt
ZSI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OiB0cyA8
PCAiZnJlcXVlbmN5IjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
cjogdHMgPDwgIm90aGVyIjsgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRzOwotfQotCi1U
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDU1NDYWxjVmFsdWUm
IHZhbHVlKQotewotICAgIHZhbHVlLmR1bXAodHMpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRp
b25WYWx1ZS5oCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2Fs
Y3VsYXRpb25WYWx1ZS5oCShub25leGlzdGVudCkKQEAgLTEsMTUzICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICog
ZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJh
Z21hIG9uY2UKLQotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NT
UHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLQotbmFtZXNw
YWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFtOwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LWNsYXNzIENTU1BhcnNlclRva2VuUmFuZ2U7Ci1jbGFzcyBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLWNsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9kZSA6
IHB1YmxpYyBSZWZDb3VudGVkPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gewotcHVibGljOgotICAg
IGVudW0gVHlwZSB7Ci0gICAgICAgIENzc0NhbGNQcmltaXRpdmVWYWx1ZSA9IDEsCi0gICAgICAg
IENzc0NhbGNPcGVyYXRpb24sCi0gICAgICAgIENzc0NhbGNOZWdhdGUsCi0gICAgICAgIENzc0Nh
bGNJbnZlcnQsCi0gICAgfTsKLQotICAgIHZpcnR1YWwgfkNTU0NhbGNFeHByZXNzaW9uTm9kZSgp
ID0gZGVmYXVsdDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJl
c3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgPSAwOwotICAgIHZp
cnR1YWwgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9jYXRlZ29yeSA9PSBvdGhlci5t
X2NhdGVnb3J5OyB9Ci0gICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7Ci0gICAgdmly
dHVhbCBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgPSAwOwotCi0gICAgdmlydHVh
bCB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NT
UHJvcGVydHlJRD4mKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGNvbGxlY3REaXJlY3RS
b290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29u
c3QgPSAwOwotCi0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0
dXJuIG1fY2F0ZWdvcnk7IH0KLQotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBj
b25zdCA9IDA7Ci0KLXByb3RlY3RlZDoKLSAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLSAgICAgICAgOiBtX2NhdGVnb3J5KGNhdGVnb3J5KQot
ICAgIHsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2NhdGVn
b3J5OwotfTsKLQotY2xhc3MgQ1NTQ2FsY1ZhbHVlIGZpbmFsIDogcHVibGljIENTU1ZhbHVlIHsK
LXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKENTU1ZhbHVl
SUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBDYWxjdWxhdGlvbkNhdGVn
b3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnksIFZhbHVlUmFuZ2UpOwotCi0gICAgc3RhdGljIFJlZlB0
cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiwgY29uc3QgUmVu
ZGVyU3R5bGUmKTsKLQotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnkoKSBjb25zdCB7
IHJldHVybiBtX2V4cHJlc3Npb24tPmNhdGVnb3J5KCk7IH0KLSAgICBkb3VibGUgZG91YmxlVmFs
dWUoKSBjb25zdDsKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmKSBjb25zdDsKLSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9leHByZXNzaW9uLT5wcmltaXRpdmVUeXBlKCk7IH0KLQotICAgIFJl
ZjxDYWxjdWxhdGlvblZhbHVlPiBjcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdDsKLSAgICB2b2lkIHNldFBlcm1pdHRlZFZhbHVlUmFu
Z2UoVmFsdWVSYW5nZSk7Ci0KLSAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVw
ZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdDsKLSAgICB2b2lkIGNvbGxl
Y3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5
SUQ+JikgY29uc3Q7Ci0KLSAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwotICAgIGJv
b2wgZXF1YWxzKGNvbnN0IENTU0NhbGNWYWx1ZSYpIGNvbnN0OwotICAgIAotICAgIHN0YXRpYyBi
b29sIGlzQ2FsY0Z1bmN0aW9uKENTU1ZhbHVlSUQpOwotCi0gICAgdm9pZCBkdW1wKFRleHRTdHJl
YW0mKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBDU1NDYWxjVmFsdWUoUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJiwgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUpOwotCi0gICAgZG91
YmxlIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShkb3VibGUpIGNvbnN0OwotCi0gICAgY29uc3QgUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbV9leHByZXNzaW9uOwotICAgIGJvb2wgbV9zaG91bGRD
bGFtcFRvTm9uTmVnYXRpdmU7Ci19OwotCi1pbmxpbmUgQ1NTQ2FsY1ZhbHVlOjpDU1NDYWxjVmFs
dWUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBleHByZXNzaW9uLCBib29sIHNob3VsZENs
YW1wVG9Ob25OZWdhdGl2ZSkKLSAgICA6IENTU1ZhbHVlKENhbGN1bGF0aW9uQ2xhc3MpCi0gICAg
LCBtX2V4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKLSAgICAsIG1fc2hvdWxkQ2xhbXBU
b05vbk5lZ2F0aXZlKHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSkKLXsKLX0KLQotaW5saW5lIFJl
ZjxDYWxjdWxhdGlvblZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUo
Y29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShtX2V4cHJlc3Npb24tPmNyZWF0
ZUNhbGNFeHByZXNzaW9uKGNvbnZlcnNpb25EYXRhKSwKLSAgICAgICAgbV9zaG91bGRDbGFtcFRv
Tm9uTmVnYXRpdmUgPyBWYWx1ZVJhbmdlOjpOb25OZWdhdGl2ZSA6IFZhbHVlUmFuZ2U6OkFsbCk7
Ci19Ci0KLWlubGluZSB2b2lkIENTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5nZShW
YWx1ZVJhbmdlIHJhbmdlKQotewotICAgIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID0gcmFu
Z2UgIT0gVmFsdWVSYW5nZTo6QWxsOwotfQotCi1pbmxpbmUgdm9pZCBDU1NDYWxjVmFsdWU6OmNv
bGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBtX2V4cHJlc3Npb24tPmNvbGxlY3REaXJlY3RDb21w
dXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLWlubGluZSB2b2lkIENTU0NhbGNW
YWx1ZTo6Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8
Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKLXsKLSAgICBtX2V4cHJlc3Npb24tPmNvbGxl
Y3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwotfQotCi1XVEY6
OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgQ2FsY3VsYXRpb25DYXRl
Z29yeSk7Ci1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29u
c3QgQ1NTQ2FsY1ZhbHVlJik7Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19DU1NfVkFMVUUoQ1NTQ2FsY1ZhbHVlLCBpc0NhbGNWYWx1ZSgpKQotCi0j
ZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShUb1Zh
bHVlVHlwZU5hbWUsIHByZWRpY2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihX
ZWJDb3JlOjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKSB7IHJldHVybiBub2RlLnByZWRp
Y2F0ZTsgfSBcCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcg
KzI3LDcgQEAKICNpbmNsdWRlICJDU1NHcmFkaWVudFZhbHVlLmgiCiAKICNpbmNsdWRlICJBbmlt
YXRpb25VdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJDU1NDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5j
bHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YS5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDb2xvckJsZW5k
aW5nLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHAJKHJl
dmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlICJDU1NQcmltaXRp
dmVWYWx1ZS5oIgogCiAjaW5jbHVkZSAiQ1NTQmFzaWNTaGFwZXMuaCIKLSNpbmNsdWRlICJDU1ND
YWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAi
Q1NTRm9udEZhbWlseS5oIgogI2luY2x1ZGUgIkNTU0hlbHBlci5oIgogI2luY2x1ZGUgIkNTU01h
cmt1cC5oIgpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
ICNpbmNsdWRlICJDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVmFs
dWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKICNpbmNsdWRl
ICJDYWxjdWxhdGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ29sb3IuaCIKICNpbmNsdWRlICJDb2xv
clNlcmlhbGl6YXRpb24uaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcmltaXRpdmVW
YWx1ZU1hcHBpbmdzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1ByaW1p
dGl2ZVZhbHVlTWFwcGluZ3MuaAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNyAr
MjksNyBAQAogCiAjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUu
aCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250RmFtaWx5Lmgi
CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhLmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAJKHJldmlzaW9uIDI3
ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkNTU0FzcGVjdFJhdGlvVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NDYWxjdWxh
dGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ2Fu
dmFzVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWUuaCIKICNp
bmNsdWRlICJDU1NDcm9zc2ZhZGVWYWx1ZS5oIgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisg
KiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIgorCisjaW5jbHVkZSAiQ1NT
VW5pdHMuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworQ2FsY3VsYXRpb25DYXRlZ29yeSBjYWxjVW5pdENhdGVnb3J5KENTU1VuaXRU
eXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUjoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjsK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19FWFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19DTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkxI
UzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfQ0hTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfVkg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1ZNQVg6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGg7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U6CisgICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OworICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19ERUc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfR1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoK
KyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOworICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19NUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUzoKKyAgICAgICAg
cmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0haOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6CisgICAgICAgIHJldHVybiBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgIH0KK30KKworQ2FsY3VsYXRpb25D
YXRlZ29yeSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oQ1NTVW5pdFR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOworICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19J
TjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1BDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgorICAgICAgICByZXR1cm4gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJD
RU5UQUdFOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDsKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19S
QUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1RVUk46CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTsK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1M6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOworICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19IWjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfS0haOgorICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OworICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19FTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VYUzoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1T
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19DSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19WSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgfQorfQorCitDU1NVbml0VHlwZSBjYW5vbmlj
YWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRl
Z29yeSkKK3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXI6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjsKKyAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfUFg7
CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OiByZXR1cm4gQ1NTVW5pdFR5
cGU6OkNTU19QRVJDRU5UQUdFOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6
IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX0RFRzsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlRpbWU6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX01TOworICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6RnJlcXVlbmN5OiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19IWjsKKyAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGg6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKK30KKworYm9vbCBo
YXNEb3VibGVWYWx1ZShDU1NVbml0VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgewor
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1BFUkNFTlRBR0U6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfRVhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1BYOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfTU06CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19QVDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkFEOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19U
VVJOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSFo6CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX0tIWjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRElNRU5TSU9OOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WVzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVkg6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZNSU46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1ZNQVg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQUFg6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0RQSToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFBDTToKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfRlI6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1E6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0xIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UkxIUzoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1VO
S05PV046CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NUUklORzoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfRk9OVF9GQU1JTFk6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1VSSToK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSURFTlQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0FUVFI6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NPVU5URVI6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1JFQ1Q6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JHQkNPTE9S
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQUlSOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19VTklDT0RFX1JBTkdFOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DT1VOVEVSX05B
TUU6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1NIQVBFOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19RVUFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19RVUlSS1lfRU1TOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19D
QUxDX1BFUkNFTlRBR0VfV0lUSF9OVU1CRVI6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NB
TENfUEVSQ0VOVEFHRV9XSVRIX0xFTkdUSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFJP
UEVSVFlfSUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZBTFVFX0lEOgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGND
YXRlZ29yeU1hcHBpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitlbnVtIGNsYXNzIENTU1VuaXRUeXBlIDogdWludDhfdDsKK2VudW0gY2xhc3MgQ2FsY3Vs
YXRpb25DYXRlZ29yeSA6IHVpbnQ4X3Q7CisKK0NhbGN1bGF0aW9uQ2F0ZWdvcnkgY2FsY1VuaXRD
YXRlZ29yeShDU1NVbml0VHlwZSk7CitDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGN1bGF0aW9uQ2F0
ZWdvcnlGb3JDb21iaW5hdGlvbihDU1NVbml0VHlwZSk7CitDU1NVbml0VHlwZSBjYW5vbmljYWxV
bml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeSk7Citib29s
IGhhc0RvdWJsZVZhbHVlKENTU1VuaXRUeXBlKTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3BwCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZS5oIgorCisjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1RleHRT
dHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENTU0NhbGNFeHByZXNzaW9u
Tm9kZSYgbm9kZSkKK3sKKyAgICBub2RlLmR1bXAodHMpOworICAgIHJldHVybiB0czsKK30KKwor
I2lmICFMT0dfRElTQUJMRUQKK1N0cmluZyBwcmV0dHlQcmludE5vZGUoY29uc3QgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlJiBub2RlKQoreworICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOwor
ICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlOworICAgIHJldHVybiBtdWx0aWxpbmVTdHJlYW0u
cmVsZWFzZSgpOworfQorCitTdHJpbmcgcHJldHR5UHJpbnROb2Rlcyhjb25zdCBWZWN0b3I8UmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBub2RlcykKK3sKKyAgICBUZXh0U3RyZWFtIG11bHRp
bGluZVN0cmVhbTsKKyAgICBtdWx0aWxpbmVTdHJlYW0gPDwgbm9kZXM7CisgICAgcmV0dXJuIG11
bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Cit9CisjZW5kaWYKKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgJKG5vbmV4aXN0ZW50
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwg
MjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpbmNsdWRlICJDYWxjdWxhdGlvbkNhdGVnb3J5LmgiCisjaW5jbHVkZSAiQ2FsY3Vs
YXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhOworCitlbnVtIENTU1Byb3BlcnR5SUQgOiB1aW50MTZfdDsKKworZW51bSBj
bGFzcyBDU1NVbml0VHlwZSA6IHVpbnQ4X3Q7CisKK2NsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9k
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU0NhbGNFeHByZXNzaW9uTm9kZT4geworcHVibGljOgor
ICAgIGVudW0gVHlwZSB7CisgICAgICAgIENzc0NhbGNQcmltaXRpdmVWYWx1ZSA9IDEsCisgICAg
ICAgIENzc0NhbGNPcGVyYXRpb24sCisgICAgICAgIENzc0NhbGNOZWdhdGUsCisgICAgICAgIENz
c0NhbGNJbnZlcnQsCisgICAgfTsKKworICAgIHZpcnR1YWwgfkNTU0NhbGNFeHByZXNzaW9uTm9k
ZSgpID0gZGVmYXVsdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNaZXJvKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4
cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0ID0gMDsKKyAg
ICB2aXJ0dWFsIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV9jYXRlZ29yeSA9PSBvdGhl
ci5tX2NhdGVnb3J5OyB9CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgPSAwOworCisgICAgdmly
dHVhbCB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8
Q1NTUHJvcGVydHlJRD4mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGNvbGxlY3REaXJl
Y3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+Jikg
Y29uc3QgPSAwOworCisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2F0ZWdvcnk7IH0KKworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdCA9IDA7CisKK3Byb3RlY3RlZDoKKyAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKKyAgICAgICAgOiBtX2NhdGVnb3J5KGNhdGVnb3J5
KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2Nh
dGVnb3J5OworfTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3Qg
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlJik7CisKKyNpZiAhTE9HX0RJU0FCTEVECitTdHJpbmcgcHJl
dHR5UHJpbnROb2RlKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYpOworU3RyaW5nIHByZXR0
eVByaW50Tm9kZXMoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYpOwor
I2VuZGlmCisKK30KKworI2RlZmluZSBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBS
RVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNhdGUpIFwKK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVOYW1lKSBcCisgICAgc3RhdGljIGJv
b2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkgeyBy
ZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwzMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmgiCisKKyNpbmNsdWRlICJDU1NDYWxjQ2F0ZWdv
cnlNYXBwaW5nLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0ludmVydE5vZGUuaCIKKyNpbmNsdWRlICJD
U1NDYWxjTmVnYXRlTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNPcGVyYXRpb25Ob2RlLmgiCisj
aW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU1BhcnNlclRva2VuLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2Vy
VG9rZW5SYW5nZS5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgY29uc3RleHByIGludCBtYXhFeHByZXNzaW9uRGVwdGggPSAxMDA7CisKKy8v
IDxodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNjYWxjLXN5bnRheD46Cisv
LyA8Y2FsYygpPiAgPSBjYWxjKCA8Y2FsYy1zdW0+ICkKKy8vIDxtaW4oKT4gICA9IG1pbiggPGNh
bGMtc3VtPiMgKQorLy8gPG1heCgpPiAgID0gbWF4KCA8Y2FsYy1zdW0+IyApCisvLyA8Y2xhbXAo
KT4gPSBjbGFtcCggPGNhbGMtc3VtPiN7M30gKQorLy8gPHNpbigpPiAgID0gc2luKCA8Y2FsYy1z
dW0+ICkKKy8vIDxjb3MoKT4gICA9IGNvcyggPGNhbGMtc3VtPiApCisvLyA8dGFuKCk+ICAgPSB0
YW4oIDxjYWxjLXN1bT4gKQorLy8gPGFzaW4oKT4gID0gYXNpbiggPGNhbGMtc3VtPiApCisvLyA8
YWNvcygpPiAgPSBhY29zKCA8Y2FsYy1zdW0+ICkKKy8vIDxhdGFuKCk+ICA9IGF0YW4oIDxjYWxj
LXN1bT4gKQorLy8gPGF0YW4yKCk+ID0gYXRhbjIoIDxjYWxjLXN1bT4sIDxjYWxjLXN1bT4gKQor
Ly8gPHBvdygpPiAgID0gcG93KCA8Y2FsYy1zdW0+LCA8Y2FsYy1zdW0+ICkKKy8vIDxzcXJ0KCk+
ICA9IHNxcnQoIDxjYWxjLXN1bT4gKQorLy8gPGh5cG90KCk+ID0gaHlwb3QoIDxjYWxjLXN1bT4j
ICkKKy8vIDxjYWxjLXN1bT4gPSA8Y2FsYy1wcm9kdWN0PiBbIFsgJysnIHwgJy0nIF0gPGNhbGMt
cHJvZHVjdD4gXSoKKy8vIDxjYWxjLXByb2R1Y3Q+ID0gPGNhbGMtdmFsdWU+IFsgWyAnKicgfCAn
LycgXSA8Y2FsYy12YWx1ZT4gXSoKKy8vIDxjYWxjLXZhbHVlPiA9IDxudW1iZXI+IHwgPGRpbWVu
c2lvbj4gfCA8cGVyY2VudGFnZT4gfCAoIDxjYWxjLXN1bT4gKQorUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMoQ1NTUGFy
c2VyVG9rZW5SYW5nZSB0b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb24pCit7CisgICAgdG9rZW5z
LmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisKKyAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiByZXN1bHQ7CisgICAgYm9vbCBvayA9IHBhcnNlQ2FsY0Z1bmN0aW9uKHRva2VucywgZnVuY3Rp
b24sIDAsIHJlc3VsdCk7CisgICAgaWYgKCFvayB8fCAhdG9rZW5zLmF0RW5kKCkpCisgICAgICAg
IHJldHVybiBudWxscHRyOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworCisgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMgIiA8PCBwcmV0dHlQcmludE5vZGUoKnJlc3VsdCkp
OworCisgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KHJlc3VsdC5y
ZWxlYXNlTm9uTnVsbCgpKTsKKworICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwg
IkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjIC0gYWZ0ZXIgc2ltcGxpZmlj
YXRpb24gIiA8PCBwcmV0dHlQcmludE5vZGUoKnJlc3VsdCkpOworCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworY2hhciBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6Om9wZXJhdG9yVmFsdWUo
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2VuKQoreworICAgIGlmICh0b2tlbi50eXBlKCkgPT0g
RGVsaW1pdGVyVG9rZW4pCisgICAgICAgIHJldHVybiB0b2tlbi5kZWxpbWl0ZXIoKTsKKyAgICBy
ZXR1cm4gMDsKK30KKworZW51bSBQYXJzZVN0YXRlIHsKKyAgICBPSywKKyAgICBUb29EZWVwLAor
ICAgIE5vTW9yZVRva2VucworfTsKKworc3RhdGljIFBhcnNlU3RhdGUgY2hlY2tEZXB0aEFuZElu
ZGV4KGludCBkZXB0aCwgQ1NTUGFyc2VyVG9rZW5SYW5nZSB0b2tlbnMpCit7CisgICAgaWYgKHRv
a2Vucy5hdEVuZCgpKQorICAgICAgICByZXR1cm4gTm9Nb3JlVG9rZW5zOworICAgIGlmIChkZXB0
aCA+IG1heEV4cHJlc3Npb25EZXB0aCkgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywg
c3RyZWFtIDw8ICJEZXB0aCAiIDw8IGRlcHRoIDw8ICIgZXhjZWVkZWQgbWF4RXhwcmVzc2lvbkRl
cHRoICIgPDwgbWF4RXhwcmVzc2lvbkRlcHRoKTsKKyAgICAgICAgcmV0dXJuIFRvb0RlZXA7Cisg
ICAgfQorICAgIHJldHVybiBPSzsKK30KKworYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJz
ZXI6OnBhcnNlQ2FsY0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ1NTVmFs
dWVJRCBmdW5jdGlvbklELCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiByZXN1bHQpCit7CisgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAh
PSBPSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gImFyZ3VtZW50cyIgcmVmZXJz
IHRvIHRoaW5ncyBiZXR3ZWVuIGNvbW1hcy4KKyAgICB1bnNpZ25lZCBtaW5Bcmd1bWVudENvdW50
ID0gMTsKKyAgICBPcHRpb25hbDx1bnNpZ25lZD4gbWF4QXJndW1lbnRDb3VudDsKKworICAgIHN3
aXRjaCAoZnVuY3Rpb25JRCkgeworICAgIGNhc2UgQ1NTVmFsdWVNaW46CisgICAgY2FzZSBDU1NW
YWx1ZU1heDoKKyAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IHN0ZDo6bnVsbG9wdDsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgorICAgICAgICBtaW5Bcmd1bWVudENv
dW50ID0gMzsKKyAgICAgICAgbWF4QXJndW1lbnRDb3VudCA9IDM7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgorICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gMTsKKyAg
ICAgICAgYnJlYWs7CisgICAgLy8gVE9ETzogY2xhbXAsIHNpbiwgY29zLCB0YW4sIGFzaW4sIGFj
b3MsIGF0YW4sIGF0YW4yLCBwb3csIHNxcnQsIGh5cG90LgorICAgIGRlZmF1bHQ6CisgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4g
bm9kZXM7CisKKyAgICBib29sIHJlcXVpcmVDb21tYSA9IGZhbHNlOworICAgIHVuc2lnbmVkIGFy
Z3VtZW50Q291bnQgPSAwOworICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKKyAgICAgICAg
dG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIGlmIChyZXF1aXJlQ29tbWEpIHsK
KyAgICAgICAgICAgIGlmICh0b2tlbnMuY29uc3VtZSgpLnR5cGUoKSAhPSBDb21tYVRva2VuKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHRva2Vucy5jb25zdW1l
V2hpdGVzcGFjZSgpOworICAgICAgICB9CisKKyAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gbm9kZTsKKyAgICAgICAgaWYgKCFwYXJzZUNhbGNTdW0odG9rZW5zLCBkZXB0aCwg
bm9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgKythcmd1bWVudENv
dW50OworICAgICAgICBpZiAobWF4QXJndW1lbnRDb3VudCAmJiBhcmd1bWVudENvdW50ID4gbWF4
QXJndW1lbnRDb3VudC52YWx1ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIG5vZGVzLmFwcGVuZChub2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICByZXF1aXJl
Q29tbWEgPSB0cnVlOworICAgIH0KKyAgICAKKyAgICBpZiAoYXJndW1lbnRDb3VudCA8IG1pbkFy
Z3VtZW50Q291bnQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoZnVuY3Rp
b25JRCkgeworICAgIGNhc2UgQ1NTVmFsdWVNaW46CisgICAgICAgIHJlc3VsdCA9IENTU0NhbGNP
cGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpNaW4sIFdU
Rk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIENTU1ZhbHVlTWF4OgorICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6TWF4LCBXVEZNb3ZlKG5vZGVz
KSwgbV9kZXN0aW5hdGlvbkNhdGVnb3J5KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NW
YWx1ZUNsYW1wOgorICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRl
TWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvcjo6Q2xhbXAsIFdURk1vdmUobm9kZXMpLCBtX2Rl
c3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0Q2FsYzoKKyAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKKyAgICAgICAgcmVzdWx0ID0gQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKG5vZGVzKSk7CisgICAgICAgIGJyZWFr
OworICAgIC8vIFRPRE86IGNsYW1wLCBzaW4sIGNvcywgdGFuLCBhc2luLCBhY29zLCBhdGFuLCBh
dGFuMiwgcG93LCBzcXJ0LCBoeXBvdAorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAg
IH0KKworICAgIHJldHVybiAhIXJlc3VsdDsKK30KKworYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGVQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAgIC8vIEZJWE1FOiBBZGQgY29k
ZSBoZXJlIHRvIHBhcnNlIENTU1ZhbGlkSUQgZm9yIG5hbWVkIGNvbnN0YW50cy4KKworICAgIENT
U1BhcnNlclRva2VuIHRva2VuID0gdG9rZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7
CisgICAgaWYgKCEodG9rZW4udHlwZSgpID09IE51bWJlclRva2VuIHx8IHRva2VuLnR5cGUoKSA9
PSBQZXJjZW50YWdlVG9rZW4gfHwgdG9rZW4udHlwZSgpID09IERpbWVuc2lvblRva2VuKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIGF1dG8gdHlwZSA9IHRva2VuLnVuaXRUeXBl
KCk7CisgICAgaWYgKGNhbGNVbml0Q2F0ZWdvcnkodHlwZSkgPT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICByZXN1bHQgPSBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh0
b2tlbi5udW1lcmljVmFsdWUoKSwgdHlwZSkpOworICAgIAorICAgIHJldHVybiB0cnVlOworfQor
Citib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjVmFsdWUoQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+JiByZXN1bHQpCit7CisgICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9r
ZW5zKSAhPSBPSykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBmaW5kRnVuY3Rp
b25JZCA9IFsmXShDU1NWYWx1ZUlEJiBmdW5jdGlvbklkKSB7CisgICAgICAgIGlmICh0b2tlbnMu
cGVlaygpLnR5cGUoKSA9PSBMZWZ0UGFyZW50aGVzaXNUb2tlbikgeworICAgICAgICAgICAgZnVu
Y3Rpb25JZCA9IENTU1ZhbHVlQ2FsYzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgZnVuY3Rpb25JZCA9IHRva2Vucy5wZWVrKCkuZnVuY3Rpb25JZCgpOwor
ICAgICAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihmdW5jdGlvbklkKTsK
KyAgICB9OworCisgICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklkOworICAgIGlmIChmaW5kRnVuY3Rp
b25JZChmdW5jdGlvbklkKSkgeworICAgICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIGlubmVyUmFu
Z2UgPSB0b2tlbnMuY29uc3VtZUJsb2NrKCk7CisgICAgICAgIHRva2Vucy5jb25zdW1lV2hpdGVz
cGFjZSgpOworICAgICAgICBpbm5lclJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAg
IHJldHVybiBwYXJzZUNhbGNGdW5jdGlvbihpbm5lclJhbmdlLCBmdW5jdGlvbklkLCBkZXB0aCAr
IDEsIHJlc3VsdCk7CisgICAgfQorCisgICAgcmV0dXJuIHBhcnNlVmFsdWUodG9rZW5zLCByZXN1
bHQpOworfQorCitib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjUHJv
ZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4
KGRlcHRoLCB0b2tlbnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVlOworICAgIGlmICghcGFyc2VDYWxj
VmFsdWUodG9rZW5zLCBkZXB0aCwgZmlyc3RWYWx1ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7CisKKyAgICB3
aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7CisgICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0ZXIg
PSBvcGVyYXRvclZhbHVlKHRva2Vucy5wZWVrKCkpOworICAgICAgICBpZiAob3BlcmF0b3JDaGFy
YWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpNdWx0aXBseSkgJiYgb3Bl
cmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpEaXZpZGUp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gbmV4dFZhbHVlOworICAgICAgICBpZiAoIXBhcnNlQ2FsY1ZhbHVlKHRva2VucywgZGVwdGgs
IG5leHRWYWx1ZSkgfHwgIW5leHRWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09w
ZXJhdG9yOjpEaXZpZGUpKQorICAgICAgICAgICAgbmV4dFZhbHVlID0gQ1NTQ2FsY0ludmVydE5v
ZGU6OmNyZWF0ZShuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAgICAgaWYgKGZp
cnN0VmFsdWUpCisgICAgICAgICAgICBub2Rlcy5hcHBlbmQoZmlyc3RWYWx1ZS5yZWxlYXNlTm9u
TnVsbCgpKTsKKworICAgICAgICBub2Rlcy5hcHBlbmQobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxs
KCkpOworICAgIH0KKworICAgIGlmIChub2Rlcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVzdWx0
ID0gV1RGTW92ZShmaXJzdFZhbHVlKTsKKyAgICAgICAgcmV0dXJuICEhcmVzdWx0OworICAgIH0K
KworICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdURk1v
dmUobm9kZXMpKTsKKyAgICByZXR1cm4gISFyZXN1bHQ7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNTdW0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5z
LCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCit7Cisg
ICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAhPSBPSykKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gZmlyc3RW
YWx1ZTsKKyAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1Y3QodG9rZW5zLCBkZXB0aCwgZmlyc3RWYWx1
ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4gbm9kZXM7CisKKyAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7CisgICAg
ICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0ZXIgPSBvcGVyYXRvclZhbHVlKHRva2Vucy5wZWVrKCkp
OworICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2Fs
Y09wZXJhdG9yOjpBZGQpICYmIG9wZXJhdG9yQ2hhcmFjdGVyICE9IHN0YXRpY19jYXN0PGNoYXI+
KENhbGNPcGVyYXRvcjo6U3VidHJhY3QpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg
aWYgKCgmdG9rZW5zLnBlZWsoKSAtIDEpLT50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCsgMnB4KSBpcyBpbnZhbGlkCisKKyAg
ICAgICAgdG9rZW5zLmNvbnN1bWUoKTsKKyAgICAgICAgaWYgKHRva2Vucy5wZWVrKCkudHlwZSgp
ICE9IFdoaXRlc3BhY2VUb2tlbikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgLy8gY2FsYygx
cHggKzJweCkgaXMgaW52YWxpZAorCisgICAgICAgIHRva2Vucy5jb25zdW1lSW5jbHVkaW5nV2hp
dGVzcGFjZSgpOworCisgICAgICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG5leHRW
YWx1ZTsKKyAgICAgICAgaWYgKCFwYXJzZUNhbGNQcm9kdWN0KHRva2VucywgZGVwdGgsIG5leHRW
YWx1ZSkgfHwgIW5leHRWYWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9y
OjpTdWJ0cmFjdCkpCisgICAgICAgICAgICBuZXh0VmFsdWUgPSBDU1NDYWxjTmVnYXRlTm9kZTo6
Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICBpZiAoZmlyc3RW
YWx1ZSkKKyAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaXJzdFZhbHVlLnJlbGVhc2VOb25OdWxs
KCkpOworCisgICAgICAgIG5vZGVzLmFwcGVuZChuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7
CisgICAgfQorCisgICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkgeworICAgICAgICByZXN1bHQgPSBX
VEZNb3ZlKGZpcnN0VmFsdWUpOworICAgICAgICByZXR1cm4gISFyZXN1bHQ7CisgICAgfQorCisg
ICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKG5vZGVz
KSk7CisgICAgcmV0dXJuICEhcmVzdWx0OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9j
c3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2Fs
Y09wZXJhdG9yLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIENTU0NhbGNFeHByZXNzaW9uTm9kZTsKK2NsYXNzIENTU1Bh
cnNlclRva2VuOworY2xhc3MgQ1NTUGFyc2VyVG9rZW5SYW5nZTsKKworY2xhc3MgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlUGFyc2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGVQYXJzZXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQor
ICAgICAgICA6IG1fZGVzdGluYXRpb25DYXRlZ29yeShkZXN0aW5hdGlvbkNhdGVnb3J5KQorICAg
IHsKKyAgICB9CisKKyAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBwYXJzZUNhbGMo
Q1NTUGFyc2VyVG9rZW5SYW5nZSwgQ1NTVmFsdWVJRCBmdW5jdGlvbik7CisgICAgCitwcml2YXRl
OgorICAgIGNoYXIgb3BlcmF0b3JWYWx1ZShjb25zdCBDU1NQYXJzZXJUb2tlbiYpOworCisgICAg
Ym9vbCBwYXJzZVZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VWYWx1ZVRlcm0oQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKyAgICBib29s
IHBhcnNlQ2FsY0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NWYWx1ZUlELCBpbnQg
ZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZUNh
bGNTdW0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mKTsKKyAgICBib29sIHBhcnNlQ2FsY1Byb2R1Y3QoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKyAgICBi
b29sIHBhcnNlQ2FsY1ZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQgZGVwdGgsIFJlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IG1f
ZGVzdGluYXRpb25DYXRlZ29yeTsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9j
YWxjL0NTU0NhbGNJbnZlcnROb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
Q1NTQ2FsY0ludmVydE5vZGUuaCIKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uSW52ZXJzaW9u
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IENTU0NhbGNJbnZlcnRO
b2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
JiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBhdXRvIGNoaWxkTm9kZSA9IG1fY2hpbGQt
PmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnZlcnNpb25EYXRhKTsKKyAgICByZXR1cm4gbWFrZVVu
aXF1ZTxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4oV1RGTW92ZShjaGlsZE5vZGUpKTsKK30KKwor
ZG91YmxlIENTU0NhbGNJbnZlcnROb2RlOjpkb3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlw
ZSkgY29uc3QKK3sKKyAgICBhdXRvIGNoaWxkVmFsdWUgPSBtX2NoaWxkLT5kb3VibGVWYWx1ZSh1
bml0VHlwZSk7CisgICAgaWYgKCFjaGlsZFZhbHVlKQorICAgICAgICByZXR1cm4gc3RkOjpudW1l
cmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIHJldHVybiAxLjAgLyBjaGlsZFZh
bHVlOworfQorCitkb3VibGUgQ1NTQ2FsY0ludmVydE5vZGU6OmNvbXB1dGVMZW5ndGhQeChjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAg
ICBhdXRvIGNoaWxkVmFsdWUgPSBtX2NoaWxkLT5jb21wdXRlTGVuZ3RoUHgoY29udmVyc2lvbkRh
dGEpOworICAgIGlmICghY2hpbGRWYWx1ZSkKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19s
aW1pdHM8ZG91YmxlPjo6aW5maW5pdHkoKTsKKyAgICByZXR1cm4gMS4wIC8gY2hpbGRWYWx1ZTsK
K30KKwordm9pZCBDU1NDYWxjSW52ZXJ0Tm9kZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QK
K3sKKyAgICB0cyA8PCAiMS8iIDw8IG1fY2hpbGQuZ2V0KCk7Cit9CisKKworfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgQ1NTQ2FsY0ludmVydE5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNJbnZlcnROb2RlPiBjcmVhdGUo
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IENTU0NhbGNJbnZlcnROb2RlKFdURk1vdmUoY2hpbGQpKSk7CisgICAg
fQorCisgICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGQuZ2V0KCk7IH0KKyAgICBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGNoaWxkKCkg
eyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRDaGlsZChSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZNb3ZlKGNoaWxkKTsgfQor
Citwcml2YXRlOgorICAgIENTU0NhbGNJbnZlcnROb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+JiYgY2hpbGQpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNoaWxkLT5jYXRl
Z29yeSgpKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkpCisgICAgeworICAgIH0K
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHBy
ZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKwor
ICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+aXNaZXJvKCk7
IH0KKyAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOworICAg
IGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYp
IGNvbnN0IGZpbmFsOworICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIFR5cGU6
OkNzc0NhbGNJbnZlcnQ7IH0KKyAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlwZSgpOyB9CisKKyAgICB2b2lkIGNv
bGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1
dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KKyAgICB2b2lkIGNvbGxlY3REaXJl
Y3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBw
cm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0
YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQorCisgICAgdm9pZCBkdW1wKFRleHRT
dHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IG1f
Y2hpbGQ7Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJ
T05fTk9ERShDU1NDYWxjSW52ZXJ0Tm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY0ludmVydCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUuaCIKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTmVnYXRp
b24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY05lZ2F0
ZU5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAgIGF1dG8gY2hpbGROb2RlID0gbV9jaGls
ZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpOworICAgIHJldHVybiBtYWtl
VW5pcXVlPENhbGNFeHByZXNzaW9uTmVnYXRpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Cit9CisK
K3ZvaWQgQ1NTQ2FsY05lZ2F0ZU5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7Cisg
ICAgdHMgPDwgIi0iIDw8IG1fY2hpbGQuZ2V0KCk7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNT
U0NhbGNFeHByZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENT
U0NhbGNOZWdhdGVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxDU1NDYWxjTmVnYXRlTm9kZT4gY3JlYXRlKFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDU1NDYWxjTmVnYXRlTm9kZShXVEZNb3ZlKGNoaWxkKSkpOworICAgIH0KKworICAg
IGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2No
aWxkLmdldCgpOyB9CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJu
IG1fY2hpbGQuZ2V0KCk7IH0KKworICAgIHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4mJiBjaGlsZCkgeyBtX2NoaWxkID0gV1RGTW92ZShjaGlsZCk7IH0KKworcHJpdmF0
ZToKKyAgICBDU1NDYWxjTmVnYXRlTm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNo
aWxkKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkK
KyAgICAgICAgLCBtX2NoaWxkKFdURk1vdmUoY2hpbGQpKQorICAgIHsKKyAgICB9CisKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAgICBib29s
IGlzWmVybygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9CisgICAg
ZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdCBmaW5hbCB7IHJl
dHVybiAtbV9jaGlsZC0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOyB9CisgICAgZG91YmxlIGNvbXB1
dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0
YSkgY29uc3QgZmluYWwgeyByZXR1cm4gLW1fY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJz
aW9uRGF0YSk7IH0KKyAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpD
c3NDYWxjTmVnYXRlOyB9CisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fY2hpbGQtPnByaW1pdGl2ZVR5cGUoKTsgfQorCisgICAgdm9pZCBjb2xs
ZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0
Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJv
cGVydGllcykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KKworICAgIHZvaWQgZHVtcChUZXh0U3Ry
ZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2No
aWxkOworfTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9O
X05PREUoQ1NTQ2FsY05lZ2F0ZU5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVz
c2lvbk5vZGU6OlR5cGU6OkNzc0NhbGNOZWdhdGUpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Y2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisg
KiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCIKKworI2luY2x1ZGUgIkNTU0NhbGND
YXRlZ29yeU1hcHBpbmcuaCIKKyNpbmNsdWRlICJDU1NDYWxjSW52ZXJ0Tm9kZS5oIgorI2luY2x1
ZGUgIkNTU0NhbGNOZWdhdGVOb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZS5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIHRoZSAiVG8gYWRkIHR3byB0
eXBlcyB0eXBlMSBhbmQgdHlwZTIsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBzdGVwczoiIHJ1bGVz
LgorCitzdGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRlZ29yeSBhZGRTdWJ0cmFjdFJlc3VsdFtz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpXVtzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpXSA9IHsKKy8vICAgIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxl
bmd0aCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQgICAgICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRM
ZW5ndGgKKyAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgICAgICAgIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRO
dW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyCisg
ICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpMZW5ndGgsICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aAorICAgIHsgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgICAgICAgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExl
bmd0aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50CisgICAgeyBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAg
ICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9LCAvLyAgICAg
ICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIKKyAgICB7IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5n
dGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwg
Ly8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAorfTsKKworc3RhdGljIENhbGN1
bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlJiBsZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiByaWdodFNpZGUsIENh
bGNPcGVyYXRvciBvcCkKK3sKKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGxlZnRDYXRlZ29yeSA9
IGxlZnRTaWRlLmNhdGVnb3J5KCk7CisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSByaWdodENhdGVn
b3J5ID0gcmlnaHRTaWRlLmNhdGVnb3J5KCk7CisgICAgQVNTRVJUKGxlZnRDYXRlZ29yeSA8IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKyAgICBBU1NFUlQocmlnaHRDYXRlZ29yeSA8IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNl
IENhbGNPcGVyYXRvcjo6QWRkOgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKKyAg
ICAgICAgaWYgKGxlZnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlICYmIHJp
Z2h0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKKyAgICAgICAgICAgIHJl
dHVybiBhZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obGVmdENhdGVnb3J5
KV1bc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJpZ2h0Q2F0ZWdvcnkpXTsKKyAgICAgICAgaWYgKGxl
ZnRDYXRlZ29yeSA9PSByaWdodENhdGVnb3J5KQorICAgICAgICAgICAgcmV0dXJuIGxlZnRDYXRl
Z29yeTsKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKKyAgICAgICAgaWYgKGxlZnRDYXRlZ29yeSAhPSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXI7CisgICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TnVtYmVyID8gcmlnaHRDYXRlZ29yeSA6IGxlZnRDYXRlZ29yeTsKKyAgICBjYXNlIENh
bGNPcGVyYXRvcjo6RGl2aWRlOgorICAgICAgICBpZiAocmlnaHRDYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgcmlnaHRTaWRlLmlzWmVybygpKQorICAgICAgICAgICAg
cmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgICAgICByZXR1cm4gbGVmdENh
dGVnb3J5OworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46CisgICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok1heDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7
CisgICAgfQorCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyOworfQorCisvLyBGSVhNRTogTmVlZCB0byBpbXBsZW1lbnQgY29y
cmVjdCBjYXRlZ29yeSBjb21wdXRhdGlvbiBwZXI6CisvLyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhv
dWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtaW52ZXJ0LWEtdHlwZT4K
Ky8vIFRvIGludmVydCBhIHR5cGUgdHlwZSwgcGVyZm9ybSB0aGUgZm9sbG93aW5nIHN0ZXBzOgor
Ly8gTGV0IHJlc3VsdCBiZSBhIG5ldyB0eXBlIHdpdGggYW4gaW5pdGlhbGx5IGVtcHR5IG9yZGVy
ZWQgbWFwIGFuZCBhbiBpbml0aWFsbHkgbnVsbCBwZXJjZW50IGhpbnQKKy8vIEZvciBlYWNoIHVu
aXQg4oaSIGV4cG9uZW50IG9mIHR5cGUsIHNldCByZXN1bHRbdW5pdF0gdG8gKC0xICogZXhwb25l
bnQpLgorc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnlGb3JJbnZlcnQoQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKK3sKKyAgICByZXR1cm4gY2F0ZWdvcnk7Cit9CisKK3N0
YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5KGNvbnN0IFZlY3RvcjxS
ZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzLCBDYWxjT3BlcmF0b3Igb3ApCit7Cisg
ICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOworCisgICAgYXV0byBjdXJyZW50Q2F0ZWdvcnkgPSBub2Rlc1swXS0+Y2F0ZWdv
cnkoKTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBub2Rlcy5zaXplKCk7ICsraSkg
eworICAgICAgICBjb25zdCBhdXRvJiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7CisgICAgICAgIAor
ICAgICAgICBhdXRvIHVzZWRPcGVyYXRvciA9IG9wOworICAgICAgICBpZiAobm9kZS50eXBlKCkg
PT0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0KQorICAgICAgICAg
ICAgdXNlZE9wZXJhdG9yID0gQ2FsY09wZXJhdG9yOjpEaXZpZGU7CisKKyAgICAgICAgYXV0byBu
ZXh0Q2F0ZWdvcnkgPSBub2RlLmNhdGVnb3J5KCk7CisKKyAgICAgICAgc3dpdGNoICh1c2VkT3Bl
cmF0b3IpIHsKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKKyAgICAgICAgY2FzZSBD
YWxjT3BlcmF0b3I6OlN1YnRyYWN0OgorICAgICAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNz
cy1ob3VkaW5pLm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVlLWFkZC10d28tdHlw
ZXM+CisgICAgICAgICAgICAvLyBBdCBhICsgb3IgLSBzdWItZXhwcmVzc2lvbiwgYXR0ZW1wdCB0
byBhZGQgdGhlIHR5cGVzIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVudHMuCisgICAgICAg
ICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFpbHVyZSwgdGhlIGVudGlyZSBjYWxjdWxhdGlvbuKA
mXMgdHlwZSBpcyBmYWlsdXJlLiBPdGhlcndpc2UsIHRoZSBzdWItZXhwcmVzc2lvbuKAmXMgdHlw
ZSBpcyB0aGUgcmV0dXJuZWQgdHlwZS4KKyAgICAgICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkg
PCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiBuZXh0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpBbmdsZSkKKyAgICAgICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnkgPSBhZGRT
dWJ0cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY3VycmVudENhdGVnb3J5KV1bc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG5leHRDYXRlZ29yeSldOworICAgICAgICAgICAgZWxzZSBpZiAo
Y3VycmVudENhdGVnb3J5ICE9IG5leHRDYXRlZ29yeSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6CisgICAgICAgICAgICAvLyA8aHR0cHM6Ly9k
cmFmdHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtbXVs
dGlwbHktdHdvLXR5cGVzPgorICAgICAgICAgICAgLy8gQXQgYSAqIHN1Yi1leHByZXNzaW9uLCBt
dWx0aXBseSB0aGUgdHlwZXMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZ3VtZW50cy4gVGhlIHN1
Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1cm5lZCByZXN1bHQuCisgICAgICAgICAg
ICBpZiAoY3VycmVudENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAmJiBu
ZXh0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAg
ICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKworICAgICAgICAgICAgY3Vy
cmVudENhdGVnb3J5ID0gY3VycmVudENhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51
bWJlciA/IG5leHRDYXRlZ29yeSA6IGN1cnJlbnRDYXRlZ29yeTsKKyAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKKyAgICAgICAgICAgIGF1
dG8gaW52ZXJ0Q2F0ZWdvcnkgPSBjYXRlZ29yeUZvckludmVydChuZXh0Q2F0ZWdvcnkpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICAvLyBBdCBhIC8gc3ViLWV4cHJlc3Npb24sIGxldCBsZWZ0
IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgbGVmdCBhcmd1
bWVudCwKKyAgICAgICAgICAgIC8vIGFuZCByaWdodCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgZmlu
ZGluZyB0aGUgdHlwZXMgb2YgaXRzIHJpZ2h0IGFyZ3VtZW50IGFuZCB0aGVuIGludmVydGluZyBp
dC4KKyAgICAgICAgICAgIC8vIFRoZSBzdWItZXhwcmVzc2lvbuKAmXMgdHlwZSBpcyB0aGUgcmVz
dWx0IG9mIG11bHRpcGx5aW5nIHRoZSBsZWZ0IHR5cGUgYW5kIHJpZ2h0IHR5cGUuCisgICAgICAg
ICAgICBpZiAoaW52ZXJ0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyIHx8
IG5vZGUuaXNaZXJvKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNl
IENhbGNPcGVyYXRvcjo6TWluOgorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgorICAg
ICAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6CisgICAgICAgICAgICAvLyBUaGUgdHlwZSBv
ZiBhIG1pbigpLCBtYXgoKSwgb3IgY2xhbXAoKSBleHByZXNzaW9uIGlzIHRoZSByZXN1bHQgb2Yg
YWRkaW5nIHRoZSB0eXBlcyBvZiBpdHMgY29tbWEtc2VwYXJhdGVkIGNhbGN1bGF0aW9ucworICAg
ICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgICAgICB9Cisg
ICAgfQorCisgICAgcmV0dXJuIGN1cnJlbnRDYXRlZ29yeTsKK30KKworc3RhdGljIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgcmVzb2x2ZWRUeXBlRm9yTWluT3JNYXhPckNsYW1wKENhbGN1bGF0aW9uQ2F0
ZWdvcnkgY2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkK
K3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OkFuZ2xlOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToKKyAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOgorICAgICAgICByZXR1cm4gY2F0ZWdvcnk7CisKKyAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6CisgICAgICAgIGlmIChkZXN0aW5hdGlvbkNhdGVnb3J5ID09
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKKyAgICAgICAgICAgIHJldHVybiBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOworICAgICAgICBpZiAoZGVzdGluYXRpb25DYXRl
Z29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjsKKyAgICAgICAgcmV0dXJuIGNhdGVn
b3J5OworICAgIH0KKworICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKK30K
Kworc3RhdGljIGJvb2wgaXNTYW1lUGFpcihDYWxjdWxhdGlvbkNhdGVnb3J5IGEsIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgYiwgQ2FsY3VsYXRpb25DYXRlZ29yeSB4LCBDYWxjdWxhdGlvbkNhdGVnb3J5
IHkpCit7CisgICAgcmV0dXJuIChhID09IHggJiYgYiA9PSB5KSB8fCAoYSA9PSB5ICYmIGIgPT0g
eCk7Cit9CisKK2VudW0gY2xhc3MgU29ydGluZ0NhdGVnb3J5IHsKKyAgICBOdW1iZXIsCisgICAg
UGVyY2VudCwKKyAgICBEaW1lbnNpb24sCisgICAgT3RoZXIKK307CisKK3N0YXRpYyBTb3J0aW5n
Q2F0ZWdvcnkgc29ydGluZ0NhdGVnb3J5Rm9yVHlwZShDU1NVbml0VHlwZSB1bml0VHlwZSkKK3sK
KyAgICBzdGF0aWMgY29uc3RleHByIFNvcnRpbmdDYXRlZ29yeSBzb3J0T3JkZXJbXSA9IHsKKyAg
ICAgICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpOdW1iZXIsCisgICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoLAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6OlBl
cmNlbnQsICAgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQsCisgICAgICAgIFNv
cnRpbmdDYXRlZ29yeTo6TnVtYmVyLCAgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlciwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24sICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLAorICAgICAgICBTb3J0aW5nQ2F0ZWdv
cnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlLAorICAgICAg
ICBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlRpbWUsCisgICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5LAorICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok90aGVy
LCAgICAgICAgIC8vIFVPdGhlcgorICAgIH07CisKKyAgICBDT01QSUxFX0FTU0VSVChBUlJBWV9T
SVpFKHNvcnRPcmRlcikgPT0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyKSArIDEsIHNvcnRPcmRlcl9zaXplX3Nob3VsZF9tYXRjaF9Vbml0Q2F0ZWdvcnkp
OworICAgIHJldHVybiBzb3J0T3JkZXJbc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGNhbGNVbml0Q2F0
ZWdvcnkodW5pdFR5cGUpKV07Cit9CisKK3N0YXRpYyBTb3J0aW5nQ2F0ZWdvcnkgc29ydGluZ0Nh
dGVnb3J5KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkKK3sKKyAgICBpZiAoaXM8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpCisgICAgICAgIHJldHVybiBzb3J0aW5n
Q2F0ZWdvcnlGb3JUeXBlKG5vZGUucHJpbWl0aXZlVHlwZSgpKTsKKworICAgIHJldHVybiBTb3J0
aW5nQ2F0ZWdvcnk6Ok90aGVyOworfQorCitzdGF0aWMgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlw
ZUZvckNvbWJpbmF0aW9uKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkKK3sKKyAg
ICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4obm9kZSkpCisgICAgICAgIHJldHVy
biBub2RlLnByaW1pdGl2ZVR5cGUoKTsKKyAgICAKKyAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19VTktOT1dOOworfQorCitzdGF0aWMgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENv
bnZlcnNpb24gY29udmVyc2lvblRvQWRkVmFsdWVzV2l0aFR5cGVzKENTU1VuaXRUeXBlIGZpcnN0
VHlwZSwgQ1NTVW5pdFR5cGUgc2Vjb25kVHlwZSkKK3sKKyAgICBpZiAoZmlyc3RUeXBlID09IENT
U1VuaXRUeXBlOjpDU1NfVU5LTk9XTiB8fCBzZWNvbmRUeXBlID09IENTU1VuaXRUeXBlOjpDU1Nf
VU5LTk9XTikKKyAgICAgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OlVuaXRD
b252ZXJzaW9uOjpJbnZhbGlkOworCisgICAgYXV0byBmaXJzdENhdGVnb3J5ID0gY2FsY3VsYXRp
b25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKGZpcnN0VHlwZSk7CisKKyAgICAvLyBDb21wYXRpYmxl
IHR5cGVzLgorICAgIGlmIChmaXJzdENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyICYmIGZpcnN0Q2F0ZWdvcnkgPT0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9u
KHNlY29uZFR5cGUpKQorICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
VW5pdENvbnZlcnNpb246OkNhbm9uaWNhbGl6ZTsKKworICAgIC8vIE1hdGNoaW5nIHR5cGVzLgor
ICAgIGlmIChmaXJzdFR5cGUgPT0gc2Vjb25kVHlwZSAmJiBoYXNEb3VibGVWYWx1ZShmaXJzdFR5
cGUpKQorICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZl
cnNpb246OlByZXNlcnZlOworCisgICAgcmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6
OlVuaXRDb252ZXJzaW9uOjpJbnZhbGlkOworfQorCisKK3N0YXRpYyBDU1NWYWx1ZUlEIGZ1bmN0
aW9uRnJvbU9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBzd2l0Y2ggKG9wKSB7Cisg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJh
Y3Q6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgorICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpEaXZpZGU6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6Ok1pbjoKKyAgICAgICAgcmV0dXJuIENTU1ZhbHVlTWluOworICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNYXg6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZU1heDsKKyAgICBjYXNlIENh
bGNPcGVyYXRvcjo6Q2xhbXA6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZUNsYW1wOworICAgIH0K
KyAgICByZXR1cm4gQ1NTVmFsdWVDYWxjOworfQorCitSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGUoQ2FsY09wZXJhdG9yIG9wLCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRlLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiYmIHJpZ2h0U2lkZSkKK3sKKyAgICBpZiAoIWxlZnRTaWRlIHx8ICFyaWdodFNpZGUp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRv
cjo6QWRkIHx8IG9wID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOworCisgICAgQVNTRVJUKGxl
ZnRTaWRlLT5jYXRlZ29yeSgpIDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworICAgIEFT
U0VSVChyaWdodFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7
CisKKyAgICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkoKmxlZnRTaWRlLCAq
cmlnaHRTaWRlLCBvcCk7CisgICAgaWYgKG5ld0NhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyKSB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZh
aWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgIiA8PCBvcCA8PCAiIG5vZGUgYmVj
YXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmludE5v
ZGUoKmxlZnRTaWRlKSA8PCAiIGFuZCAiIDw8ICpyaWdodFNpZGUpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRp
b25Ob2RlKG5ld0NhdGVnb3J5LCBvcCwgbGVmdFNpZGUucmVsZWFzZU5vbk51bGwoKSwgcmlnaHRT
aWRlLnJlbGVhc2VOb25OdWxsKCkpKTsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2Rl
PiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4mJiB2YWx1ZXMpCit7CisgICAgaWYgKHZhbHVlcy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBuZXdDYXRlZ29yeSA9IGRldGVybWluZUNh
dGVnb3J5KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpBZGQpOworICAgIGlmIChuZXdDYXRlZ29yeSA9
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
Q2FsYywgc3RyZWFtIDw8ICJGYWlsZWQgdG8gY3JlYXRlIHN1bSBub2RlIGJlY2F1c2UgdW5hYmxl
IHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2Rlcyh2YWx1ZXMp
KTsKKyAgICAgICAgbmV3Q2F0ZWdvcnkgPSBkZXRlcm1pbmVDYXRlZ29yeSh2YWx1ZXMsIENhbGNP
cGVyYXRvcjo6QWRkKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShuZXdDYXRlZ29yeSwgQ2FsY09w
ZXJhdG9yOjpBZGQsIFdURk1vdmUodmFsdWVzKSkpOworfQorCitSZWZQdHI8Q1NTQ2FsY09wZXJh
dGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFZlY3RvcjxSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpCit7CisgICAgaWYgKHZhbHVlcy5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBuZXdDYXRlZ29yeSA9
IGRldGVybWluZUNhdGVnb3J5KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpNdWx0aXBseSk7CisgICAg
aWYgKG5ld0NhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7CisgICAgICAg
IExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgcHJvZHVj
dCBub2RlIGJlY2F1c2UgdW5hYmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJl
dHR5UHJpbnROb2Rlcyh2YWx1ZXMpKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShuZXdDYXRlZ29y
eSwgQ2FsY09wZXJhdG9yOjpNdWx0aXBseSwgV1RGTW92ZSh2YWx1ZXMpKSk7Cit9CisKK1JlZlB0
cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9y
TWF4T3JDbGFtcChDYWxjT3BlcmF0b3Igb3AsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4mJiB2YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSkK
K3sKKyAgICBBU1NFUlQob3AgPT0gQ2FsY09wZXJhdG9yOjpNaW4gfHwgb3AgPT0gQ2FsY09wZXJh
dG9yOjpNYXggfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpDbGFtcCk7CisgICAgQVNTRVJUX0lNUExJ
RVMob3AgPT0gQ2FsY09wZXJhdG9yOjpDbGFtcCwgdmFsdWVzLnNpemUoKSA9PSAzKTsKKworICAg
IE9wdGlvbmFsPENhbGN1bGF0aW9uQ2F0ZWdvcnk+IGNhdGVnb3J5ID0gc3RkOjpudWxsb3B0Owor
ICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpIHsKKyAgICAgICAgYXV0byB2YWx1ZUNhdGVn
b3J5ID0gcmVzb2x2ZWRUeXBlRm9yTWluT3JNYXhPckNsYW1wKHZhbHVlLT5jYXRlZ29yeSgpLCBk
ZXN0aW5hdGlvbkNhdGVnb3J5KTsKKworICAgICAgICBBU1NFUlQodmFsdWVDYXRlZ29yeSA8IENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKyAgICAgICAgaWYgKCFjYXRlZ29yeSkgeworICAg
ICAgICAgICAgaWYgKHZhbHVlQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIp
IHsKKyAgICAgICAgICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJGYWls
ZWQgdG8gY3JlYXRlIENTU0NhbGNPcGVyYXRpb25Ob2RlICIgPDwgb3AgPDwgIiBub2RlIGJlY2F1
c2UgdW5hYmxlIHRvIGRldGVybWluZSBjYXRlZ29yeSBmcm9tICIgPDwgcHJldHR5UHJpbnROb2Rl
cyh2YWx1ZXMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGNhdGVnb3J5ID0gdmFsdWVDYXRlZ29yeTsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChjYXRlZ29yeSAhPSB2YWx1ZUNhdGVnb3J5KSB7CisgICAgICAgICAgICBpZiAo
aXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgpLCB2YWx1ZUNhdGVnb3J5LCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgpKSB7Cisg
ICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVu
Z3RoOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgaWYgKGlzU2FtZVBhaXIoY2F0ZWdvcnkudmFsdWUoKSwgdmFsdWVDYXRlZ29yeSwgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVy
KSkgeworICAgICAgICAgICAgICAgIGNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudE51bWJlcjsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBDU1NDYWxjT3BlcmF0aW9uTm9kZShjYXRlZ29yeS52YWx1ZSgpLCBvcCwg
V1RGTW92ZSh2YWx1ZXMpKSk7Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmhvaXN0
Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQoreworICAgIEFTU0VSVChvcCA9
PSBDYWxjT3BlcmF0b3I6OkFkZCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKKwor
ICAgIGF1dG8gaGFzQ2hpbGRXaXRoT3BlcmF0b3IgPSBbJl0gKENhbGNPcGVyYXRvciBvcCkgewor
ICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICAgICAgaWYg
KGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfTsKKworICAgIGlmICghaGFzQ2hpbGRXaXRoT3BlcmF0b3Iob3ApKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxk
cmVuOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIGlmIChp
czxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpICYmIGRvd25jYXN0PENTU0NhbGNP
cGVyYXRpb25Ob2RlPihjaGlsZC5nZXQoKSkuY2FsY09wZXJhdG9yKCkgPT0gb3ApIHsKKyAgICAg
ICAgICAgIGF1dG8mIGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNo
aWxkLmdldCgpKS5jaGlsZHJlbigpOworICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZFRvTW92
ZSA6IGNoaWxkcmVuKQorICAgICAgICAgICAgICAgIG5ld0NoaWxkcmVuLmFwcGVuZChXVEZNb3Zl
KGNoaWxkVG9Nb3ZlKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV3Q2hpbGRyZW4u
YXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKKyAgICB9CisgICAgCisgICAgbmV3Q2hpbGRyZW4uc2hy
aW5rVG9GaXQoKTsKKyAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7Cit9CisK
K2Jvb2wgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNvbnN0
Cit7CisgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihtX2NoaWxkcmVuWzBd
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBmaXJzdFVuaXRUeXBlID0gbV9j
aGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOworICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNh
bGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVU
eXBlKCkpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgYXV0byYgbm9kZSA9IG1fY2hpbGRyZW5baV07CisKKyAgICAgICAg
aWYgKCFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBhdXRvIG5vZGVVbml0VHlwZSA9IG5vZGUtPnByaW1pdGl2
ZVR5cGUoKTsKKyAgICAgICAgYXV0byBub2RlQ2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5
Rm9yQ29tYmluYXRpb24obm9kZVVuaXRUeXBlKTsKKworICAgICAgICBpZiAobm9kZUNhdGVnb3J5
ICE9IGZpcnN0Q2F0ZWdvcnkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKG5vZGVDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBub2RlVW5p
dFR5cGUgIT0gZmlyc3RVbml0VHlwZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIGlmICghaGFzRG91YmxlVmFsdWUobm9kZVVuaXRUeXBlKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29tYmluZUNoaWxkcmVuKCkKK3sKKyAgICBpZiAobV9jaGls
ZHJlbi5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoc2hvdWxkU29ydENo
aWxkcmVuKCkpIHsKKyAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFs
dWVzLTQvI3NvcnQtYS1jYWxjdWxhdGlvbnMtY2hpbGRyZW4+CisgICAgICAgIHN0ZDo6c3RhYmxl
X3NvcnQobV9jaGlsZHJlbi5iZWdpbigpLCBtX2NoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBhdXRv
JiBmaXJzdCwgY29uc3QgYXV0byYgc2Vjb25kKSB7CisgICAgICAgICAgICAvLyBTb3J0IG9yZGVy
OiBudW1iZXIsIHBlcmNlbnRhZ2UsIGRpbWVuc2lvbiwgb3RoZXIuCisgICAgICAgICAgICBTb3J0
aW5nQ2F0ZWdvcnkgZmlyc3RDYXRlZ29yeSA9IHNvcnRpbmdDYXRlZ29yeShmaXJzdC5nZXQoKSk7
CisgICAgICAgICAgICBTb3J0aW5nQ2F0ZWdvcnkgc2Vjb25kQ2F0ZWdvcnkgPSBzb3J0aW5nQ2F0
ZWdvcnkoc2Vjb25kLmdldCgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGZpcnN0
Q2F0ZWdvcnkgPT0gU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24gJiYgc2Vjb25kQ2F0ZWdvcnkg
PT0gU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24pIHsKKyAgICAgICAgICAgICAgICAvLyBJZiBu
b2RlcyBjb250YWlucyBhbnkgZGltZW5zaW9ucywgcmVtb3ZlIHRoZW0gZnJvbSBub2Rlcywgc29y
dCB0aGVtIGJ5IHRoZWlyIHVuaXRzLCBhbmQgYXBwZW5kIHRoZW0gdG8gcmV0LgorICAgICAgICAg
ICAgICAgIGF1dG8gZmlyc3RVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBl
U3RyaW5nKGZpcnN0LT5wcmltaXRpdmVUeXBlKCkpOworICAgICAgICAgICAgICAgIGF1dG8gc2Vj
b25kVW5pdFN0cmluZyA9IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyhzZWNvbmQt
PnByaW1pdGl2ZVR5cGUoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBh
cmVMZXNzVGhhbihmaXJzdFVuaXRTdHJpbmcsIHNlY29uZFVuaXRTdHJpbmcpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZpcnN0Q2F0
ZWdvcnkpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNlY29uZENhdGVnb3J5KTsKKyAgICAgICAg
fSk7CisKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAicG9zdC1zb3J0
OiAiIDw8ICp0aGlzKTsKKyAgICB9CisKKyAgICBpZiAoY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09w
ZXJhdG9yOjpBZGQpIHsKKyAgICAgICAgLy8gRm9yIGVhY2ggc2V0IG9mIHJvb3TigJlzIGNoaWxk
cmVuIHRoYXQgYXJlIG51bWVyaWMgdmFsdWVzIHdpdGggaWRlbnRpY2FsIHVuaXRzLAorICAgICAg
ICAvLyByZW1vdmUgdGhvc2UgY2hpbGRyZW4gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xl
IG51bWVyaWMgdmFsdWUgY29udGFpbmluZworICAgICAgICAvLyB0aGUgc3VtIG9mIHRoZSByZW1v
dmVkIG5vZGVzLCBhbmQgd2l0aCB0aGUgc2FtZSB1bml0LgorICAgICAgICBWZWN0b3I8UmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOworICAgICAgICBuZXdDaGlsZHJlbi5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKKyAgICAgICAgbmV3Q2hp
bGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW5bMF0uY29weVJlZigpKTsKKworICAgICAg
ICBDU1NVbml0VHlwZSBwcmV2aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24o
bmV3Q2hpbGRyZW5bMF0uZ2V0KCkpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBtX2NoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBhdXRvJiBjdXJyZW50Tm9k
ZSA9IG1fY2hpbGRyZW5baV07CisgICAgICAgICAgICBDU1NVbml0VHlwZSBjdXJyZW50VHlwZSA9
IHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihjdXJyZW50Tm9kZS5nZXQoKSk7CisKKyAgICAg
ICAgICAgIGF1dG8gY29udmVyc2lvblR5cGUgPSBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlw
ZXMocHJldmlvdXNUeXBlLCBjdXJyZW50VHlwZSk7CisgICAgICAgICAgICBpZiAoY29udmVyc2lv
blR5cGUgIT0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFs
aWQpIHsKKyAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
PihuZXdDaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmFkZChkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlPihjdXJyZW50Tm9kZS5nZXQoKSksIGNvbnZlcnNpb25UeXBlKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHJldmlvdXNU
eXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlKTsKKyAgICAgICAg
ICAgIG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChjdXJyZW50Tm9kZS5jb3B5UmVmKCkpOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwor
ICAgICAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0
aXBseSkgeworICAgICAgICAvLyBJZiByb290IGhhcyBtdWx0aXBsZSBjaGlsZHJlbiB0aGF0IGFy
ZSBudW1iZXJzIChub3QgcGVyY2VudGFnZXMgb3IgZGltZW5zaW9ucyksCisgICAgICAgIC8vIHJl
bW92ZSB0aGVtIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHNpbmdsZSBudW1iZXIgY29udGFpbmlu
ZyB0aGUgcHJvZHVjdCBvZiB0aGUgcmVtb3ZlZCBub2Rlcy4KKyAgICAgICAgZG91YmxlIG11bHRp
cGxpZXIgPSAxOworCisgICAgICAgIC8vIFNvcnRpbmcgd2lsbCBoYXZlIHB1dCB0aGUgbnVtYmVy
IG5vZGVzIGZpcnN0LgorICAgICAgICB1bnNpZ25lZCBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID0g
MDsKKyAgICAgICAgZm9yIChhdXRvJiBub2RlIDogbV9jaGlsZHJlbikgeworICAgICAgICAgICAg
YXV0byBub2RlVHlwZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihub2RlLmdldCgpKTsK
KyAgICAgICAgICAgIGlmIChub2RlVHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbXVsdGlwbGll
ciAqPSBub2RlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisgICAgICAg
ICAgICArK2xlYWRpbmdOdW1iZXJOb2RlQ291bnQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47CisgICAg
ICAgIG5ld0NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkp
OworICAgICAgICAKKyAgICAgICAgLy8gSWYgcm9vdCBjb250YWlucyBvbmx5IHR3byBjaGlsZHJl
biwgb25lIG9mIHdoaWNoIGlzIGEgbnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9yIGRpbWVuc2lv
bikgYW5kIHRoZSBvdGhlciBvZgorICAgICAgICAvLyB3aGljaCBpcyBhIFN1bSB3aG9zZSBjaGls
ZHJlbiBhcmUgYWxsIG51bWVyaWMgdmFsdWVzLCBtdWx0aXBseSBhbGwgb2YgdGhlIFN1beKAmXMg
Y2hpbGRyZW4gYnkgdGhlIG51bWJlciwgdGhlbgorICAgICAgICAvLyByZXR1cm4gdGhlIFN1bS4K
KyAgICAgICAgLy8gVGhlIFN1bSdzIGNoaWxkcmVuIHNpbXBsaWZpY2F0aW9uIHdpbGwgaGF2ZSBo
YXBwZW5lZCBhbHJlYWR5LgorICAgICAgICBib29sIGRpZE11bHRpcGx5ID0gZmFsc2U7CisgICAg
ICAgIGlmIChsZWFkaW5nTnVtYmVyTm9kZUNvdW50ICYmIG1fY2hpbGRyZW4uc2l6ZSgpIC0gbGVh
ZGluZ051bWJlck5vZGVDb3VudCA9PSAxKSB7CisgICAgICAgICAgICBhdXRvIG11bHRpcGxpY2Fu
ZENhdGVnb3J5ID0gY2FsY1VuaXRDYXRlZ29yeShwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24o
bV9jaGlsZHJlbi5sYXN0KCkuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmIChtdWx0aXBsaWNhbmRD
YXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAgICAgICAgICAgICAg
IG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChtX2NoaWxkcmVuLmxhc3QoKS5jb3B5UmVmKCkp
OworICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5l
d0NoaWxkcmVuWzBdLmdldCgpKS5tdWx0aXBseShtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgICAg
ICBkaWRNdWx0aXBseSA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNP
cGVyYXRpb25Ob2RlPihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NTQ2Fs
Y09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9
PSBDYWxjT3BlcmF0b3I6OkFkZCkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG11bHRp
cGx5aW5nIHdpdGggYW5vdGhlciBvcGVyYXRpb24gdGhhdCBpcyBhbiBhZGRpdGlvbiBhbmQgYWxs
IHRoZSBhZGRlZCBjaGlsZHJlbgorICAgICAgICAgICAgICAgIC8vIGFyZSBwZXJjZW50YWdlcyBv
ciBkaW1lbnNpb25zLCB3ZSBzaG91bGQgbXVsdGlwbHkgZWFjaCBjaGlsZCBhbmQgbWFrZSB0aGlz
IGV4cHJlc3Npb24gYW4KKyAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbi4KKyAgICAgICAgICAg
ICAgICBhdXRvIGFsbENoaWxkcmVuQXJlUHJpbWl0aXZlVmFsdWVzID0gW10oY29uc3QgVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4pIC0+IGJvb2wKKyAgICAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJl
bikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlPihjaGlsZC5nZXQoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICBhdXRvJiBjaGls
ZHJlbiA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihtX2NoaWxkcmVuLmxhc3QoKS5n
ZXQoKSkuY2hpbGRyZW4oKTsKKyAgICAgICAgICAgICAgICBpZiAoYWxsQ2hpbGRyZW5BcmVQcmlt
aXRpdmVWYWx1ZXMoY2hpbGRyZW4pKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYg
Y2hpbGQgOiBjaGlsZHJlbikgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4u
YXBwZW5kKGNoaWxkLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb3duY2Fz
dDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdDaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLm11
bHRpcGx5KG11bHRpcGxpZXIpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIG1fb3BlcmF0b3IgPSBDYWxjT3BlcmF0b3I6OkFkZDsKKyAgICAgICAgICAgICAgICAg
ICAgZGlkTXVsdGlwbHkgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlmICghZGlkTXVsdGlwbHkpIHsKKyAgICAgICAgICAgIGlm
IChsZWFkaW5nTnVtYmVyTm9kZUNvdW50KSB7CisgICAgICAgICAgICAgICAgYXV0byBtdWx0aXBs
aWVyTm9kZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Y3JlYXRlKG11bHRpcGxpZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7CisgICAg
ICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobXVsdGlwbGll
ck5vZGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bGVhZGluZ051bWJlck5vZGVDb3VudDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW5baV0uY29w
eVJlZigpKTsKKyAgICAgICAgfQorCisgICAgICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7
CisgICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKKyAgICB9CisKKyAg
ICBpZiAoaXNNaW5Pck1heE5vZGUoKSAmJiBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSkgeworICAg
ICAgICBhdXRvIGNvbWJpbmVkVW5pdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBl
KCk7CisgICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmlu
YXRpb24oY29tYmluZWRVbml0VHlwZSk7CisgICAgICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpPdGhlcikKKyAgICAgICAgICAgIGNvbWJpbmVkVW5pdFR5cGUgPSBjYW5v
bmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOworCisgICAgICAg
IGRvdWJsZSByZXNvbHZlZFZhbHVlID0gZG91YmxlVmFsdWUoY29tYmluZWRVbml0VHlwZSk7Cisg
ICAgICAgIGF1dG8gbmV3Q2hpbGQgPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUo
Q1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXNvbHZlZFZhbHVlLCBjb21iaW5lZFVuaXRUeXBl
KSk7CisKKyAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOworICAgICAgICBtX2NoaWxkcmVuLmFw
cGVuZChXVEZNb3ZlKG5ld0NoaWxkKSk7CisgICAgfQorfQorCisvLyBodHRwczovL2RyYWZ0cy5j
c3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNzaW1wbGlmeS1hLWNhbGN1bGF0aW9uLXRyZWUKKworUmVm
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUpCit7CisgICAgcmV0dXJuIHNpbXBs
aWZ5UmVjdXJzaXZlKFdURk1vdmUocm9vdE5vZGUpLCAwKTsKK30KKworUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5UmVjdXJzaXZlKFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUsIGludCBkZXB0aCkKK3sKKyAgICBpZiAo
aXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgeworICAgICAgICBhdXRvJiBvcGVy
YXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlLmdldCgp
KTsKKyAgICAgICAgCisgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGls
ZHJlbigpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gY2hpbGQgPSBjaGlsZHJlbltpXS5jb3B5UmVmKCk7
CisgICAgICAgICAgICBhdXRvIG5ld05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNo
aWxkKSwgZGVwdGggKyAxKTsKKyAgICAgICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9IGNoaWxk
cmVuW2ldLnB0cigpKQorICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gV1RGTW92ZShuZXdO
b2RlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJv
b3ROb2RlKSkgeworICAgICAgICBhdXRvJiBuZWdhdGVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05l
Z2F0ZU5vZGU+KHJvb3ROb2RlLmdldCgpKTsKKyAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4gY2hpbGQgPSBuZWdhdGVOb2RlLmNoaWxkKCk7CisgICAgICAgIGF1dG8gbmV3Tm9kZSA9
IHNpbXBsaWZ5UmVjdXJzaXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOworICAgICAgICBp
ZiAobmV3Tm9kZS5wdHIoKSAhPSAmbmVnYXRlTm9kZS5jaGlsZCgpKQorICAgICAgICAgICAgbmVn
YXRlTm9kZS5zZXRDaGlsZChXVEZNb3ZlKG5ld05vZGUpKTsKKyAgICB9IGVsc2UgaWYgKGlzPENT
U0NhbGNJbnZlcnROb2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9
IGRvd25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZS5nZXQoKSk7CisgICAgICAgIFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNoaWxkID0gaW52ZXJ0Tm9kZS5jaGlsZCgpOworICAg
ICAgICBhdXRvIG5ld05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxkKSwgZGVw
dGggKyAxKTsKKyAgICAgICAgaWYgKG5ld05vZGUucHRyKCkgIT0gJmludmVydE5vZGUuY2hpbGQo
KSkKKyAgICAgICAgICAgIGludmVydE5vZGUuc2V0Q2hpbGQoV1RGTW92ZShuZXdOb2RlKSk7Cisg
ICAgfQorCisgICAgcmV0dXJuIHNpbXBsaWZ5Tm9kZShXVEZNb3ZlKHJvb3ROb2RlKSwgZGVwdGgp
OworfQorCitSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
c2ltcGxpZnlOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUsIGludCBk
ZXB0aCkKK3sKKyAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUp
KSB7CisgICAgICAgIC8vIElmIHJvb3QgaXMgYSBwZXJjZW50YWdlIHRoYXQgd2lsbCBiZSByZXNv
bHZlZCBhZ2FpbnN0IGFub3RoZXIgdmFsdWUsIGFuZCB0aGVyZSBpcyBlbm91Z2ggaW5mb3JtYXRp
b24KKyAgICAgICAgLy8gYXZhaWxhYmxlIHRvIHJlc29sdmUgaXQsIGRvIHNvLCBhbmQgZXhwcmVz
cyB0aGUgcmVzdWx0aW5nIG51bWVyaWMgdmFsdWUgaW4gdGhlIGFwcHJvcHJpYXRlIGNhbm9uaWNh
bAorICAgICAgICAvLyB1bml0LiBSZXR1cm4gdGhlIHZhbHVlLgorCisgICAgICAgIC8vIElmIHJv
b3QgaXMgYSBkaW1lbnNpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGluIGl0cyBjYW5vbmljYWwg
dW5pdCwgYW5kIHRoZXJlIGlzIGVub3VnaCBpbmZvcm1hdGlvbgorICAgICAgICAvLyBhdmFpbGFi
bGUgdG8gY29udmVydCBpdCB0byB0aGUgY2Fub25pY2FsIHVuaXQsIGRvIHNvLCBhbmQgcmV0dXJu
IHRoZSB2YWx1ZS4KKyAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWVOb2RlID0gZG93bmNhc3Q8
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICBwcmlt
aXRpdmVWYWx1ZU5vZGUuY2Fub25pY2FsaXplVW5pdCgpOworICAgICAgICByZXR1cm4gV1RGTW92
ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgLy8gSWYgcm9vdCBpcyBhbiBvcGVyYXRvciBub2Rl
IHRoYXTigJlzIG5vdCBvbmUgb2YgdGhlIGNhbGMtb3BlcmF0b3Igbm9kZXMsIGFuZCBhbGwgb2Yg
aXRzIGNoaWxkcmVuIGFyZSBudW1lcmljIHZhbHVlcworICAgIC8vIHdpdGggZW5vdWdoIGluZm9y
bWF0aW9uIHRvIGNvbXB1dGVkIHRoZSBvcGVyYXRpb24gcm9vdCByZXByZXNlbnRzLCByZXR1cm4g
dGhlIHJlc3VsdCBvZiBydW5uaW5nIHJvb3TigJlzIG9wZXJhdGlvbgorICAgIC8vIHVzaW5nIGl0
cyBjaGlsZHJlbiwgZXhwcmVzc2VkIGluIHRoZSByZXN1bHTigJlzIGNhbm9uaWNhbCB1bml0Lgor
ICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1
dG8mIGNhbGNPcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJv
b3ROb2RlLmdldCgpKTsKKyAgICAgICAgLy8gRG9uJ3Qgc2ltcGxpZnkgYXQgdGhlIHJvb3QsIG90
aGVyd2lzZSB3ZSBsb3NlIHRyYWNrIG9mIHRoZSBvcGVyYXRpb24gZm9yIHNlcmlhbGl6YXRpb24u
CisgICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpLnNpemUoKSA9PSAxICYm
IGRlcHRoKQorICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hp
bGRyZW4oKVswXSk7CisgICAgICAgIAorICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXND
YWxjU3VtTm9kZSgpKSB7CisgICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5ob2lzdENoaWxk
cmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcjo6QWRkKTsKKyAgICAgICAgICAgIGNhbGNPcGVy
YXRpb25Ob2RlLmNvbWJpbmVDaGlsZHJlbigpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNh
bGNPcGVyYXRpb25Ob2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCkpIHsKKyAgICAgICAgICAgIGNhbGNP
cGVyYXRpb25Ob2RlLmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpNdWx0
aXBseSk7CisgICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4oKTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzTWlu
T3JNYXhOb2RlKCkpCisgICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRy
ZW4oKTsKKworICAgICAgICAvLyBJZiBvbmx5IG9uZSBjaGlsZCByZW1haW5zLCByZXR1cm4gdGhl
IGNoaWxkIChleGNlcHQgYXQgdGhlIHJvb3QpLgorICAgICAgICBhdXRvIHNob3VsZENvbWJpbmVQ
YXJlbnRXaXRoT25seUNoaWxkID0gW10oY29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUmIHBhcmVu
dCwgaW50IGRlcHRoKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVu
KCkuc2l6ZSgpICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
ICAgICAvLyBBbHdheXMgc2ltcGxpZnkgYmVsb3cgdGhlIHJvb3QuCisgICAgICAgICAgICBpZiAo
ZGVwdGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICAgICAgICAgIC8vIEF0
IHRoZSByb290LCBwcmVzZXJ2ZSB0aGUgcm9vdCBmdW5jdGlvbiBieSBvbmx5IG1lcmdpbmcgbm9k
ZXMgd2l0aCB0aGUgc2FtZSBmdW5jdGlvbi4KKyAgICAgICAgICAgIGF1dG8mIGNoaWxkID0gcGFy
ZW50LmNoaWxkcmVuKCkuZmlyc3QoKTsKKyAgICAgICAgICAgIGlmICghaXM8Q1NTQ2FsY09wZXJh
dGlvbk5vZGU+KGNoaWxkKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgICAgIGF1dG8gcGFyZW50RnVuY3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihwYXJlbnQu
Y2FsY09wZXJhdG9yKCkpOworICAgICAgICAgICAgYXV0byBjaGlsZEZ1bmN0aW9uID0gZnVuY3Rp
b25Gcm9tT3BlcmF0b3IoZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgp
KS5jYWxjT3BlcmF0b3IoKSk7CisgICAgICAgICAgICByZXR1cm4gY2hpbGRGdW5jdGlvbiA9PSBw
YXJlbnRGdW5jdGlvbjsKKyAgICAgICAgfTsKKworICAgICAgICBpZiAoc2hvdWxkQ29tYmluZVBh
cmVudFdpdGhPbmx5Q2hpbGQoY2FsY09wZXJhdGlvbk5vZGUsIGRlcHRoKSkKKyAgICAgICAgICAg
IHJldHVybiBXVEZNb3ZlKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCkuZmlyc3QoKSk7CisK
KyAgICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOworICAgIH0KKworICAgIGlmIChpczxD
U1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9
IGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKKyAg
ICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYSBudW1lcmljIHZhbHVlLCByZXR1cm4gYW4g
ZXF1aXZhbGVudCBudW1lcmljIHZhbHVlLCBidXQgd2l0aCB0aGUgdmFsdWUgbmVnYXRlZCAoMCAt
IHZhbHVlKS4KKyAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxk
Tm9kZSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5p
c051bWVyaWNWYWx1ZSgpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlPihjaGlsZE5vZGUpLm5lZ2F0ZSgpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxk
Tm9kZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQg
aXMgYSBOZWdhdGUgbm9kZSwgcmV0dXJuIHRoZSBjaGlsZOKAmXMgY2hpbGQuCisgICAgICAgIGlm
IChpczxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGROb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBk
b3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGROb2RlKS5jaGlsZCgpOworICAgICAgICAK
KyAgICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOworICAgIH0KKworICAgIGlmIChpczxD
U1NDYWxjSW52ZXJ0Tm9kZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9
IGRvd25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKKyAg
ICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRhZ2Ug
b3IgZGltZW5zaW9uKSByZXR1cm4gdGhlIHJlY2lwcm9jYWwgb2YgdGhlIGNoaWxk4oCZcyB2YWx1
ZS4KKyAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkg
JiYgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pc051bWVy
aWNWYWx1ZSgpKSB7CisgICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPihjaGlsZE5vZGUpLmludmVydCgpOworICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTsK
KyAgICAgICAgfQorCisgICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGFuIEludmVydCBu
b2RlLCByZXR1cm4gdGhlIGNoaWxk4oCZcyBjaGlsZC4KKyAgICAgICAgaWYgKGlzPENTU0NhbGNJ
bnZlcnROb2RlPihjaGlsZE5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0Nh
bGNJbnZlcnROb2RlPihjaGlsZE5vZGUpLmNoaWxkKCk7CisKKyAgICAgICAgcmV0dXJuIFdURk1v
dmUocm9vdE5vZGUpOworICAgIH0KKworICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKK30K
KworQ1NTVW5pdFR5cGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnByaW1pdGl2ZVR5cGUoKSBjb25z
dAoreworICAgIGF1dG8gdW5pdENhdGVnb3J5ID0gY2F0ZWdvcnkoKTsKKyAgICBzd2l0Y2ggKHVu
aXRDYXRlZ29yeSkgeworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgorI2lm
IEFTU0VSVF9FTkFCTEVECisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQor
ICAgICAgICAgICAgQVNTRVJUKGNoaWxkLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcik7CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSOworCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OiB7CisgICAgICAg
IGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybiBDU1NVbml0VHlw
ZTo6Q1NTX1VOS05PV047CisKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpIHsK
KyAgICAgICAgICAgIGlmIChtX2NoaWxkcmVuWzBdLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlblsxXS0+
cHJpbWl0aXZlVHlwZSgpOworICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMV0tPmNhdGVnb3J5
KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgICAgIHJldHVy
biBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgIH0KKyAgICAgICAgQ1NT
VW5pdFR5cGUgZmlyc3RUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOworICAg
ICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICAgICAgaWYgKGZp
cnN0VHlwZSAhPSBjaGlsZC0+cHJpbWl0aXZlVHlwZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZp
cnN0VHlwZTsKKyAgICB9CisKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoK
KyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOgorICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6VGltZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5j
eToKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpID09IDEpCisgICAgICAgICAgICByZXR1
cm4gbV9jaGlsZHJlbi5maXJzdCgpLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgIHJldHVybiBj
YW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkodW5pdENhdGVnb3J5KTsKKwor
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKKyAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjoKKyAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsK
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIENTU1VuaXRUeXBl
OjpDU1NfVU5LTk9XTjsKK30KKworc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4g
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7CisgICAgbm9kZXMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8m
IGNoaWxkIDogbV9jaGlsZHJlbikgeworICAgICAgICBhdXRvIG5vZGUgPSBjaGlsZC0+Y3JlYXRl
Q2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpOworICAgICAgICBpZiAoIW5vZGUpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFdU
Rk1vdmUobm9kZSkpOworICAgIH0KKworICAgIC8vIFJldmVyc2UgdGhlIG9wZXJhdGlvbiB3ZSBk
aWQgd2hlbiBjcmVhdGluZyB0aGlzIG5vZGUsIHJlY292ZXJpbmcgYSBzdWl0YWJsZSBkZXN0aW5h
dGlvbiBjYXRlZ29yeSBmb3Igb3RoZXJ3aXNlLWFtYmlndW91cyBtaW4vbWF4L2NsYW1wIG5vZGVz
LgorICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNhdGVnb3J5IGlzIHJlYWxseSBvbmx5IGdvb2QgZW5v
dWdoIGZvciB0aGF0IHB1cnBvc2UgYW5kIGlzIG5vdCBhY2N1cmF0ZSBmb3Igb3RoZXIgbm9kZSB0
eXBlczsgd2UgY291bGQgdXNlIGEgYm9vbGVhbiBpbnN0ZWFkLgorICAgIGF1dG8gZGVzdGluYXRp
b25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOworICAgIGlmIChjYXRlZ29y
eSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgpCisgICAgICAgIGRlc3Rp
bmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7CisgICAgZWxzZSBp
ZiAoY2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyKQorICAg
ICAgICBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOwor
CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUo
bm9kZXMpLCBtX29wZXJhdG9yLCBkZXN0aW5hdGlvbkNhdGVnb3J5KTsKK30KKworZG91YmxlIENT
U0NhbGNPcGVyYXRpb25Ob2RlOjpkb3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29u
c3QKK3sKKyAgICBib29sIGFsbG93TnVtYmVycyA9IGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVy
YXRvcjo6TXVsdGlwbHk7CisKKyAgICByZXR1cm4gZXZhbHVhdGUobV9jaGlsZHJlbi5tYXAoWyZd
IChhdXRvJiBjaGlsZCkgeworICAgICAgICBDU1NVbml0VHlwZSBjaGlsZFR5cGUgPSB1bml0VHlw
ZTsKKyAgICAgICAgaWYgKGFsbG93TnVtYmVycyAmJiB1bml0VHlwZSAhPSBDU1NVbml0VHlwZTo6
Q1NTX05VTUJFUiAmJiBjaGlsZC0+cHJpbWl0aXZlVHlwZSgpID09IENTU1VuaXRUeXBlOjpDU1Nf
TlVNQkVSKQorICAgICAgICAgICAgY2hpbGRUeXBlID0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7
CisgICAgICAgIHJldHVybiBjaGlsZC0+ZG91YmxlVmFsdWUoY2hpbGRUeXBlKTsKKyAgICB9KSk7
Cit9CisKK2RvdWJsZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAg
IHJldHVybiBldmFsdWF0ZShtX2NoaWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7CisgICAg
ICAgIHJldHVybiBjaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKKyAgICB9
KSk7Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRh
dGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QK
K3sKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAgICAgY2hpbGQtPmNv
bGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK3ZvaWQg
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVu
ZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgZm9y
IChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIGNoaWxkLT5jb2xsZWN0RGlyZWN0
Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKwordm9pZCBDU1NDYWxj
T3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYg
bm9kZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKK3sKKyAgICBhdXRvIHNob3VsZE91dHB1dEVu
Y2xvc2luZ0NhbGMgPSBbXShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJvb3ROb2RlKSB7
CisgICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7CisgICAg
ICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU+KHJvb3ROb2RlKTsKKyAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Ob2RlLmlzQ2FsY1N1
bU5vZGUoKSB8fCBvcGVyYXRpb25Ob2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuICFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZSk7
CisgICAgfTsKKyAgICAKKyAgICBib29sIG91dHB1dENhbGMgPSBzaG91bGRPdXRwdXRFbmNsb3Np
bmdDYWxjKG5vZGUpOworICAgIGlmIChvdXRwdXRDYWxjKQorICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiY2FsYygiKTsKKworICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShub2RlLCBidWlsZGVyLCBH
cm91cGluZ1BhcmVuczo6T21pdCk7CisKKyAgICBpZiAob3V0cHV0Q2FsYykKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoJyknKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqIGZ1bmN0aW9uUHJlZml4
Rm9yT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBj
YXNlIENhbGNPcGVyYXRvcjo6QWRkOgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoK
KyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6
OkRpdmlkZToKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAi
IjsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiByZXR1cm4gIm1pbigiOworICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpNYXg6IHJldHVybiAibWF4KCI7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6
OkNsYW1wOiByZXR1cm4gImNsYW1wKCI7CisgICAgfQorICAgIAorICAgIHJldHVybiAiIjsKK30K
KworLy8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NlcmlhbGl6ZS1h
LWNhbGN1bGF0aW9uLXRyZWU+Cit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1Rl
eHRSZWN1cnNpdmUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWls
ZGVyJiBidWlsZGVyLCBHcm91cGluZ1BhcmVucyBwYXJlbnMpCit7CisgICAgLy8gSWYgcm9vdCBp
cyBhIG51bWVyaWMgdmFsdWUsIG9yIGEgbm9uLW1hdGggZnVuY3Rpb24sIHNlcmlhbGl6ZSByb290
IHBlciB0aGUgbm9ybWFsIHJ1bGVzIGZvciBpdCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCisgICAg
aWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKSB7CisgICAgICAgIGF1dG8m
IHZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpOwor
ICAgICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZU5vZGUuY3VzdG9tQ1NTVGV4dCgpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obm9k
ZSkpIHsKKyAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVy
YXRpb25Ob2RlPihub2RlKTsKKworICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1O
b2RlKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHJvb3QgaXMgYSBTdW0gbm9kZSwgbGV0IHMgYmUg
YSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigiLgorICAgICAgICAgICAgaWYgKHBhcmVu
cyA9PSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgnKCcpOworCisgICAgICAgICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRl
ZCBjaGlsZHJlbi4KKyAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5j
aGlsZHJlbigpOworICAgICAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7CisgICAgICAg
ICAgICAvLyBTZXJpYWxpemUgcm9vdOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8g
cy4KKyAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBi
dWlsZGVyKTsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQg
dGhlIGZpcnN0OgorICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBOZWdhdGUgbm9kZSwgYXBw
ZW5kICIgLSAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBOZWdhdGXigJlzIGNoaWxkIGFuZCBh
cHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBuZWdh
dGl2ZSBudW1lcmljIHZhbHVlLCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhl
IG5lZ2F0aW9uIG9mIGNoaWxkIGFzIG5vcm1hbCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4K
KyAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBwZW5kICIgKyAiIHRvIHMsIHRoZW4gc2VyaWFs
aXplIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAgICAgICAgICAgICBpZiAoaXM8Q1NT
Q2FsY05lZ2F0ZU5vZGU+KGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFw
cGVuZCgiIC0gIik7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShk
b3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkKCksIGJ1aWxkZXIp
OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU+KGNoaWxkKSkgeworICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZC5nZXQoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZU5vZGUuaXNOZWdhdGl2ZSgp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC0gIik7CisgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgdGhlIG5lZ2F0aW9uIG9mIGNoaWxkLgor
ICAgICAgICAgICAgICAgICAgICAgICAgYXV0byB1bml0VHlwZSA9IHByaW1pdGl2ZVZhbHVlTm9k
ZS52YWx1ZSgpLnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKDAgLSBwcmltaXRpdmVWYWx1ZU5vZGUudmFsdWUoKS5kb3VibGVWYWx1ZSgpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcodW5pdFR5cGUpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIgKyAiKTsKKyAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGQsIGJ1
aWxkZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3Vw
aW5nUGFyZW5zOjpJbmNsdWRlKQorICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChv
cGVyYXRpb25Ob2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCkpIHsKKyAgICAgICAgICAgIC8vIElmIHJv
b3QgaXMgYSBQcm9kdWN0IG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWlu
aW5nICIoIi4KKyAgICAgICAgICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1
ZGUpCisgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJygnKTsKKworICAgICAgICAgICAg
Ly8gU2ltcGxpZmljYXRpb24gYWxyZWFkeSBzb3J0ZWQgY2hpbGRyZW4uCisgICAgICAgICAgICBh
dXRvJiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKKyAgICAgICAgICAgIEFT
U0VSVChjaGlsZHJlbi5zaXplKCkpOworICAgICAgICAgICAgLy8gU2VyaWFsaXplIHJvb3TigJlz
IGZpcnN0IGNoaWxkLCBhbmQgYXBwZW5kIGl0IHRvIHMuCisgICAgICAgICAgICBidWlsZENTU1Rl
eHRSZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVpbGRlcik7CisKKyAgICAgICAgICAgIC8v
IEZvciBlYWNoIGNoaWxkIG9mIHJvb3QgYmV5b25kIHRoZSBmaXJzdDoKKyAgICAgICAgICAgIC8v
IElmIGNoaWxkIGlzIGFuIEludmVydCBub2RlLCBhcHBlbmQgIiAvICIgdG8gcywgdGhlbiBzZXJp
YWxpemUgdGhlIEludmVydOKAmXMgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisg
ICAgICAgICAgICAvLyBPdGhlcndpc2UsIGFwcGVuZCAiICogIiB0byBzLCB0aGVuIHNlcmlhbGl6
ZSBjaGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAg
IGF1dG8mIGNoaWxkID0gY2hpbGRyZW5baV07CisgICAgICAgICAgICAgICAgaWYgKGlzPENTU0Nh
bGNJbnZlcnROb2RlPihjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBl
bmQoIiAvICIpOworICAgICAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93
bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAqICIpOworICAgICAgICAgICAgICAgIGJ1aWxk
Q1NTVGV4dFJlY3Vyc2l2ZShjaGlsZCwgYnVpbGRlcik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCisgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIElmIHJvb3QgaXMgYW55dGhpbmcgYnV0IGEgU3VtLCBOZWdhdGUsIFBy
b2R1Y3QsIG9yIEludmVydCBub2RlLCBzZXJpYWxpemUgYSBtYXRoIGZ1bmN0aW9uIGZvciB0aGUK
KyAgICAgICAgLy8gZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSB0eXBlLCB0cmVh
dGluZyB0aGUgbm9kZeKAmXMgY2hpbGRyZW4gYXMgdGhlIGZ1bmN0aW9u4oCZcworICAgICAgICAv
LyBjb21tYS1zZXBhcmF0ZWQgY2FsY3VsYXRpb24gYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSBy
ZXN1bHQuCisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3Io
b3BlcmF0aW9uTm9kZS5jYWxjT3BlcmF0b3IoKSkpOworCisgICAgICAgIGF1dG8mIGNoaWxkcmVu
ID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOworICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6
ZSgpKTsKKyAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0KCksIGJ1
aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAxOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIsICIpOworICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuW2ld
LCBidWlsZGVyLCBHcm91cGluZ1BhcmVuczo6T21pdCk7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
CisgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihub2RlKSkgeworICAgICAgICBhdXRvJiBu
ZWdhdGVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpOworICAgICAgICAv
LyBJZiByb290IGlzIGEgTmVnYXRlIG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBj
b250YWluaW5nICIoLTEgKiAiLgorICAgICAgICBidWlsZGVyLmFwcGVuZCgiLTEgKiIpOworICAg
ICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUobmVnYXRlTm9kZS5jaGlsZCgpLCBidWlsZGVyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5v
ZGU+KG5vZGUpKSB7CisgICAgICAgIGF1dG8mIGludmVydE5vZGUgPSBkb3duY2FzdDxDU1NDYWxj
SW52ZXJ0Tm9kZT4obm9kZSk7CisgICAgICAgIC8vIElmIHJvb3QgaXMgYW4gSW52ZXJ0IG5vZGUs
IGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWluaW5nICIoMSAvICIuCisgICAgICAg
IGJ1aWxkZXIuYXBwZW5kKCIxIC8gIik7CisgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShp
bnZlcnROb2RlLmNoaWxkKCksIGJ1aWxkZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorfQor
Cit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAor
eworICAgIHRzIDw8ICJjYWxjIG9wZXJhdGlvbiAiIDw8IG1fb3BlcmF0b3IgPDwgIiAoY2F0ZWdv
cnk6ICIgPDwgY2F0ZWdvcnkoKSA8PCAiLCB0eXBlICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIp
IjsKKworICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMpOworICAgIHRzIDw8IG1f
Y2hpbGRyZW4uc2l6ZSgpIDw8ICIgY2hpbGRyZW4iOworICAgIGZvciAoYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKQorICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm5vZGUiLCBjaGlsZCk7Cit9CisK
K2Jvb2wgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUmIGV4cCkgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IGV4cC50eXBlKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBvdGhl
ciA9IHN0YXRpY19jYXN0PGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJj4oZXhwKTsKKworICAg
IGlmIChtX2NoaWxkcmVuLnNpemUoKSAhPSBvdGhlci5tX2NoaWxkcmVuLnNpemUoKSB8fCBtX29w
ZXJhdG9yICE9IG90aGVyLm1fb3BlcmF0b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIWNvbXBhcmVDU1NWYWx1ZShtX2NoaWxkcmVuW2ldLCBvdGhlci5tX2NoaWxkcmVuW2ld
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2RvdWJsZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcihDYWxjT3Bl
cmF0b3Igb3AsIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikKK3sKKyAgICBzd2l0Y2gg
KG9wKSB7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogeworICAgICAgICBkb3VibGUgc3Vt
ID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAg
c3VtICs9IGNoaWxkOworICAgICAgICByZXR1cm4gc3VtOworICAgIH0KKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6U3VidHJhY3Q6CisgICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMik7
CisgICAgICAgIHJldHVybiBjaGlsZHJlblswXSAtIGNoaWxkcmVuWzFdOworICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseTogeworICAgICAgICBkb3VibGUgcHJvZHVjdCA9IDE7CisgICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgICAgIHByb2R1Y3QgKj0g
Y2hpbGQ7CisgICAgICAgIHJldHVybiBwcm9kdWN0OworICAgIH0KKyAgICBjYXNlIENhbGNPcGVy
YXRvcjo6RGl2aWRlOgorICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwgY2hp
bGRyZW4uc2l6ZSgpID09IDIpOworICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCisg
ICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4o
KTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC8gY2hpbGRyZW5bMV07CisgICAgY2FzZSBD
YWxjT3BlcmF0b3I6Ok1pbjogeworICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
CisgICAgICAgIGRvdWJsZSBtaW5pbXVtID0gY2hpbGRyZW5bMF07CisgICAgICAgIGZvciAoYXV0
byBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmlt
dW0sIGNoaWxkKTsKKyAgICAgICAgcmV0dXJuIG1pbmltdW07CisgICAgfQorICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNYXg6IHsKKyAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwor
ICAgICAgICBkb3VibGUgbWF4aW11bSA9IGNoaWxkcmVuWzBdOworICAgICAgICBmb3IgKGF1dG8g
Y2hpbGQgOiBjaGlsZHJlbikKKyAgICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVt
LCBjaGlsZCk7CisgICAgICAgIHJldHVybiBtYXhpbXVtOworICAgIH0KKyAgICBjYXNlIENhbGNP
cGVyYXRvcjo6Q2xhbXA6IHsKKyAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSAhPSAzKQorICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7
CisgICAgICAgIGRvdWJsZSBtaW4gPSBjaGlsZHJlblswXTsKKyAgICAgICAgZG91YmxlIHZhbHVl
ID0gY2hpbGRyZW5bMV07CisgICAgICAgIGRvdWJsZSBtYXggPSBjaGlsZHJlblsyXTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWF4KG1pbiwgc3RkOjptaW4odmFsdWUsIG1heCkpOworICAgIH0KKyAg
ICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKKworCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2Rl
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJh
dGlvbk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTQ2FsY09wZXJhdGlvbk5vZGUgZmluYWwgOiBw
dWJsaWMgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVh
dGUoQ2FsY09wZXJhdG9yLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxlZnRTaWRl
LCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSk7CisgICAgc3RhdGlj
IFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlU3VtKFZlY3RvcjxSZWY8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+IGNyZWF0ZVByb2R1Y3QoVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiYmIHZhbHVlcyk7CisgICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4g
Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciwgVmVjdG9yPFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5KTsKKworICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlm
eShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmKTsKKworICAgIHN0YXRpYyB2b2lkIGJ1aWxk
Q1NTVGV4dChjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmLCBTdHJpbmdCdWlsZGVyJik7CisK
KyAgICBDYWxjT3BlcmF0b3IgY2FsY09wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRv
cjsgfQorICAgIGJvb2wgaXNDYWxjU3VtTm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3Ig
PT0gQ2FsY09wZXJhdG9yOjpBZGQ7IH0KKyAgICBib29sIGlzQ2FsY1Byb2R1Y3ROb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OyB9CisgICAg
Ym9vbCBpc01pbk9yTWF4Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3IgPT0gQ2FsY09w
ZXJhdG9yOjpNaW4gfHwgbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1heDsgfQorICAgIGJv
b2wgc2hvdWxkU29ydENoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gaXNDYWxjU3VtTm9kZSgpIHx8
IGlzQ2FsY1Byb2R1Y3ROb2RlKCk7IH0KKworICAgIHZvaWQgaG9pc3RDaGlsZHJlbldpdGhPcGVy
YXRvcihDYWxjT3BlcmF0b3IpOworICAgIHZvaWQgY29tYmluZUNoaWxkcmVuKCk7CisgICAgCisg
ICAgYm9vbCBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSBjb25zdDsKKworICAgIGNvbnN0IFZlY3Rv
cjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4g
bV9jaGlsZHJlbjsgfQorICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIGNo
aWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCitwcml2YXRlOgorICAgIENTU0NhbGNP
cGVyYXRpb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENhbGNPcGVyYXRvciBv
cCwgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lkZSwgUmVmPENTU0NhbGNFeHBy
ZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
KGNhdGVnb3J5KQorICAgICAgICAsIG1fb3BlcmF0b3Iob3ApCisgICAgeworICAgICAgICBtX2No
aWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgICAgIG1fY2hpbGRyZW4udW5j
aGVja2VkQXBwZW5kKFdURk1vdmUobGVmdFNpZGUpKTsKKyAgICAgICAgbV9jaGlsZHJlbi51bmNo
ZWNrZWRBcHBlbmQoV1RGTW92ZShyaWdodFNpZGUpKTsKKyAgICB9CisKKyAgICBDU1NDYWxjT3Bl
cmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Igb3As
IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJlbikKKyAgICAgICAg
OiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnkpCisgICAgICAgICwgbV9vcGVyYXRvcihv
cCkKKyAgICAgICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQorICAgIHsKKyAgICB9
CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDc3NDYWxjT3BlcmF0aW9u
OyB9CisKKyAgICBib29sIGlzWmVybygpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICByZXR1
cm4gIWRvdWJsZVZhbHVlKHByaW1pdGl2ZVR5cGUoKSk7CisgICAgfQorCisgICAgYm9vbCBlcXVh
bHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisKKyAgICBDU1NVbml0
VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGRvdWJsZVZhbHVl
KENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQg
Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0
eUlEPiYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlv
bmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKKwor
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBzdGF0aWMgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlKiBnZXROdW1iZXJTaWRlKENTU0NhbGNFeHByZXNzaW9uTm9kZSYg
bGVmdFNpZGUsIENTU0NhbGNFeHByZXNzaW9uTm9kZSYgcmlnaHRTaWRlKQorICAgIHsKKyAgICAg
ICAgaWYgKGxlZnRTaWRlLmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVy
KQorICAgICAgICAgICAgcmV0dXJuICZsZWZ0U2lkZTsKKyAgICAgICAgaWYgKHJpZ2h0U2lkZS5j
YXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJl
dHVybiAmcmlnaHRTaWRlOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBk
b3VibGUgZXZhbHVhdGUoY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNoaWxkcmVuKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGV2YWx1YXRlT3BlcmF0b3IobV9vcGVyYXRvciwgY2hpbGRyZW4p
OworICAgIH0KKworICAgIHN0YXRpYyBkb3VibGUgZXZhbHVhdGVPcGVyYXRvcihDYWxjT3BlcmF0
b3IsIGNvbnN0IFZlY3Rvcjxkb3VibGU+Jik7CisgICAgc3RhdGljIFJlZjxDU1NDYWxjRXhwcmVz
c2lvbk5vZGU+IHNpbXBsaWZ5Tm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmLCBpbnQg
ZGVwdGgpOworICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBzaW1wbGlmeVJl
Y3Vyc2l2ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmLCBpbnQgZGVwdGgpOworICAgIAor
ICAgIGVudW0gY2xhc3MgR3JvdXBpbmdQYXJlbnMgeworICAgICAgICBPbWl0LAorICAgICAgICBJ
bmNsdWRlCisgICAgfTsKKyAgICBzdGF0aWMgdm9pZCBidWlsZENTU1RleHRSZWN1cnNpdmUoY29u
c3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRlciYsIEdyb3VwaW5nUGFyZW5z
ID0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpOworCisgICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0
b3I7CisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBtX2NoaWxkcmVuOwor
fTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUo
Q1NTQ2FsY09wZXJhdGlvbk5vZGUsIHR5cGUoKSA9PSBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lv
bk5vZGU6OlR5cGU6OkNzc0NhbGNPcGVyYXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Y2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgiCisK
KyNpbmNsdWRlICJDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0
aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5j
bHVkZSAiQ2FsY0V4cHJlc3Npb25MZW5ndGguaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk51
bWJlci5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWY8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4gQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6Y3JlYXRlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiB2YWx1ZSkKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFdURk1vdmUo
dmFsdWUpKSk7Cit9CisKK1JlZlB0cjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NVbml0VHlwZSB0eXBl
KQoreworICAgIGlmICghc3RkOjppc2Zpbml0ZSh2YWx1ZSkpCisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZhbHVlLCB0eXBlKSkpOworfQorCitTdHJpbmcgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmFsdWUtPmNzc1RleHQoKTsKK30KKworQ1NTVW5pdFR5cGUgQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZTo6cHJpbWl0aXZlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWUt
PnByaW1pdGl2ZVR5cGUoKTsKK30KKworQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsdWUpCisgICAg
OiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2FsY1VuaXRDYXRlZ29yeSh2YWx1ZS0+cHJpbWl0aXZl
VHlwZSgpKSkKKyAgICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCit7Cit9CisKKy8vIEZJWE1F
OiBVc2UgY2FsY1VuaXRDYXRlZ29yeT8KK2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
aXNOdW1lcmljVmFsdWUoKSBjb25zdAoreworICAgIHJldHVybiBtX3ZhbHVlLT5pc0xlbmd0aCgp
IHx8IG1fdmFsdWUtPmlzTnVtYmVyKCkgfHwgbV92YWx1ZS0+aXNQZXJjZW50YWdlKCkgfHwgbV92
YWx1ZS0+aXNBbmdsZSgpCisgICAgICAgIHx8IG1fdmFsdWUtPmlzVGltZSgpIHx8IG1fdmFsdWUt
PmlzUmVzb2x1dGlvbigpIHx8IG1fdmFsdWUtPmlzRmxleCgpIHx8IG1fdmFsdWUtPmlzRnJlcXVl
bmN5KCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOZWdhdGl2ZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzTnVtZXJpY1ZhbHVlKCkgJiYgbV92YWx1ZS0+ZG91Ymxl
VmFsdWUoKSA8IDAuMDsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpuZWdh
dGUoKQoreworICAgIEFTU0VSVChpc051bWVyaWNWYWx1ZSgpKTsKKyAgICBtX3ZhbHVlID0gQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgwLjAgLSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3Zh
bHVlLT5wcmltaXRpdmVUeXBlKCkpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmludmVydCgpCit7CisgICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVlKCkpOworICAgIGlmICgh
bV92YWx1ZS0+ZG91YmxlVmFsdWUoKSkKKyAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUoc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpLCBtX3Zh
bHVlLT5wcmltaXRpdmVUeXBlKCkpOworCisgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUoMS4wIC8gbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSwgbV92YWx1ZS0+cHJpbWl0aXZl
VHlwZSgpKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjphZGQoY29uc3Qg
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSYgbm9kZSwgVW5pdENvbnZlcnNpb24gdW5pdENvbnZl
cnNpb24pCit7CisgICAgYXV0byB2YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7
CisKKyAgICBzd2l0Y2ggKHVuaXRDb252ZXJzaW9uKSB7CisgICAgY2FzZSBVbml0Q29udmVyc2lv
bjo6SW52YWxpZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgVW5pdENvbnZlcnNpb246OlByZXNlcnZlOgorICAgICAgICBBU1NFUlQobm9k
ZS5wcmltaXRpdmVUeXBlKCkgPT0gdmFsdWVUeXBlKTsKKyAgICAgICAgbV92YWx1ZSA9IENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUobV92YWx1ZS0+ZG91YmxlVmFsdWUoKSArIG5vZGUuZG91Ymxl
VmFsdWUodmFsdWVUeXBlKSwgdmFsdWVUeXBlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBV
bml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOiB7CisgICAgICAgIGF1dG8gdmFsdWVDYXRlZ29y
eSA9IHVuaXRDYXRlZ29yeSh2YWx1ZVR5cGUpOworICAgICAgICAvLyBGSVhNRTogSXQncyBhd2t3
YXJkIHRoYXQgY2Fub25pY2FsVW5pdFR5cGVGb3JDYXRlZ29yeSgpIGhhcyBzcGVjaWFsIGhhbmRs
aW5nIGZvciBDU1NVbml0Q2F0ZWdvcnk6OlBlcmNlbnQuCisgICAgICAgIGF1dG8gY2Fub25pY2Fs
VHlwZSA9IHZhbHVlQ2F0ZWdvcnkgPT0gQ1NTVW5pdENhdGVnb3J5OjpQZXJjZW50ID8gQ1NTVW5p
dFR5cGU6OkNTU19QRVJDRU5UQUdFIDogY2Fub25pY2FsVW5pdFR5cGVGb3JDYXRlZ29yeSh2YWx1
ZUNhdGVnb3J5KTsKKyAgICAgICAgQVNTRVJUKGNhbm9uaWNhbFR5cGUgIT0gQ1NTVW5pdFR5cGU6
OkNTU19VTktOT1dOKTsKKyAgICAgICAgZG91YmxlIGxlZnRWYWx1ZSA9IG1fdmFsdWUtPmRvdWJs
ZVZhbHVlKGNhbm9uaWNhbFR5cGUpOworICAgICAgICBkb3VibGUgcmlnaHRWYWx1ZSA9IG5vZGUu
ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7CisgICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWUsIGNhbm9uaWNhbFR5cGUpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU6Om11bHRpcGx5KGRvdWJsZSBtdWx0aXBsaWVyKQoreworICAgIGF1dG8gdmFsdWVU
eXBlID0gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworICAgIEFTU0VSVChoYXNEb3VibGVWYWx1
ZSh2YWx1ZVR5cGUpKTsKKyAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSht
X3ZhbHVlLT5kb3VibGVWYWx1ZSh2YWx1ZVR5cGUpICogbXVsdGlwbGllciwgdmFsdWVUeXBlKTsK
K30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb252ZXJ0VG9Vbml0VHlwZShD
U1NVbml0VHlwZSB1bml0VHlwZSkKK3sKKyAgICBBU1NFUlQodW5pdENhdGVnb3J5KHVuaXRUeXBl
KSA9PSB1bml0Q2F0ZWdvcnkobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSk7CisgICAgZG91Ymxl
IG5ld1ZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOworICAgIG1fdmFsdWUg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5ld1ZhbHVlLCB1bml0VHlwZSk7Cit9CisKK3Zv
aWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y2Fub25pY2FsaXplVW5pdCgpCit7CisgICAg
YXV0byBjYXRlZ29yeSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihtX3ZhbHVl
LT5wcmltaXRpdmVUeXBlKCkpOworICAgIGlmIChjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpPdGhlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgYXV0byBjYW5vbmljYWxUeXBlID0g
Y2Fub25pY2FsVW5pdFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KGNhdGVnb3J5KTsKKyAgICBp
ZiAoY2Fub25pY2FsVHlwZSA9PSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGRvdWJsZSBuZXdWYWx1ZSA9IG1fdmFsdWUtPmRvdWJsZVZhbHVlKGNhbm9u
aWNhbFR5cGUpOworICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5ld1Zh
bHVlLCBjYW5vbmljYWxUeXBlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9u
Tm9kZT4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7Cisg
ICAgc3dpdGNoIChjYXRlZ29yeSgpKSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpO
dW1iZXI6CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTnVtYmVyPiht
X3ZhbHVlLT5mbG9hdFZhbHVlKCkpOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVu
Z3RoOgorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVu
Z3RoKG1fdmFsdWUtPmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKSwgTGVuZ3Ro
VHlwZTo6Rml4ZWQpKTsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6Cisg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOiB7CisgICAgICAgIHJl
dHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihtX3ZhbHVlLT5jb252ZXJ0VG9M
ZW5ndGg8Rml4ZWRGbG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbj4oY29udmVyc2lv
bkRhdGEpKTsKKyAgICB9CisgICAgLy8gT25seSB0eXBlcyB0aGF0IGNvdWxkIGJlIHBhcnQgb2Yg
YSBMZW5ndGggZXhwcmVzc2lvbiBjYW4gYmUgY29udmVydGVkCisgICAgLy8gdG8gYSBDYWxjRXhw
cmVzc2lvbk5vZGUuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIgbWFrZXMgbm8g
c2Vuc2UgYXMgYSBMZW5ndGguCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50
TnVtYmVyOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6CisgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
RnJlcXVlbmN5OgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworZG91YmxlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAoreworICAgIGlmICho
YXNEb3VibGVWYWx1ZSh1bml0VHlwZSkpIHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxk
IEFTU0VSVCh1bml0Q2F0ZWdvcnkobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSA9PSB1bml0Q2F0
ZWdvcnkodW5pdFR5cGUpKSwgYnV0IG9ubHkgd2hlbiBhbGwgY2FsbGVycyBhcmUgZml4ZWQgKGUu
Zy4gd2Via2l0Lm9yZy9iLzIwNDgyNikuCisgICAgICAgIGlmICh1bml0Q2F0ZWdvcnkobV92YWx1
ZS0+cHJpbWl0aXZlVHlwZSgpKSAhPSB1bml0Q2F0ZWdvcnkodW5pdFR5cGUpKSB7CisgICAgICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDYWxsaW5nIGRvdWJsZVZhbHVl
KCkgd2l0aCB1bml0ICIgPDwgdW5pdFR5cGUgPDwgIiBvbiBhIG5vZGUgb2YgdW5pdCB0eXBlICIg
PDwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpIDw8ICIgd2hpY2ggaXMgaW5jb21wYXRpYmxlIik7
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBtX3Zh
bHVlLT5kb3VibGVWYWx1ZSh1bml0VHlwZSk7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCitkb3VibGUgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhKSBjb25zdAoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkoKSkgeworICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgICAgICByZXR1cm4gbV92YWx1ZS0+Y29t
cHV0ZUxlbmd0aDxkb3VibGU+KGNvbnZlcnNpb25EYXRhKTsKKyAgICBjYXNlIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnQ6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6
CisgICAgICAgIHJldHVybiBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpOworICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToK
KyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpGcmVxdWVuY3k6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
cjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVu
Y2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgbV92YWx1
ZS0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKwor
dm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAor
eworICAgIG1fdmFsdWUtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2ll
cyh2YWx1ZXMpOworfQorCitib29sIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmlzWmVybygp
IGNvbnN0Cit7CisgICAgcmV0dXJuICFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpOworfQorCitib29s
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fdmFs
dWUsIHN0YXRpY19jYXN0PGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUmPihvdGhlciku
bV92YWx1ZSk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZHVtcChUZXh0
U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAidmFsdWUgIiA8PCBtX3ZhbHVlLT5jdXN0
b21DU1NUZXh0KCkgPDwgIiAoY2F0ZWdvcnk6ICIgPDwgY2F0ZWdvcnkoKSA8PCAiLCB0eXBlOiAi
IDw8IHByaW1pdGl2ZVR5cGUoKSA8PCAiKSI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZS5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIENTU1ByaW1pdGl2ZVZhbHVlOworY2xhc3MgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YTsKKworZW51bSBDU1NQcm9wZXJ0eUlEIDogdWludDE2X3Q7CisKK2NsYXNz
IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUgZmluYWwgOiBwdWJsaWMgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+IGNyZWF0ZShSZWY8Q1NTUHJpbWl0aXZl
VmFsdWU+JiYpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4g
Y3JlYXRlKGRvdWJsZSB2YWx1ZSwgQ1NTVW5pdFR5cGUpOworCisgICAgU3RyaW5nIGN1c3RvbUNT
U1RleHQoKSBjb25zdDsKKworICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBm
aW5hbDsKKworICAgIGJvb2wgaXNOdW1lcmljVmFsdWUoKSBjb25zdDsKKyAgICBib29sIGlzTmVn
YXRpdmUoKSBjb25zdDsKKworICAgIHZvaWQgbmVnYXRlKCk7CisgICAgdm9pZCBpbnZlcnQoKTsK
KworICAgIGVudW0gY2xhc3MgVW5pdENvbnZlcnNpb24geworICAgICAgICBJbnZhbGlkLAorICAg
ICAgICBQcmVzZXJ2ZSwKKyAgICAgICAgQ2Fub25pY2FsaXplCisgICAgfTsKKyAgICB2b2lkIGFk
ZChjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiwgVW5pdENvbnZlcnNpb24gPSBVbml0
Q29udmVyc2lvbjo6UHJlc2VydmUpOworICAgIHZvaWQgbXVsdGlwbHkoZG91YmxlKTsKKworICAg
IHZvaWQgY29udmVydFRvVW5pdFR5cGUoQ1NTVW5pdFR5cGUpOworICAgIHZvaWQgY2Fub25pY2Fs
aXplVW5pdCgpOworCisgICAgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIGJvb2wgaXNaZXJvKCkg
Y29uc3QgZmluYWw7CisgICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
JiBvdGhlcikgY29uc3QgZmluYWw7CisgICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gQ3NzQ2FsY1ByaW1pdGl2ZVZhbHVlOyB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZl
cnNpb25EYXRhJikgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRU
eXBlKSBjb25zdCBmaW5hbDsKKworICAgIGRvdWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NT
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgY29sbGVjdERp
cmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5k
ZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKKworICAgIHZvaWQg
ZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQg
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYpOworCisg
ICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3ZhbHVlOworfTsKKworfQorCitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUoQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVl
Tm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6Q3Nz
Q2FsY1ByaW1pdGl2ZVZhbHVlKQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2Fs
Y1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxj
VmFsdWUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0Nh
bGNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCisKKyNpbmNsdWRlICJD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCIKKyNpbmNsdWRlICJDU1NDYWxjSW52ZXJ0Tm9k
ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNOZWdhdGVOb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgiCisj
aW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW5SYW5nZS5oIgor
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNpbmNsdWRlICJDYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25MZW5ndGguaCIK
KyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1
ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0
IENhbGNFeHByZXNzaW9uTm9kZSYsIGNvbnN0IFJlbmRlclN0eWxlJik7CitzdGF0aWMgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0IExlbmd0aCYsIGNvbnN0IFJl
bmRlclN0eWxlJik7CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2Rl
PiBjcmVhdGVCbGVuZEhhbGYoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0eWxl
JiBzdHlsZSwgZmxvYXQgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25O
b2RlOjpjcmVhdGUoQ2FsY09wZXJhdG9yOjpNdWx0aXBseSwgY3JlYXRlQ1NTKGxlbmd0aCwgc3R5
bGUpLAorICAgICAgICBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpKSk7Cit9
CisKK3N0YXRpYyBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IGNyZWF0ZUNTUyhj
b25zdCBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiBub2Rlcywg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQoreworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4gdmFsdWVzOworICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG5v
ZGVzLnNpemUoKSk7CisgICAgZm9yIChhdXRvJiBub2RlIDogbm9kZXMpIHsKKyAgICAgICAgYXV0
byBjc3NOb2RlID0gY3JlYXRlQ1NTKCpub2RlLCBzdHlsZSk7CisgICAgICAgIGlmICghY3NzTm9k
ZSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB2YWx1ZXMudW5jaGVja2VkQXBwZW5k
KGNzc05vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorICAgIHJldHVybiB2YWx1ZXM7Cit9
CisKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7Cisg
ICAgc3dpdGNoIChub2RlLnR5cGUoKSkgeworICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6TnVtYmVyOiB7CisgICAgICAgIGZsb2F0IHZhbHVlID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Np
b25OdW1iZXI+KG5vZGUpLnZhbHVlKCk7IC8vIGRvdWJsZT8KKyAgICAgICAgcmV0dXJuIENTU0Nh
bGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHZh
bHVlLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikpOworICAgIH0KKyAgICBjYXNlIENhbGNFeHBy
ZXNzaW9uTm9kZVR5cGU6Okxlbmd0aDogeworICAgICAgICBhdXRvJiBsZW5ndGggPSBkb3duY2Fz
dDxDYWxjRXhwcmVzc2lvbkxlbmd0aD4obm9kZSkubGVuZ3RoKCk7CisgICAgICAgIGlmICghbGVu
Z3RoLmlzUGVyY2VudCgpICYmIGxlbmd0aC5pc1plcm8oKSkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gY3JlYXRlQ1NTKGxlbmd0aCwgc3R5bGUpOworICAgIH0K
KworICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb246IHsKKyAgICAgICAg
YXV0byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRp
b24+KG5vZGUpLmNoaWxkKCksIHN0eWxlKTsKKyAgICAgICAgaWYgKCFjaGlsZE5vZGUpCisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIENTU0NhbGNOZWdhdGVOb2Rl
OjpjcmVhdGUoY2hpbGROb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKyAgICBjYXNlIENh
bGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbjogeworICAgICAgICBhdXRvIGNoaWxkTm9k
ZSA9IGNyZWF0ZUNTUygqZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG5vZGUpLmNo
aWxkKCksIHN0eWxlKTsKKyAgICAgICAgaWYgKCFjaGlsZE5vZGUpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUoY2hp
bGROb2RlLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0KKyAgICBjYXNlIENhbGNFeHByZXNzaW9u
Tm9kZVR5cGU6Ok9wZXJhdGlvbjogeworICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93
bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KG5vZGUpOworICAgICAgICBhdXRvJiBvcGVy
YXRpb25DaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKKyAgICAgICAgQ2FsY09w
ZXJhdG9yIG9wID0gb3BlcmF0aW9uTm9kZS5nZXRPcGVyYXRvcigpOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7CisgICAg
ICAgICAgICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHls
ZSk7CisgICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA9PSAxKQor
ICAgICAgICAgICAgICAgIHJldHVybiBXVEZNb3ZlKGNoaWxkcmVuWzBdKTsKKyAgICAgICAgICAg
IHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUoY2hpbGRyZW4p
KTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHsKKyAg
ICAgICAgICAgIEFTU0VSVChvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkgPT0gMik7CisKKyAgICAg
ICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gdmFsdWVzOworICAgICAg
ICAgICAgdmFsdWVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkob3BlcmF0aW9uQ2hpbGRyZW4uc2l6
ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBmaXJzdENoaWxkID0gY3JlYXRl
Q1NTKCpvcGVyYXRpb25DaGlsZHJlblswXSwgc3R5bGUpOworICAgICAgICAgICAgYXV0byBzZWNv
bmRDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMV0sIHN0eWxlKTsKKworICAg
ICAgICAgICAgaWYgKCFzZWNvbmRDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmlyc3RD
aGlsZDsKKworICAgICAgICAgICAgYXV0byBuZWdhdGVOb2RlID0gQ1NTQ2FsY05lZ2F0ZU5vZGU6
OmNyZWF0ZShzZWNvbmRDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIGlmICgh
Zmlyc3RDaGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbmVnYXRlTm9kZTsKKworICAgICAg
ICAgICAgdmFsdWVzLmFwcGVuZChmaXJzdENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAg
ICAgICAgdmFsdWVzLmFwcGVuZChXVEZNb3ZlKG5lZ2F0ZU5vZGUpKTsKKworICAgICAgICAgICAg
cmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0oV1RGTW92ZSh2YWx1ZXMpKTsK
KyAgICAgICAgfQorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHsKKyAgICAg
ICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxl
KTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNyZWF0ZVByb2R1Y3QoV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICB9CisgICAgICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKKyAgICAgICAgICAgIEFTU0VSVChvcGVyYXRpb25D
aGlsZHJlbi5zaXplKCkgPT0gMik7CisKKyAgICAgICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4gdmFsdWVzOworICAgICAgICAgICAgdmFsdWVzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYXV0byBmaXJzdENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGlsZHJlblswXSwg
c3R5bGUpOworICAgICAgICAgICAgaWYgKCFmaXJzdENoaWxkKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgICAgICAgICBhdXRvIHNlY29uZENoaWxkID0gY3JlYXRlQ1NT
KCpvcGVyYXRpb25DaGlsZHJlblsxXSwgc3R5bGUpOworICAgICAgICAgICAgaWYgKCFzZWNvbmRD
aGlsZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIGF1dG8g
aW52ZXJ0Tm9kZSA9IENTU0NhbGNJbnZlcnROb2RlOjpjcmVhdGUoc2Vjb25kQ2hpbGQucmVsZWFz
ZU5vbk51bGwoKSk7CisKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoZmlyc3RDaGlsZC5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQoV1RGTW92ZShpbnZlcnRO
b2RlKSk7CisKKyAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRl
UHJvZHVjdChjcmVhdGVDU1Mob3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxlKSk7CisgICAgICAgIH0K
KyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjoKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0
b3I6Ok1heDoKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB7CisgICAgICAgICAg
ICBhdXRvIGNoaWxkcmVuID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7Cisg
ICAgICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVh
dGVNaW5Pck1heE9yQ2xhbXAob3AsIFdURk1vdmUoY2hpbGRyZW4pLCBvcGVyYXRpb25Ob2RlLmRl
c3RpbmF0aW9uQ2F0ZWdvcnkoKSk7CisgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICB9CisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpCbGVu
ZExlbmd0aDogeworICAgICAgICAvLyBGSVhNRTogKGh0dHA6Ly93ZWJraXQub3JnL2IvMTIyMDM2
KSBDcmVhdGUgYSBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgZXF1aXZhbGVudCBvZiBDYWxjRXhwcmVz
c2lvbkJsZW5kTGVuZ3RoLgorICAgICAgICBhdXRvJiBibGVuZCA9IGRvd25jYXN0PENhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGg+KG5vZGUpOworICAgICAgICBmbG9hdCBwcm9ncmVzcyA9IGJsZW5k
LnByb2dyZXNzKCk7CisgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRl
KENhbGNPcGVyYXRvcjo6QWRkLCBjcmVhdGVCbGVuZEhhbGYoYmxlbmQuZnJvbSgpLCBzdHlsZSwg
MSAtIHByb2dyZXNzKSwgY3JlYXRlQmxlbmRIYWxmKGJsZW5kLnRvKCksIHN0eWxlLCBwcm9ncmVz
cykpOworICAgIH0KKyAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OlVuZGVmaW5lZDoK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRy
OworfQorCitzdGF0aWMgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNv
bnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgc3dp
dGNoIChsZW5ndGgudHlwZSgpKSB7CisgICAgY2FzZSBMZW5ndGhUeXBlOjpQZXJjZW50OgorICAg
IGNhc2UgTGVuZ3RoVHlwZTo6Rml4ZWQ6CisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShsZW5ndGgsIHN0eWxl
KSk7CisgICAgY2FzZSBMZW5ndGhUeXBlOjpDYWxjdWxhdGVkOgorICAgICAgICByZXR1cm4gY3Jl
YXRlQ1NTKGxlbmd0aC5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpLCBzdHlsZSk7Cisg
ICAgY2FzZSBMZW5ndGhUeXBlOjpBdXRvOgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6SW50cmluc2lj
OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6TWluSW50cmluc2ljOgorICAgIGNhc2UgTGVuZ3RoVHlw
ZTo6TWluQ29udGVudDoKKyAgICBjYXNlIExlbmd0aFR5cGU6Ok1heENvbnRlbnQ6CisgICAgY2Fz
ZSBMZW5ndGhUeXBlOjpGaWxsQXZhaWxhYmxlOgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6Rml0Q29u
dGVudDoKKyAgICBjYXNlIExlbmd0aFR5cGU6OlJlbGF0aXZlOgorICAgIGNhc2UgTGVuZ3RoVHlw
ZTo6VW5kZWZpbmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0NTU0NhbGNWYWx1ZTo6Q1NTQ2FsY1ZhbHVlKFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiYgZXhwcmVzc2lvbiwgYm9vbCBzaG91bGRDbGFtcFRvTm9uTmVn
YXRpdmUpCisgICAgOiBDU1NWYWx1ZShDYWxjdWxhdGlvbkNsYXNzKQorICAgICwgbV9leHByZXNz
aW9uKFdURk1vdmUoZXhwcmVzc2lvbikpCisgICAgLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2
ZShzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUpCit7Cit9CisKK0NTU0NhbGNWYWx1ZTo6fkNTU0Nh
bGNWYWx1ZSgpID0gZGVmYXVsdDsKKworQ2FsY3VsYXRpb25DYXRlZ29yeSBDU1NDYWxjVmFsdWU6
OmNhdGVnb3J5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9leHByZXNzaW9uLT5jYXRlZ29yeSgp
OworfQorCitDU1NVbml0VHlwZSBDU1NDYWxjVmFsdWU6OnByaW1pdGl2ZVR5cGUoKSBjb25zdAor
eworICAgIHJldHVybiBtX2V4cHJlc3Npb24tPnByaW1pdGl2ZVR5cGUoKTsKK30KKworUmVmPENh
bGN1bGF0aW9uVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAg
ICByZXR1cm4gQ2FsY3VsYXRpb25WYWx1ZTo6Y3JlYXRlKG1fZXhwcmVzc2lvbi0+Y3JlYXRlQ2Fs
Y0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA/
IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlIDogVmFsdWVSYW5nZTo6QWxsKTsKK30KKwordm9pZCBD
U1NDYWxjVmFsdWU6OnNldFBlcm1pdHRlZFZhbHVlUmFuZ2UoVmFsdWVSYW5nZSByYW5nZSkKK3sK
KyAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA9IHJhbmdlICE9IFZhbHVlUmFuZ2U6OkFs
bDsKK30KKwordm9pZCBDU1NDYWxjVmFsdWU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVw
ZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKK3sKKyAgICBt
X2V4cHJlc3Npb24tPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVl
cyk7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAorewor
ICAgIG1fZXhwcmVzc2lvbi0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKHZhbHVlcyk7Cit9CisKK1N0cmluZyBDU1NDYWxjVmFsdWU6OmN1c3RvbUNTU1RleHQoKSBj
b25zdAoreworICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6YnVpbGRDU1NUZXh0KG1fZXhwcmVzc2lvbi5nZXQoKSwgYnVpbGRlcik7CisgICAgcmV0
dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKK30KKworYm9vbCBDU1NDYWxjVmFsdWU6OmVxdWFscyhj
b25zdCBDU1NDYWxjVmFsdWUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBjb21wYXJlQ1NT
VmFsdWUobV9leHByZXNzaW9uLCBvdGhlci5tX2V4cHJlc3Npb24pOworfQorCitpbmxpbmUgZG91
YmxlIENTU0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSB2YWx1ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgJiYgdmFsdWUgPCAw
ID8gMCA6IHZhbHVlOworfQorCitkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpkb3VibGVWYWx1ZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJlc3Npb24tPmRv
dWJsZVZhbHVlKHByaW1pdGl2ZVR5cGUoKSkpOworfQorCitkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpj
b21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNsYW1wVG9QZXJtaXR0ZWRSYW5nZShtX2V4cHJl
c3Npb24tPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSkpOworfQorCitib29sIENTU0Nh
bGNWYWx1ZTo6aXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCBmdW5jdGlvbklkKQoreworICAgIHN3
aXRjaCAoZnVuY3Rpb25JZCkgeworICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgorICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRDYWxjOgorICAgIGNhc2UgQ1NTVmFsdWVNaW46CisgICAgY2FzZSBDU1NWYWx1
ZU1heDoKKyAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit2b2lkIENTU0NhbGNWYWx1ZTo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sK
KyAgICB0cyA8PCBpbmRlbnQgPDwgIigiIDw8ICJDU1NDYWxjVmFsdWUiOworCisgICAgVGV4dFN0
cmVhbSBtdWx0aWxpbmVTdHJlYW07CisgICAgbXVsdGlsaW5lU3RyZWFtLnNldEluZGVudCh0cy5p
bmRlbnQoKSArIDIpOworCisgICAgbXVsdGlsaW5lU3RyZWFtLmR1bXBQcm9wZXJ0eSgic2hvdWxk
IGNsYW1wIG5vbi1uZWdhdGl2ZSIsIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKTsKKyAgICBt
dWx0aWxpbmVTdHJlYW0uZHVtcFByb3BlcnR5KCJleHByZXNzaW9uIiwgbV9leHByZXNzaW9uLmdl
dCgpKTsKKworICAgIHRzIDw8IG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7CisgICAgdHMgPDwg
IilcbiI7Cit9CisKK1JlZlB0cjxDU1NDYWxjVmFsdWU+IENTU0NhbGNWYWx1ZTo6Y3JlYXRlKENT
U1ZhbHVlSUQgZnVuY3Rpb24sIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ2Fs
Y3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHJhbmdlKQor
eworICAgIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlciBwYXJzZXIoZGVzdGluYXRpb25DYXRl
Z29yeSk7CisgICAgYXV0byBleHByZXNzaW9uID0gcGFyc2VyLnBhcnNlQ2FsYyh0b2tlbnMsIGZ1
bmN0aW9uKTsKKyAgICBpZiAoIWV4cHJlc3Npb24pCisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENTU0NhbGNWYWx1ZShleHByZXNzaW9uLnJl
bGVhc2VOb25OdWxsKCksIHJhbmdlICE9IFZhbHVlUmFuZ2U6OkFsbCkpOworICAgIExPR19XSVRI
X1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3JlYXRlICIgPDwgKnJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKyAgICAKK1JlZlB0cjxDU1NDYWxjVmFsdWU+IENT
U0NhbGNWYWx1ZTo6Y3JlYXRlKGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZhbHVlLCBjb25zdCBS
ZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAgYXV0byBleHByZXNzaW9uID0gY3JlYXRlQ1NTKHZh
bHVlLmV4cHJlc3Npb24oKSwgc3R5bGUpOworICAgIGlmICghZXhwcmVzc2lvbikKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIHNpbXBsaWZpZWRFeHByZXNzaW9uID0gQ1NTQ2Fs
Y09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSk7CisK
KyAgICBhdXRvIHJlc3VsdCA9IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoV1RGTW92ZShzaW1w
bGlmaWVkRXhwcmVzc2lvbiksIHZhbHVlLnNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSgpKSk7Cisg
ICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUg
ZnJvbSBDYWxjdWxhdGlvblZhbHVlOiAiIDw8ICpyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENTU0Nh
bGNWYWx1ZSYgdmFsdWUpCit7CisgICAgdmFsdWUuZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2Fs
Yy9DU1NDYWxjVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjVmFsdWUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMK
KyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBP
UiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpbmNsdWRlICJDU1NWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0Zvcndh
cmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlOworY2xhc3MgQ1NTUGFyc2VyVG9rZW5SYW5nZTsKK2Ns
YXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CitjbGFzcyBSZW5kZXJTdHlsZTsKKworZW51
bSBjbGFzcyBDU1NVbml0VHlwZSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgOiB1aW50OF90OworZW51bSBjbGFzcyBWYWx1ZVJhbmdlIDogdWludDhfdDsKKworY2xh
c3MgQ1NTQ2FsY1ZhbHVlIGZpbmFsIDogcHVibGljIENTU1ZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKENTU1ZhbHVlSUQgZnVuY3Rpb24sIGNv
bnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9u
Q2F0ZWdvcnksIFZhbHVlUmFuZ2UpOworICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBj
cmVhdGUoY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYsIGNvbnN0IFJlbmRlclN0eWxlJik7CisgICAg
fkNTU0NhbGNWYWx1ZSgpOworCisgICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSgpIGNv
bnN0OworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0OworICAgIGRvdWJsZSBjb21wdXRl
TGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OworICAgIENT
U1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdDsKKworICAgIFJlZjxDYWxjdWxhdGlvblZh
bHVlPiBjcmVhdGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmKSBjb25zdDsKKyAgICB2b2lkIHNldFBlcm1pdHRlZFZhbHVlUmFuZ2UoVmFsdWVSYW5nZSk7
CisKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hT
ZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdDsKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29t
cHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3Q7CisK
KyAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OworICAgIGJvb2wgZXF1YWxzKGNvbnN0
IENTU0NhbGNWYWx1ZSYpIGNvbnN0OworICAgIAorICAgIHN0YXRpYyBib29sIGlzQ2FsY0Z1bmN0
aW9uKENTU1ZhbHVlSUQpOworCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBDU1NDYWxjVmFsdWUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwg
Ym9vbCBzaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUpOworCisgICAgZG91YmxlIGNsYW1wVG9QZXJt
aXR0ZWRSYW5nZShkb3VibGUpIGNvbnN0OworCisgICAgY29uc3QgUmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gbV9leHByZXNzaW9uOworICAgIGJvb2wgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRp
dmU7Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mLCBjb25zdCBDU1ND
YWxjVmFsdWUmKTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0NTU19WQUxVRShDU1NDYWxjVmFsdWUsIGlzQ2FsY1ZhbHVlKCkpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlckhlbHBl
cnMuaCIKIAotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1ND
YWxjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Ny
b3NzZmFkZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIgpAQCAtNDEs
NiArNDEsNyBAQAogI2luY2x1ZGUgIkNTU1BhaW50SW1hZ2VWYWx1ZS5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlUG9vbC5oIgorI2luY2x1ZGUgIkNh
bGN1bGF0aW9uQ2F0ZWdvcnkuaCIKICNpbmNsdWRlICJDb2xvckNvbnZlcnNpb24uaCIKICNpbmNs
dWRlICJDb2xvckx1bWluYW5jZS5oIgogI2luY2x1ZGUgIlBhaXIuaCIKQEAgLTk0LDcgKzk1LDcg
QEAgc3RhdGljIE9wdGlvbmFsPGRvdWJsZT4gY29uc3VtZU51bWJlck9yUAogICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CiB9CiAKLS8vIEZJWE1FOiBjb25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJz
aW5nIGxvZ2ljIGZyb20gQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAuCisvLyBGSVhNRTogY29uc2lk
ZXIgcHVsbGluZyBpbiB0aGUgcGFyc2luZyBsb2dpYyBmcm9tIENTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlci4KIGNsYXNzIENhbGNQYXJzZXIgewogcHVibGljOgogICAgIGV4cGxpY2l0IENhbGNQ
YXJzZXIoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVz
dGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSB2YWx1ZVJhbmdlID0gVmFsdWVSYW5nZTo6QWxs
LCBDU1NWYWx1ZVBvb2wmIGNzc1ZhbHVlUG9vbCA9IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNwcAko
cmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25W
YWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQpAQCAtMSwyODIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgotCi0jaW5jbHVkZSAiTGVuZ3RoRnVuY3Rp
b25zLmgiCi0jaW5jbHVkZSA8bGltaXRzPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1SZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ2FsY3Vs
YXRpb25WYWx1ZTo6Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IHZh
bHVlLCBWYWx1ZVJhbmdlIHJhbmdlKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENhbGN1
bGF0aW9uVmFsdWUoV1RGTW92ZSh2YWx1ZSksIHJhbmdlKSk7Ci19Ci0KLWZsb2F0IENhbGNFeHBy
ZXNzaW9uTnVtYmVyOjpldmFsdWF0ZShmbG9hdCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV92YWx1
ZTsKLX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6ZHVtcChUZXh0U3RyZWFtJiB0cykg
Y29uc3QKLXsKLSAgICB0cyA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50
ZWdlcnMobV92YWx1ZSk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25OdW1iZXI6Om9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4g
aXM8Q2FsY0V4cHJlc3Npb25OdW1iZXI+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxj
RXhwcmVzc2lvbk51bWJlcj4ob3RoZXIpOwotfQotCi1mbG9hdCBDYWxjdWxhdGlvblZhbHVlOjpl
dmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKLXsKLSAgICBmbG9hdCByZXN1bHQgPSBtX2V4
cHJlc3Npb24tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAvLyBGSVhNRTogVGhpcyB0ZXN0IHdh
cyBvcmlnaW5hbGx5IG5lZWRlZCB3aGVuIHdlIGRpZCBub3QgZGV0ZWN0IGRpdmlzaW9uIGJ5IHpl
cm8gYXQgcGFyc2UgdGltZS4KLSAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyBpcyBub3cg
dW5uZWVkZWQgY29kZSBhbmQgY2FuIGJlIHJlbW92ZWQuCi0gICAgaWYgKHN0ZDo6aXNuYW4ocmVz
dWx0KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05vbk5l
Z2F0aXZlICYmIHJlc3VsdCA8IDAgPyAwIDogcmVzdWx0OwotfQotCi1mbG9hdCBDYWxjRXhwcmVz
c2lvbk5lZ2F0aW9uOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKLXsKLSAgICByZXR1
cm4gLW1fY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lv
bk5lZ2F0aW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uTmVnYXRpb24+KG90aGVyKSAmJiAq
dGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcik7Ci19Ci0KLXZv
aWQgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsK
LSAgICB0cyA8PCAiLSgiOwotICAgIHRzIDw8ICptX2NoaWxkOwotICAgIHRzIDw8ICIpIjsKLX0K
LQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTmVnYXRpb24mIGEsIGNvbnN0
IENhbGNFeHByZXNzaW9uTmVnYXRpb24mIGIpCi17Ci0gICAgcmV0dXJuICphLmNoaWxkKCkgPT0g
KmIuY2hpbGQoKTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmV2YWx1YXRl
KGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAgIHJldHVybiAxLjBmIC8gbV9jaGlsZC0+ZXZh
bHVhdGUobWF4VmFsdWUpOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICIxLjAgLyAiIDw8ICIoIjsKLSAg
ICB0cyA8PCAqbV9jaGlsZDsKLSAgICB0cyA8PCAiKSI7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Np
b25JbnZlcnNpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikg
Y29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG90aGVyKSAm
JiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkludmVyc2lvbj4ob3RoZXIpOwotfQot
Ci1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mIGEsIGNvbnN0
IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBiKQotewotICAgIHJldHVybiAqYS5jaGlsZCgpID09
ICpiLmNoaWxkKCk7Ci19Ci0KLWZsb2F0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpldmFsdWF0
ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fb3BlcmF0b3IpIHsKLSAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7Ci0gICAgICAgIGZsb2F0IHN1bSA9IDA7Ci0gICAg
ICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgc3VtICs9IGNo
aWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBzdW07Ci0gICAgfQotICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDogewotICAgICAgICAvLyBGSVhNRQotICAgICAg
ICBBU1NFUlQobV9jaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0gICAgICAgIGZsb2F0IGxlZnQgPSBt
X2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZsb2F0IHJpZ2h0ID0g
bV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICByZXR1cm4gbGVmdCAt
IHJpZ2h0OwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHsKLSAgICAg
ICAgZmxvYXQgcHJvZHVjdCA9IDE7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxk
cmVuKQotICAgICAgICAgICAgcHJvZHVjdCAqPSBjaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOwot
ICAgICAgICByZXR1cm4gcHJvZHVjdDsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRp
dmlkZTogewotICAgICAgICAvLyBGSVhNRQotICAgICAgICBBU1NFUlQobV9jaGlsZHJlbi5zaXpl
KCkgPT0gMSB8fCBtX2NoaWxkcmVuLnNpemUoKSA9PSAyKTsKLSAgICAgICAgaWYgKG1fY2hpbGRy
ZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBmbG9hdCBsZWZ0ID0gbV9jaGlsZHJlblswXS0+
ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmbG9hdCByaWdodCA9IG1fY2hpbGRyZW5bMV0t
PmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAgcmV0dXJuIGxlZnQgLyByaWdodDsKLSAgICB9
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogewotICAgICAgICBpZiAobV9jaGlsZHJlbi5p
c0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46
OnF1aWV0X05hTigpOwotICAgICAgICBmbG9hdCBtaW5pbXVtID0gbV9jaGlsZHJlblswXS0+ZXZh
bHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikK
LSAgICAgICAgICAgIG1pbmltdW0gPSBzdGQ6Om1pbihtaW5pbXVtLCBjaGlsZC0+ZXZhbHVhdGUo
bWF4VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIG1pbmltdW07Ci0gICAgfQotICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNYXg6IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQotICAg
ICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsK
LSAgICAgICAgZmxvYXQgbWF4aW11bSA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVl
KTsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBt
YXhpbXVtID0gc3RkOjptYXgobWF4aW11bSwgY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKSk7Ci0g
ICAgICAgIHJldHVybiBtYXhpbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xh
bXA6IHsKLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IDMpCi0gICAgICAgICAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotCi0gICAgICAg
IGZsb2F0IG1pbiA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAg
ZmxvYXQgdmFsdWUgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAg
IGZsb2F0IG1heCA9IG1fY2hpbGRyZW5bMl0tPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bWF4KG1pbiwgc3RkOjptaW4odmFsdWUsIG1heCkpOwotICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1p
dHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKLX0KLQotYm9vbCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlv
bjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewot
ICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpICYmICp0aGlzID09
IGRvd25jYXN0PENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihvdGhlcik7Ci19Ci0KLWJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYgYSwgY29uc3QgQ2FsY0V4cHJl
c3Npb25PcGVyYXRpb24mIGIpCi17Ci0gICAgaWYgKGEuZ2V0T3BlcmF0b3IoKSAhPSBiLmdldE9w
ZXJhdG9yKCkgfHwgYS5kZXN0aW5hdGlvbkNhdGVnb3J5KCkgIT0gYi5kZXN0aW5hdGlvbkNhdGVn
b3J5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAvLyBGSVhNRTogV291bGQgYmUgbmlj
ZSB0byBoYXZlIGEgaGVscGVyIGZ1bmN0aW9uIGZvciBkb2luZyBhIGRlZXAgY29tcGFyZSBvbiBh
IHZlY3RvciBvZiBwb2ludGVycy4KLSAgICBpZiAoYS5jaGlsZHJlbigpLnNpemUoKSAhPSBiLmNo
aWxkcmVuKCkuc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGEuY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewotICAgICAgICBpZiAoISgq
YS5jaGlsZHJlbigpW2ldID09ICpiLmNoaWxkcmVuKClbaV0pKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDYWxjRXhwcmVzc2lv
bk9wZXJhdGlvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICBpZiAobV9vcGVy
YXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6
TWF4KSB7Ci0gICAgICAgIHRzIDw8IG1fb3BlcmF0b3IgPDwgIigiOwotICAgICAgICBzaXplX3Qg
Y2hpbGRyZW5Db3VudCA9IG1fY2hpbGRyZW4uc2l6ZSgpOwotICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNoaWxkcmVuQ291bnQ7IGkrKykgewotICAgICAgICAgICAgdHMgPDwgbV9jaGls
ZHJlbltpXS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChpIDwgY2hpbGRyZW5Db3VudCAtIDEpCi0g
ICAgICAgICAgICAgICAgdHMgPDwgIiwgIjsKLSAgICAgICAgfQotICAgICAgICB0cyA8PCAiKSI7
Ci0gICAgfSBlbHNlCi0gICAgICAgIHRzIDw8IG1fY2hpbGRyZW5bMF0uZ2V0KCkgPDwgIiAiIDw8
IG1fb3BlcmF0b3IgPDwgIiAiIDw8IG1fY2hpbGRyZW5bMV0uZ2V0KCk7Ci19Ci0KLWZsb2F0IENh
bGNFeHByZXNzaW9uTGVuZ3RoOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZmxvYXRWYWx1ZUZvckxlbmd0aChtX2xlbmd0aCwgbWF4VmFsdWUpOwotfQotCi1i
b29sIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uTGVuZ3Ro
PihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG90aGVy
KTsKLX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6ZHVtcChUZXh0U3RyZWFtJiB0cykg
Y29uc3QKLXsKLSAgICB0cyA8PCBtX2xlbmd0aDsKLX0KLQotQ2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aDo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aChMZW5ndGggZnJvbSwgTGVuZ3RoIHRvLCBm
bG9hdCBwcm9ncmVzcykKLSAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpCbGVuZExlbmd0aCkKLSAgICAsIG1fZnJvbShmcm9tKQotICAgICwgbV90byh0bykK
LSAgICAsIG1fcHJvZ3Jlc3MocHJvZ3Jlc3MpCi17Ci0gICAgLy8gRmxhdHRlbiBuZXN0aW5nIG9m
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGggYXMgYSBzcGVjdWxhdGl2ZSBmaXggZm9yIHJkYXI6
Ly9wcm9ibGVtLzMwNTMzMDA1LgotICAgIC8vIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGggaXMg
b25seSB1c2VkIGFzIGEgcmVzdWx0IG9mIGFuaW1hdGlvbiBhbmQgdGhleSBkb24ndCBuZXN0IGlu
IG5vcm1hbCBjYXNlcy4KLSAgICBpZiAobV9mcm9tLmlzQ2FsY3VsYXRlZCgpICYmIG1fZnJvbS5j
YWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lvbk5v
ZGVUeXBlOjpCbGVuZExlbmd0aCkKLSAgICAgICAgbV9mcm9tID0gZG93bmNhc3Q8Q2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aD4obV9mcm9tLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkp
LmZyb20oKTsKLSAgICBpZiAobV90by5pc0NhbGN1bGF0ZWQoKSAmJiBtX3RvLmNhbGN1bGF0aW9u
VmFsdWUoKS5leHByZXNzaW9uKCkudHlwZSgpID09IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJs
ZW5kTGVuZ3RoKQotICAgICAgICBtX3RvID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExl
bmd0aD4obV90by5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpKS50bygpOwotfQotCi1m
bG9hdCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gKDEuMGYgLSBtX3Byb2dyZXNzKSAqIGZsb2F0VmFsdWVGb3JM
ZW5ndGgobV9mcm9tLCBtYXhWYWx1ZSkgKyBtX3Byb2dyZXNzICogZmxvYXRWYWx1ZUZvckxlbmd0
aChtX3RvLCBtYXhWYWx1ZSk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6
b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewotICAg
IHJldHVybiBpczxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihvdGhlcikgJiYgKnRoaXMgPT0g
ZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIpOwotfQotCi12b2lkIENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0g
ICAgdHMgPDwgImJsZW5kKCIgPDwgbV9mcm9tIDw8ICIsICIgPDwgbV90byA8PCAiLCAiIDw8IG1f
cHJvZ3Jlc3MgPDwgIikiOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0m
IHRzLCBDYWxjT3BlcmF0b3Igb3ApCi17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpBZGQ6IHRzIDw8ICIrIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6
OlN1YnRyYWN0OiB0cyA8PCAiLSI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0
aXBseTogdHMgPDwgIioiOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB0
cyA8PCAiLyI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHRzIDw8ICJtaW4i
OyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiB0cyA8PCAibWF4IjsgYnJlYWs7
Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB0cyA8PCAiY2xhbXAiOyBicmVhazsKLSAg
ICB9Ci0gICAgcmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSkKLXsKLSAgICB0cyA8PCAiY2Fs
YygiOwotICAgIHRzIDw8IHZhbHVlLmV4cHJlc3Npb24oKTsKLSAgICB0cyA8PCAiKSI7Ci0gICAg
cmV0dXJuIHRzOwotfQotCi1UZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBj
b25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIGV4cHJlc3Npb25Ob2RlKQotewotICAgIGV4cHJlc3Np
b25Ob2RlLmR1bXAodHMpOwotICAgIHJldHVybiB0czsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25WYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0NhbGN1bGF0aW9uVmFsdWUuaAko
cmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vQ2FsY3VsYXRpb25W
YWx1ZS5oCShub25leGlzdGVudCkKQEAgLTEsMjg2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgot
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
LSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkxlbmd0aC5oIgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+
Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0K
LW5hbWVzcGFjZSBXVEYgewotY2xhc3MgVGV4dFN0cmVhbTsKLX0KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotCi0vLyBGSVhNRTogRmluZCBhIHdheSB0byB1bmlmeSB0aGlzIHdpdGggQ1NTUHJpbWl0
aXZlVmFsdWU6OlVuaXRDYXRlZ29yeT8KLWVudW0gY2xhc3MgQ2FsY3VsYXRpb25DYXRlZ29yeSA6
IHVpbnQ4X3QgewotICAgIE51bWJlciwKLSAgICBMZW5ndGgsCi0gICAgUGVyY2VudCwKLSAgICBQ
ZXJjZW50TnVtYmVyLAotICAgIFBlcmNlbnRMZW5ndGgsCi0gICAgQW5nbGUsCi0gICAgVGltZSwK
LSAgICBGcmVxdWVuY3ksCi0gICAgT3RoZXIKLX07Ci0KLS8vIERvbid0IGNoYW5nZSB0aGVzZSB2
YWx1ZXM7IHBhcnNpbmcgdXNlcyB0aGVtLgotZW51bSBjbGFzcyBDYWxjT3BlcmF0b3IgOiB1aW50
OF90IHsKLSAgICBBZGQgPSAnKycsCi0gICAgU3VidHJhY3QgPSAnLScsCi0gICAgTXVsdGlwbHkg
PSAnKicsCi0gICAgRGl2aWRlID0gJy8nLAotICAgIE1pbiA9IDAsCi0gICAgTWF4LAotICAgIENs
YW1wLAotfTsKLQotZW51bSBjbGFzcyBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIDogdWludDhfdCB7
Ci0gICAgVW5kZWZpbmVkLAotICAgIE51bWJlciwKLSAgICBMZW5ndGgsCi0gICAgT3BlcmF0aW9u
LAotICAgIE5lZ2F0aW9uLAotICAgIEludmVyc2lvbiwKLSAgICBCbGVuZExlbmd0aCwKLX07Ci0K
LWNsYXNzIENhbGNFeHByZXNzaW9uTm9kZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9u
Tm9kZVR5cGUgPSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpVbmRlZmluZWQpOwotICAgIHZpcnR1
YWwgfkNhbGNFeHByZXNzaW9uTm9kZSgpID0gZGVmYXVsdDsKLQotICAgIENhbGNFeHByZXNzaW9u
Tm9kZVR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQotCi0gICAgdmlydHVhbCBm
bG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCA9IDA7Ci0KLXByaXZhdGU6
Ci0gICAgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSBtX3R5cGU7Ci19OwotCi1jbGFzcyBDYWxjRXhw
cmVzc2lvbk51bWJlciBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGlj
OgotICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTnVtYmVyKGZsb2F0KTsKLQotICAgIGZsb2F0
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0
IGV2YWx1YXRlKGZsb2F0KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1wKFdU
Rjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgZmxvYXQgbV92YWx1ZTsKLX07
Ci0KLWNsYXNzIENhbGNFeHByZXNzaW9uTGVuZ3RoIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNz
aW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25MZW5ndGgoTGVu
Z3RoKTsKLQotICAgIGNvbnN0IExlbmd0aCYgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KLQotcHJpdmF0ZToKLSAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9k
ZSYpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKLQotICAgIExlbmd0aCBtX2xlbmd0aDsKLX07Ci0KLWNsYXNzIENhbGNFeHBy
ZXNzaW9uTmVnYXRpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1Ymxp
YzoKLSAgICBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVz
c2lvbk5vZGU+JiYgbm9kZSkKLSAgICAgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZTo6TmVnYXRpb24pCi0gICAgICAgICwgbV9jaGlsZChXVEZNb3ZlKG5vZGUp
KQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2hpbGQpOwotICAgIH0KLQotICAgIGZsb2F0IGV2
YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7Ci0gICAgdm9pZCBkdW1wKFdU
Rjo6VGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotICAgIAotICAgIGNvbnN0IENhbGNFeHByZXNz
aW9uTm9kZSogY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0KLXByaXZh
dGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGlsZDsKLX07
Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJiwgY29uc3Qg
Q2FsY0V4cHJlc3Npb25OZWdhdGlvbiYpOwotCi1jbGFzcyBDYWxjRXhwcmVzc2lvbkludmVyc2lv
biBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAgIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
bm9kZSkKLSAgICAgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6SW52ZXJzaW9uKQotICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShub2RlKSkKLSAgICB7Ci0g
ICAgICAgIEFTU0VSVChtX2NoaWxkKTsKLSAgICB9Ci0KLSAgICBmbG9hdCBldmFsdWF0ZShmbG9h
dCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7Ci0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNF
eHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJl
YW0mKSBjb25zdCBmaW5hbDsKLQotICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSogY2hpbGQo
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGlsZDsKLX07Ci0KLWJvb2wgb3BlcmF0
b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYsIGNvbnN0IENhbGNFeHByZXNzaW9u
SW52ZXJzaW9uJik7Ci0KLWNsYXNzIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uIGZpbmFsIDogcHVi
bGljIENhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsY0V4cHJlc3Npb25PcGVy
YXRpb24oVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIGNoaWxk
cmVuLCBDYWxjT3BlcmF0b3IsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29y
eSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLQotICAgIENhbGNPcGVyYXRvciBnZXRP
cGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0b3I7IH0KLSAgICBDYWxjdWxhdGlvbkNh
dGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSBjb25zdCB7IHJldHVybiBtX2Rlc3RpbmF0aW9u
Q2F0ZWdvcnk7IH0KLQotICAgIGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPj4mIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQotCi1w
cml2YXRlOgotICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBtX2No
aWxkcmVuOwotICAgIENhbGNPcGVyYXRvciBtX29wZXJhdG9yOwotICAgIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5IHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIg
fTsKLX07Ci0KLWNsYXNzIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGggZmluYWwgOiBwdWJsaWMg
Q2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBDYWxjRXhwcmVzc2lvbkJsZW5kTGVu
Z3RoKExlbmd0aCBmcm9tLCBMZW5ndGggdG8sIGZsb2F0IHByb2dyZXNzKTsKLQotICAgIGNvbnN0
IExlbmd0aCYgZnJvbSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbTsgfQotICAgIGNvbnN0IExlbmd0
aCYgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9Ci0gICAgZmxvYXQgcHJvZ3Jlc3MoKSBjb25z
dCB7IHJldHVybiBtX3Byb2dyZXNzOyB9Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGR1bXAoV1RG
OjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBMZW5ndGggbV9mcm9tOwotICAg
IExlbmd0aCBtX3RvOwotICAgIGZsb2F0IG1fcHJvZ3Jlc3M7Ci19OwotCi1jbGFzcyBDYWxjdWxh
dGlvblZhbHVlIDogcHVibGljIFJlZkNvdW50ZWQ8Q2FsY3VsYXRpb25WYWx1ZT4gewotcHVibGlj
OgotICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gY3JlYXRl
KHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+LCBWYWx1ZVJhbmdlKTsKLSAgICBm
bG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Q7Ci0KLSAgICBib29sIHNob3VsZENs
YW1wVG9Ob25OZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0
aXZlOyB9Ci0gICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHByZXNzaW9uKCkgY29uc3Qg
eyByZXR1cm4gKm1fZXhwcmVzc2lvbjsgfQotCi1wcml2YXRlOgotICAgIENhbGN1bGF0aW9uVmFs
dWUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4sIFZhbHVlUmFuZ2UpOwotCi0g
ICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9leHByZXNzaW9uOwotICAg
IGJvb2wgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmU7Ci19OwotCi1pbmxpbmUgQ2FsY0V4cHJl
c3Npb25Ob2RlOjpDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSB0eXBl
KQotICAgIDogbV90eXBlKHR5cGUpCi17Ci19Ci0KLWlubGluZSBDYWxjdWxhdGlvblZhbHVlOjpD
YWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGV4cHJl
c3Npb24sIFZhbHVlUmFuZ2UgcmFuZ2UpCi0gICAgOiBtX2V4cHJlc3Npb24oV1RGTW92ZShleHBy
ZXNzaW9uKSkKLSAgICAsIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKHJhbmdlID09IFZhbHVl
UmFuZ2U6Ok5vbk5lZ2F0aXZlKQotewotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhbGN1bGF0aW9uVmFsdWUmIGEsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIGIpCi17Ci0gICAg
cmV0dXJuIGEuZXhwcmVzc2lvbigpID09IGIuZXhwcmVzc2lvbigpOwotfQotCi1pbmxpbmUgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXI6OkNhbGNFeHByZXNzaW9uTnVtYmVyKGZsb2F0IHZhbHVlKQotICAg
IDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcikKLSAg
ICAsIG1fdmFsdWUodmFsdWUpCi17Ci19Ci0KLWlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg
Q2FsY0V4cHJlc3Npb25OdW1iZXImIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTnVtYmVyJiBiKQot
ewotICAgIHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOwotfQotCi1pbmxpbmUgQ2FsY0V4
cHJlc3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9uTGVuZ3RoKExlbmd0aCBsZW5ndGgpCi0gICAg
OiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoKQotICAg
ICwgbV9sZW5ndGgobGVuZ3RoKQotewotfQotCi1pbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbkxlbmd0aCYgYikK
LXsKLSAgICByZXR1cm4gYS5sZW5ndGgoKSA9PSBiLmxlbmd0aCgpOwotfQotCi1pbmxpbmUgQ2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb246OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uKFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mJiBjaGlsZHJlbiwgQ2FsY09wZXJhdG9y
IG9wLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCi0gICAgOiBDYWxj
RXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uKQotICAgICwg
bV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKLSAgICAsIG1fb3BlcmF0b3Iob3ApCi0gICAg
LCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkoZGVzdGluYXRpb25DYXRlZ29yeSkKLXsKLX0KLQotYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uJiwgY29uc3QgQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24mKTsKLQotaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
JiBiKQotewotICAgIHJldHVybiBhLnByb2dyZXNzKCkgPT0gYi5wcm9ncmVzcygpICYmIGEuZnJv
bSgpID09IGIuZnJvbSgpICYmIGEudG8oKSA9PSBiLnRvKCk7Ci19Ci0KLVdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJik7
Ci1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0U3RyZWFtJiwgY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJik7Ci1XVEY6OlRleHRTdHJlYW0mIG9wZXJhdG9yPDwoV1RGOjpUZXh0
U3RyZWFtJiwgQ2FsY09wZXJhdG9yKTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQotCi0jZGVm
aW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShUb1ZhbHVlVHlw
ZU5hbWUsIHByZWRpY2F0ZSkgXAotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3Jl
OjpUb1ZhbHVlVHlwZU5hbWUpIFwKLSAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKSB7IHJldHVybiBub2RlLnByZWRpY2F0ZTsgfSBc
Ci1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCi0KLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbk51bWJlciwgdHlwZSgpID09IFdlYkNv
cmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbkxlbmd0aCwgdHlwZSgpID09IFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxlbmd0aCkKLVNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiwgdHlwZSgp
ID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbikKLVNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbk5lZ2F0aW9u
LCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb24pCi1T
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25J
bnZlcnNpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZl
cnNpb24pCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aCwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9k
ZVR5cGU6OkJsZW5kTGVuZ3RoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3Ro
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCShy
ZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yLDcgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMg
S25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlz
dG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVy
ICggbXVlbGxlckBrZGUub3JnICkKLSAqIENvcHlyaWdodCAoQykgMjAwMy0yMDE5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMy0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBbmRyZXcg
V2VsbGluZ3RvbiAocHJvdG9uQHdpcmV0YXBwZWQubmV0KQogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTI2LDYg
KzI2LDkgQEAKICNpbmNsdWRlICJMZW5ndGguaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxp
dGllcy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCIKKyNpbmNsdWRl
ICJDYWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uT3BlcmF0
aW9uLmgiCiAjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJ
SUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uQmxlbmRMZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Np
b25CbGVuZExlbmd0aC5oIgorCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1
ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoKExlbmd0aCBmcm9tLCBMZW5ndGggdG8sIGZsb2F0IHByb2dy
ZXNzKQorICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJs
ZW5kTGVuZ3RoKQorICAgICwgbV9mcm9tKGZyb20pCisgICAgLCBtX3RvKHRvKQorICAgICwgbV9w
cm9ncmVzcyhwcm9ncmVzcykKK3sKKyAgICAvLyBGbGF0dGVuIG5lc3Rpbmcgb2YgQ2FsY0V4cHJl
c3Npb25CbGVuZExlbmd0aCBhcyBhIHNwZWN1bGF0aXZlIGZpeCBmb3IgcmRhcjovL3Byb2JsZW0v
MzA1MzMwMDUuCisgICAgLy8gQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCBpcyBvbmx5IHVzZWQg
YXMgYSByZXN1bHQgb2YgYW5pbWF0aW9uIGFuZCB0aGV5IGRvbid0IG5lc3QgaW4gbm9ybWFsIGNh
c2VzLgorICAgIGlmIChtX2Zyb20uaXNDYWxjdWxhdGVkKCkgJiYgbV9mcm9tLmNhbGN1bGF0aW9u
VmFsdWUoKS5leHByZXNzaW9uKCkudHlwZSgpID09IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJs
ZW5kTGVuZ3RoKQorICAgICAgICBtX2Zyb20gPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5k
TGVuZ3RoPihtX2Zyb20uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSkuZnJvbSgpOwor
ICAgIGlmIChtX3RvLmlzQ2FsY3VsYXRlZCgpICYmIG1fdG8uY2FsY3VsYXRpb25WYWx1ZSgpLmV4
cHJlc3Npb24oKS50eXBlKCkgPT0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGgp
CisgICAgICAgIG1fdG8gPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihtX3Rv
LmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkpLnRvKCk7Cit9CisKK2Zsb2F0IENhbGNF
eHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAorewor
ICAgIHJldHVybiAoMS4wZiAtIG1fcHJvZ3Jlc3MpICogZmxvYXRWYWx1ZUZvckxlbmd0aChtX2Zy
b20sIG1heFZhbHVlKSArIG1fcHJvZ3Jlc3MgKiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fdG8sIG1h
eFZhbHVlKTsKK30KKworYm9vbCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpvcGVyYXRvcj09
KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlz
PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxD
YWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihvdGhlcik7Cit9CisKK3ZvaWQgQ2FsY0V4cHJlc3Np
b25CbGVuZExlbmd0aDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAi
YmxlbmQoIiA8PCBtX2Zyb20gPDwgIiwgIiA8PCBtX3RvIDw8ICIsICIgPDwgbV9wcm9ncmVzcyA8
PCAiKSI7Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgIkxlbmd0aC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgg
ZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBDYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoKExlbmd0aCBmcm9tLCBMZW5ndGggdG8sIGZsb2F0IHByb2dyZXNz
KTsKKworICAgIGNvbnN0IExlbmd0aCYgZnJvbSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJvbTsgfQor
ICAgIGNvbnN0IExlbmd0aCYgdG8oKSBjb25zdCB7IHJldHVybiBtX3RvOyB9CisgICAgZmxvYXQg
cHJvZ3Jlc3MoKSBjb25zdCB7IHJldHVybiBtX3Byb2dyZXNzOyB9CisKK3ByaXZhdGU6CisgICAg
ZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgTGVuZ3RoIG1fZnJvbTsKKyAg
ICBMZW5ndGggbV90bzsKKyAgICBmbG9hdCBtX3Byb2dyZXNzOworfTsKKworaW5saW5lIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoJiBhLCBjb25zdCBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoJiBiKQoreworICAgIHJldHVybiBhLnByb2dyZXNzKCkgPT0g
Yi5wcm9ncmVzcygpICYmIGEuZnJvbSgpID09IGIuZnJvbSgpICYmIGEudG8oKSA9PSBiLnRvKCk7
Cit9CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGgsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCIKKwor
I2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitmbG9hdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUp
IGNvbnN0Cit7CisgICAgcmV0dXJuIDEuMGYgLyBtX2NoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSk7
Cit9CisKK3ZvaWQgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMp
IGNvbnN0Cit7CisgICAgdHMgPDwgIjEuMCAvICIgPDwgIigiIDw8ICptX2NoaWxkIDw8ICIpIjsK
K30KKworYm9vbCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6b3BlcmF0b3I9PShjb25zdCBDYWxj
RXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBpczxDYWxjRXhwcmVz
c2lvbkludmVyc2lvbj4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9u
SW52ZXJzaW9uPihvdGhlcik7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVz
c2lvbkludmVyc2lvbiYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mIGIpCit7Cisg
ICAgcmV0dXJuICphLmNoaWxkKCkgPT0gKmIuY2hpbGQoKTsKK30KKworfQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNp
b24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uSW52ZXJzaW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgi
CisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNF
eHByZXNzaW9uSW52ZXJzaW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7Citw
dWJsaWM6CisgICAgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24oc3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4mJiBub2RlKQorICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZlcnNpb24pCisgICAgICAgICwgbV9jaGlsZChXVEZNb3Zl
KG5vZGUpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY2hpbGQpOworICAgIH0KKworICAgIGNv
bnN0IENhbGNFeHByZXNzaW9uTm9kZSogY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdl
dCgpOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNv
bnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUm
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGlsZDsKK307CisK
K2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbiYsIGNvbnN0IENh
bGNFeHByZXNzaW9uSW52ZXJzaW9uJik7CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19D
QUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uSW52ZXJzaW9uLCB0eXBlKCkgPT0gV2Vi
Q29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkxlbmd0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkxlbmd0aC5jcHAJ
KG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVz
c2lvbkxlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkxlbmd0aC5o
IgorCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9u
TGVuZ3RoOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gZmxv
YXRWYWx1ZUZvckxlbmd0aChtX2xlbmd0aCwgbWF4VmFsdWUpOworfQorCitib29sIENhbGNFeHBy
ZXNzaW9uTGVuZ3RoOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uTGVuZ3RoPihvdGhlcikgJiYg
KnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG90aGVyKTsKK30KKwordm9p
ZCBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAg
ICB0cyA8PCBtX2xlbmd0aDsKK30KKworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkxlbmd0aC5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlICJMZW5ndGguaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lvbkxlbmd0aCBmaW5hbCA6
IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IENhbGNF
eHByZXNzaW9uTGVuZ3RoKExlbmd0aCk7CisKKyAgICBjb25zdCBMZW5ndGgmIGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQgZXZhbHVhdGUo
ZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBD
YWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVh
bSYpIGNvbnN0IGZpbmFsOworCisgICAgTGVuZ3RoIG1fbGVuZ3RoOworfTsKKworaW5saW5lIENh
bGNFeHByZXNzaW9uTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkxlbmd0aChMZW5ndGggbGVuZ3RoKQor
ICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Okxlbmd0aCkK
KyAgICAsIG1fbGVuZ3RoKGxlbmd0aCkKK3sKK30KKworaW5saW5lIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBDYWxjRXhwcmVzc2lvbkxlbmd0aCYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgm
IGIpCit7CisgICAgcmV0dXJuIGEubGVuZ3RoKCkgPT0gYi5sZW5ndGgoKTsKK30KKworfQorCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25M
ZW5ndGgsIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5ndGgp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25OZWdhdGlvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNhbGNFeHByZXNzaW9uTmVnYXRpb24uaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbk5lZ2F0
aW9uOjpldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gLW1fY2hp
bGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKK30KKworYm9vbCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9u
OjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uTmVnYXRpb24+KG90aGVyKSAmJiAqdGhpcyA9PSBk
b3duY2FzdDxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihvdGhlcik7Cit9CisKK3ZvaWQgQ2FsY0V4
cHJlc3Npb25OZWdhdGlvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8
PCAiLSgiIDw8ICptX2NoaWxkIDw8ICIpIjsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENh
bGNFeHByZXNzaW9uTmVnYXRpb24mIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uTmVnYXRpb24mIGIp
Cit7CisgICAgcmV0dXJuICphLmNoaWxkKCkgPT0gKmIuY2hpbGQoKTsKK30KKworfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5l
Z2F0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9D
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2Rl
LmgiCisjaW5jbHVkZSA8bWVtb3J5PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENh
bGNFeHByZXNzaW9uTmVnYXRpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsK
K3B1YmxpYzoKKyAgICBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uKHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+JiYgbm9kZSkKKyAgICAgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVnYXRpb24pCisgICAgICAgICwgbV9jaGlsZChXVEZNb3Zl
KG5vZGUpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fY2hpbGQpOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUqIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZC5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVl
KSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25O
b2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5h
bDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Cit9
OworCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYsIGNvbnN0
IENhbGNFeHByZXNzaW9uTmVnYXRpb24mKTsKKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiwgdHlwZSgpID09IFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5vZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
Tm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitU
ZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDYWxjRXhwcmVzc2lv
bk5vZGUmIGV4cHJlc3Npb25Ob2RlKQoreworICAgIGV4cHJlc3Npb25Ob2RlLmR1bXAodHMpOwor
ICAgIHJldHVybiB0czsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fs
Yy9DYWxjRXhwcmVzc2lvbk5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitlbnVtIGNsYXNzIENhbGNF
eHByZXNzaW9uTm9kZVR5cGUgOiB1aW50OF90IHsKKyAgICBVbmRlZmluZWQsCisgICAgTnVtYmVy
LAorICAgIExlbmd0aCwKKyAgICBPcGVyYXRpb24sCisgICAgTmVnYXRpb24sCisgICAgSW52ZXJz
aW9uLAorICAgIEJsZW5kTGVuZ3RoLAorfTsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBDYWxj
RXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA9IENhbGNFeHByZXNzaW9uTm9k
ZVR5cGU6OlVuZGVmaW5lZCk7CisgICAgdmlydHVhbCB+Q2FsY0V4cHJlc3Npb25Ob2RlKCkgPSBk
ZWZhdWx0OworCisgICAgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1
cm4gbV90eXBlOyB9CisKKyAgICB2aXJ0dWFsIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVl
KSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJl
c3Npb25Ob2RlJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkdW1wKFRleHRTdHJlYW0m
KSBjb25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSBtX3R5
cGU7Cit9OworCitpbmxpbmUgQ2FsY0V4cHJlc3Npb25Ob2RlOjpDYWxjRXhwcmVzc2lvbk5vZGUo
Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cit9CisK
K1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYsIGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYpOworCit9CisKKyNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVT
U0lPTl9OT0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0dXJu
IG5vZGUucHJlZGljYXRlOyB9IFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25O
dW1iZXIuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMv
Q2FsY0V4cHJlc3Npb25OdW1iZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Np
b25OdW1iZXIuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitmbG9hdCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6ZXZhbHVhdGUoZmxv
YXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fdmFsdWU7Cit9CisKK3ZvaWQgQ2FsY0V4cHJlc3Np
b25OdW1iZXI6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgVGV4dFN0
cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKG1fdmFsdWUpOworfQorCitib29s
IENhbGNFeHByZXNzaW9uTnVtYmVyOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9k
ZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uTnVtYmVyPihv
dGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25OdW1iZXI+KG90aGVyKTsK
K30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bk51bWJlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2Fs
Y0V4cHJlc3Npb25OdW1iZXIuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisg
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsY0V4cHJl
c3Npb25Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Np
b25OdW1iZXIgZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCk7CisKKyAgICBmbG9hdCB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFs
dWF0ZShmbG9hdCkgY29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNF
eHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikg
Y29uc3QgZmluYWw7CisKKyAgICBmbG9hdCBtX3ZhbHVlOworfTsKKworaW5saW5lIENhbGNFeHBy
ZXNzaW9uTnVtYmVyOjpDYWxjRXhwcmVzc2lvbk51bWJlcihmbG9hdCB2YWx1ZSkKKyAgICA6IENh
bGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOdW1iZXIpCisgICAgLCBt
X3ZhbHVlKHZhbHVlKQoreworfQorCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNF
eHByZXNzaW9uTnVtYmVyJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYgYikKK3sKKyAg
ICByZXR1cm4gYS52YWx1ZSgpID09IGIudmFsdWUoKTsKK30KKworfQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25OdW1iZXIsIHR5cGUo
KSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOdW1iZXIpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3Bl
cmF0aW9uLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxj
L0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhw
cmVzc2lvbk9wZXJhdGlvbi5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpl
dmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fb3BlcmF0b3Ip
IHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB7CisgICAgICAgIGZsb2F0IHN1bSA9IDA7
CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICAgICAgc3Vt
ICs9IGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBzdW07CisgICAg
fQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDogeworICAgICAgICAvLyBGSVhNRQor
ICAgICAgICBBU1NFUlQobV9jaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGZsb2F0IGxl
ZnQgPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZsb2F0IHJp
Z2h0ID0gbV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICByZXR1cm4g
bGVmdCAtIHJpZ2h0OworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHsK
KyAgICAgICAgZmxvYXQgcHJvZHVjdCA9IDE7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBt
X2NoaWxkcmVuKQorICAgICAgICAgICAgcHJvZHVjdCAqPSBjaGlsZC0+ZXZhbHVhdGUobWF4VmFs
dWUpOworICAgICAgICByZXR1cm4gcHJvZHVjdDsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0
b3I6OkRpdmlkZTogeworICAgICAgICAvLyBGSVhNRQorICAgICAgICBBU1NFUlQobV9jaGlsZHJl
bi5zaXplKCkgPT0gMSB8fCBtX2NoaWxkcmVuLnNpemUoKSA9PSAyKTsKKyAgICAgICAgaWYgKG1f
Y2hpbGRyZW4uc2l6ZSgpID09IDEpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBmbG9hdCBsZWZ0ID0gbV9jaGlsZHJl
blswXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmbG9hdCByaWdodCA9IG1fY2hpbGRy
ZW5bMV0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGxlZnQgLyByaWdodDsK
KyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1pbjogeworICAgICAgICBpZiAobV9jaGls
ZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxm
bG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBmbG9hdCBtaW5pbXVtID0gbV9jaGlsZHJlblsw
XS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGls
ZHJlbikKKyAgICAgICAgICAgIG1pbmltdW0gPSBzdGQ6Om1pbihtaW5pbXVtLCBjaGlsZC0+ZXZh
bHVhdGUobWF4VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG1pbmltdW07CisgICAgfQorICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpNYXg6IHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+OjpxdWlldF9O
YU4oKTsKKyAgICAgICAgZmxvYXQgbWF4aW11bSA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1h
eFZhbHVlKTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAg
ICAgICBtYXhpbXVtID0gc3RkOjptYXgobWF4aW11bSwgY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVl
KSk7CisgICAgICAgIHJldHVybiBtYXhpbXVtOworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRv
cjo6Q2xhbXA6IHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IDMpCisgICAgICAg
ICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworCisg
ICAgICAgIGZsb2F0IG1pbiA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAg
ICAgICAgZmxvYXQgdmFsdWUgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Cisg
ICAgICAgIGZsb2F0IG1heCA9IG1fY2hpbGRyZW5bMl0tPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN0ZDo6bWF4KG1pbiwgc3RkOjptaW4odmFsdWUsIG1heCkpOworICAgIH0K
KyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIHN0ZDo6bnVtZXJp
Y19saW1pdHM8ZmxvYXQ+OjpxdWlldF9OYU4oKTsKK30KKworYm9vbCBDYWxjRXhwcmVzc2lvbk9w
ZXJhdGlvbjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25z
dAoreworICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4ob3RoZXIpICYmICp0
aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uT3BlcmF0aW9uPihvdGhlcik7Cit9CisKK2Jv
b2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYgYSwgY29uc3QgQ2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24mIGIpCit7CisgICAgaWYgKGEuZ2V0T3BlcmF0b3IoKSAhPSBi
LmdldE9wZXJhdG9yKCkgfHwgYS5kZXN0aW5hdGlvbkNhdGVnb3J5KCkgIT0gYi5kZXN0aW5hdGlv
bkNhdGVnb3J5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoYS5jaGlsZHJlbigp
LnNpemUoKSAhPSBiLmNoaWxkcmVuKCkuc2l6ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGEuY2hpbGRyZW4oKS5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAoISgqYS5jaGlsZHJlbigpW2ldID09ICpiLmNoaWxkcmVuKClbaV0pKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9p
ZCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sK
KyAgICBpZiAobV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBtX29wZXJhdG9yID09
IENhbGNPcGVyYXRvcjo6TWF4KSB7CisgICAgICAgIHRzIDw8IG1fb3BlcmF0b3IgPDwgIigiOwor
ICAgICAgICBzaXplX3QgY2hpbGRyZW5Db3VudCA9IG1fY2hpbGRyZW4uc2l6ZSgpOworICAgICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNoaWxkcmVuQ291bnQ7IGkrKykgeworICAgICAgICAg
ICAgdHMgPDwgbV9jaGlsZHJlbltpXS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChpIDwgY2hpbGRy
ZW5Db3VudCAtIDEpCisgICAgICAgICAgICAgICAgdHMgPDwgIiwgIjsKKyAgICAgICAgfQorICAg
ICAgICB0cyA8PCAiKSI7CisgICAgfSBlbHNlCisgICAgICAgIHRzIDw8IG1fY2hpbGRyZW5bMF0u
Z2V0KCkgPDwgIiAiIDw8IG1fb3BlcmF0b3IgPDwgIiAiIDw8IG1fY2hpbGRyZW5bMV0uZ2V0KCk7
Cit9CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Np
b25PcGVyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxj
L0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkNhbGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgIkNhbGNPcGVyYXRvci5oIgorI2luY2x1
ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdvcnkuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNFeHByZXNz
aW9uT3BlcmF0aW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJsaWM6
CisgICAgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24oVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxj
RXhwcmVzc2lvbk5vZGU+PiYmIGNoaWxkcmVuLCBDYWxjT3BlcmF0b3IsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsK
KworICAgIENhbGNPcGVyYXRvciBnZXRPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0
b3I7IH0KKyAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSBjb25z
dCB7IHJldHVybiBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnk7IH0KKworICAgIGNvbnN0IFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4mIGNoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbjsgfQorCitwcml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0
IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4
cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBj
b25zdCBmaW5hbDsKKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPj4gbV9jaGlsZHJlbjsKKyAgICBDYWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKKyAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5IG1fZGVzdGluYXRpb25DYXRlZ29yeSB7IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyIH07Cit9OworCisKK2lubGluZSBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6Q2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb24oVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lv
bk5vZGU+PiYmIGNoaWxkcmVuLCBDYWxjT3BlcmF0b3Igb3AsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSkKKyAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVz
c2lvbk5vZGVUeXBlOjpPcGVyYXRpb24pCisgICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRy
ZW4pKQorICAgICwgbV9vcGVyYXRvcihvcCkKKyAgICAsIG1fZGVzdGluYXRpb25DYXRlZ29yeShk
ZXN0aW5hdGlvbkNhdGVnb3J5KQoreworfQorCitib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYpOworCit9
CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVz
c2lvbk9wZXJhdGlvbiwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6
Ok9wZXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09wZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNP
cGVyYXRvci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fs
Yy9DYWxjT3BlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY09wZXJhdG9yLmgiCisK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywgQ2FsY09wZXJhdG9yIG9w
KQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOiB0cyA8
PCAiKyI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDogdHMgPDwgIi0i
OyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6IHRzIDw8ICIqIjsgYnJl
YWs7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogdHMgPDwgIi8iOyBicmVhazsKKyAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB0cyA8PCAibWluIjsgYnJlYWs7CisgICAgY2FzZSBD
YWxjT3BlcmF0b3I6Ok1heDogdHMgPDwgIm1heCI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpDbGFtcDogdHMgPDwgImNsYW1wIjsgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0czsK
K30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRv
ci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09w
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBEb24ndCBjaGFuZ2UgdGhlc2UgdmFsdWVzOyBwYXJzaW5nIHVzZXMgdGhlbS4K
K2VudW0gY2xhc3MgQ2FsY09wZXJhdG9yIDogdWludDhfdCB7CisgICAgQWRkID0gJysnLAorICAg
IFN1YnRyYWN0ID0gJy0nLAorICAgIE11bHRpcGx5ID0gJyonLAorICAgIERpdmlkZSA9ICcvJywK
KyAgICBNaW4gPSAwLAorICAgIE1heCwKKyAgICBDbGFtcCwKK307CisKK1RleHRTdHJlYW0mIG9w
ZXJhdG9yPDwoVGV4dFN0cmVhbSYsIENhbGNPcGVyYXRvcik7CisKK30KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5LmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9u
Q2F0ZWdvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgor
CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENhbGN1bGF0aW9uQ2F0
ZWdvcnkgY2F0ZWdvcnkpCit7CisgICAgc3dpdGNoIChjYXRlZ29yeSkgeworICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOiB0cyA8PCAibnVtYmVyIjsgYnJlYWs7CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6IHRzIDw8ICJsZW5ndGgiOyBicmVhazsKKyAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6IHRzIDw8ICJwZXJjZW50IjsgYnJl
YWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOiB0cyA8PCAi
cGVyY2VudC1udW1iZXIiOyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnRMZW5ndGg6IHRzIDw8ICJwZXJjZW50LWxlbmd0aCI7IGJyZWFrOworICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6IHRzIDw8ICJhbmdsZSI7IGJyZWFrOworICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTogdHMgPDwgInRpbWUiOyBicmVhazsKKyAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTogdHMgPDwgImZyZXF1ZW5jeSI7IGJyZWFr
OworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6IHRzIDw8ICJvdGhlciI7IGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiB0czsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5LmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNhdGVnb3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBGSVhNRTogRmluZCBhIHdheSB0byB1bmlmeSB0aGlzIHdpdGggQ1NTUHJpbWl0aXZlVmFs
dWU6OlVuaXRDYXRlZ29yeT8KK2VudW0gY2xhc3MgQ2FsY3VsYXRpb25DYXRlZ29yeSA6IHVpbnQ4
X3QgeworICAgIE51bWJlciwKKyAgICBMZW5ndGgsCisgICAgUGVyY2VudCwKKyAgICBQZXJjZW50
TnVtYmVyLAorICAgIFBlcmNlbnRMZW5ndGgsCisgICAgQW5nbGUsCisgICAgVGltZSwKKyAgICBG
cmVxdWVuY3ksCisgICAgT3RoZXIKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYsIENhbGN1bGF0aW9uQ2F0ZWdvcnkpOworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisg
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
YWxjdWxhdGlvblZhbHVlLmgiCisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKyNp
bmNsdWRlIDxsaW1pdHM+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlZjxDYWxjdWxhdGlvblZhbHVlPiBDYWxjdWxhdGlvblZhbHVl
OjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gdmFsdWUsIFZhbHVl
UmFuZ2UgcmFuZ2UpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ2FsY3VsYXRpb25WYWx1
ZShXVEZNb3ZlKHZhbHVlKSwgcmFuZ2UpKTsKK30KKworQ2FsY3VsYXRpb25WYWx1ZTo6Q2FsY3Vs
YXRpb25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBleHByZXNzaW9u
LCBWYWx1ZVJhbmdlIHJhbmdlKQorICAgIDogbV9leHByZXNzaW9uKFdURk1vdmUoZXhwcmVzc2lv
bikpCisgICAgLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZShyYW5nZSA9PSBWYWx1ZVJhbmdl
OjpOb25OZWdhdGl2ZSkKK3sKK30KKworQ2FsY3VsYXRpb25WYWx1ZTo6fkNhbGN1bGF0aW9uVmFs
dWUoKSA9IGRlZmF1bHQ7CisKK2Zsb2F0IENhbGN1bGF0aW9uVmFsdWU6OmV2YWx1YXRlKGZsb2F0
IG1heFZhbHVlKSBjb25zdAoreworICAgIGZsb2F0IHJlc3VsdCA9IG1fZXhwcmVzc2lvbi0+ZXZh
bHVhdGUobWF4VmFsdWUpOworICAgIC8vIEZJWE1FOiBUaGlzIHRlc3Qgd2FzIG9yaWdpbmFsbHkg
bmVlZGVkIHdoZW4gd2UgZGlkIG5vdCBkZXRlY3QgZGl2aXNpb24gYnkgemVybyBhdCBwYXJzZSB0
aW1lLgorICAgIC8vIEl0J3MgcG9zc2libGUgdGhhdCB0aGlzIGlzIG5vdyB1bm5lZWRlZCBjb2Rl
IGFuZCBjYW4gYmUgcmVtb3ZlZC4KKyAgICBpZiAoc3RkOjppc25hbihyZXN1bHQpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgJiYgcmVz
dWx0IDwgMCA/IDAgOiByZXN1bHQ7Cit9CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjdWxh
dGlvblZhbHVlJiBhLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJiBiKQoreworICAgIHJldHVybiBh
LmV4cHJlc3Npb24oKSA9PSBiLmV4cHJlc3Npb24oKTsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0
b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgdmFsdWUpCit7Cisg
ICAgcmV0dXJuIHRzIDw8ICJjYWxjKCIgPDwgdmFsdWUuZXhwcmVzc2lvbigpIDw8ICIpIjsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2FsYy9DYWxjdWxhdGlvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTGVuZ3RoLmgiCisjaW5jbHVk
ZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDYWxjRXhwcmVzc2lv
bk5vZGU7CisKK2NsYXNzIENhbGN1bGF0aW9uVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWxj
dWxhdGlvblZhbHVlPiB7CitwdWJsaWM6CisgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxD
YWxjdWxhdGlvblZhbHVlPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4sIFZhbHVlUmFuZ2UpOworICAgIFdFQkNPUkVfRVhQT1JUIH5DYWxjdWxhdGlvblZhbHVlKCk7
CisKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Q7CisKKyAgICBib29s
IHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2hvdWxkQ2xhbXBU
b05vbk5lZ2F0aXZlOyB9CisgICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBleHByZXNzaW9u
KCkgY29uc3QgeyByZXR1cm4gKm1fZXhwcmVzc2lvbjsgfQorCitwcml2YXRlOgorICAgIENhbGN1
bGF0aW9uVmFsdWUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4sIFZhbHVlUmFu
Z2UpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gbV9leHByZXNz
aW9uOworICAgIGJvb2wgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmU7Cit9OworCitib29sIG9w
ZXJhdG9yPT0oY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUm
KTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgY29uc3QgQ2FsY3VsYXRp
b25WYWx1ZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJCYXNpY1No
YXBlRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1
ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRGZWF0dXJlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250
U3R5bGVWYWx1ZS5oIgpAQCAtNDIsNiArNDIsOCBAQAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZh
bHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUg
IkNTU1JlZmxlY3RWYWx1ZS5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisj
aW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCIKICNpbmNsdWRlICJGb250U2VsZWN0
aW9uVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJHcmlkUG9z
aXRpb25zUmVzb2x2ZXIuaCIKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBU
b29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDIxLTA1LTI5ICBTYW0gV2VpbmlnICA8d2Vp
bmlnQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBjYWxjKCkgcmVsYXRlZCBmaWxlcyBpbnRv
IDEtY2xhc3MgcGVyIGZpbGUgc3RydWN0dXJlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY0MjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DYWxjdWxh
dGlvblZhbHVlLmNwcDoKKyAgICAgICAgVXBkYXRlIHRlc3QgdG8gaW5jbHVkZSBhZGRpdG9uYWwg
aGVhZGVyIG5vdyBuZWVkZWQuCisKIDIwMjEtMDUtMjggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBQdW55Y29kZSBlbmNvZGUgVSswQkU2IHdo
ZW4gbm90IGluIGNvbnRleHQgb2Ygb3RoZXIgVGFtaWwgY2hhcmFjdGVycwpJbmRleDogVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9DYWxjdWxhdGlvblZhbHVl
LmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTQtMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI1LDYgKzI1LDcgQEAKIAog
I2luY2x1ZGUgImNvbmZpZy5oIgogCisjaW5jbHVkZSA8V2ViQ29yZS9DYWxjRXhwcmVzc2lvbk5v
ZGUuaD4KICNpbmNsdWRlIDxXZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuaD4KICNpbmNsdWRlIDx3
dGYvUmVmUHRyLmg+CiAK
</data>
<flag name="commit-queue"
          id="451472"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430109</attachid>
            <date>2021-05-29 14:03:20 -0700</date>
            <delta_ts>2021-05-29 17:51:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226421-20210529140318.patch</filename>
            <type>text/plain</type>
            <size>329726</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI3ODI0MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIwNCBAQAorMjAyMS0wNS0yOSAgU2FtIFdl
aW5pZyAgPHdlaW5pZ0BhcHBsZS5jb20+CisKKyAgICAgICAgU3BsaXQgY2FsYygpIHJlbGF0ZWQg
ZmlsZXMgaW50byAxLWNsYXNzIHBlciBmaWxlIHN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI2NDIxCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQncyBib3RoZXJlZCBtZSBmb3IgYSB3aGls
ZSB0aGF0IHRoZSBjYWxjIHJlbGF0ZWQgY2xhc3NlcyAoYm90aCBpbiBjc3MvCisgICAgICAgIGFu
ZCBpbiBwbGF0Zm9ybS8pIHdlcmUgYnVuZGxlZCBhbGwgaW4gdHdvIGJpZyBmaWxlcy4gVGhpcyBj
aGFuZ2Ugc3BsaXRzCisgICAgICAgIHRoZW0gYWxsIG91dCBpbnRvIHRoZWlyIG93biBoZWFkZXIg
YW5kIGltcGxlbWVudGF0aW9uIGZpbGVzIHRoYXQgbWF0Y2gKKyAgICAgICAgdGhlaXIgbmFtZSwg
YW5kIHB1dHMgdGhlbSBpbiBuZXcgY2FsYy8gc3ViZGlyZWN0b3JpZXMgKGNzcy9jYWxjLy4uLiBh
bmQKKyAgICAgICAgcGxhdGZvcm0vY2FsYy8uLi4pLiBUaGlzIHNob3VsZCBob3BlZnVsbHkgbWFr
ZSB0aGUgbW9kaWZpY2F0aW9ucyBJIG5lZWQKKyAgICAgICAgdG8gbWFrZSB0byBjYWxjKCkgdG8g
c3VwcG9ydCByZWxhdGl2ZSBjb2xvciBzeW50YXggYSBsaXR0bGUgZWFzaWVyLgorCisgICAgICAg
ICogSGVhZGVycy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogY3NzL0NTU0NhbGN1bGF0
aW9uVmFsdWUuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIGNzcy9DU1NDYWxjdWxhdGlvblZhbHVl
Lmg6IFJlbW92ZWQuCisgICAgICAgICogY3NzL0NTU0dyYWRpZW50VmFsdWUuY3BwOgorICAgICAg
ICAqIGNzcy9DU1NQcmltaXRpdmVWYWx1ZS5jcHA6CisgICAgICAgICogY3NzL0NTU1ByaW1pdGl2
ZVZhbHVlTWFwcGluZ3MuaDoKKyAgICAgICAgKiBjc3MvQ1NTVmFsdWUuY3BwOgorICAgICAgICAq
IGNzcy9jYWxjOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBw
aW5nLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjYWxjVW5pdENhdGVnb3J5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkpOgor
ICAgICAgICAoV2ViQ29yZTo6aGFzRG91YmxlVmFsdWUpOgorICAgICAgICAqIGNzcy9jYWxjL0NT
U0NhbGNDYXRlZ29yeU1hcHBpbmcuaDogQWRkZWQuCisgICAgICAgICogY3NzL2NhbGMvQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8
KToKKyAgICAgICAgKFdlYkNvcmU6OnByZXR0eVByaW50Tm9kZSk6CisgICAgICAgIChXZWJDb3Jl
OjpwcmV0dHlQcmludE5vZGVzKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lv
bk5vZGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6
OmVxdWFscyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGU6
OmNhdGVnb3J5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9k
ZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNF
eHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Nh
bGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6b3BlcmF0b3JWYWx1ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpjaGVja0RlcHRoQW5kSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1Byb2R1Y3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNT
dW0pOgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyKToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjSW52
ZXJ0Tm9kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY0ludmVydE5vZGU6
OmNyZWF0ZUNhbGNFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNJ
bnZlcnROb2RlOjpkb3VibGVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
SW52ZXJ0Tm9kZTo6Y29tcHV0ZUxlbmd0aFB4IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbGNJbnZlcnROb2RlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxj
SW52ZXJ0Tm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9k
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0
ZUNhbGNFeHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNOZWdhdGVO
b2RlOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZGV0ZXJtaW5lQ2F0ZWdvcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6Y2F0ZWdvcnlGb3JJbnZlcnQpOgorICAgICAgICAoV2ViQ29yZTo6cmVzb2x2ZWRUeXBl
Rm9yTWluT3JNYXhPckNsYW1wKToKKyAgICAgICAgKFdlYkNvcmU6OmlzU2FtZVBhaXIpOgorICAg
ICAgICAoV2ViQ29yZTo6c29ydGluZ0NhdGVnb3J5Rm9yVHlwZSk6CisgICAgICAgIChXZWJDb3Jl
Ojpzb3J0aW5nQ2F0ZWdvcnkpOgorICAgICAgICAoV2ViQ29yZTo6cHJpbWl0aXZlVHlwZUZvckNv
bWJpbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnNpb25Ub0FkZFZhbHVlc1dpdGhU
eXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpmdW5jdGlvbkZyb21PcGVyYXRvcik6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0pOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcik6
CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29tYmluZUFsbENo
aWxkcmVuIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
b21iaW5lQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6
OnNpbXBsaWZ5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1w
bGlmeVJlY3Vyc2l2ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
c2ltcGxpZnlOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpw
cmltaXRpdmVUeXBlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25O
b2RlOjpjcmVhdGVDYWxjRXhwcmVzc2lvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0KToKKyAg
ICAgICAgKFdlYkNvcmU6OmZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZHVtcCBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxzIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNPcGVyYXRpb25Ob2RlOjpldmFsdWF0ZU9wZXJhdG9yKToKKyAgICAg
ICAgKiBjc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKiBj
c3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3VzdG9tQ1NTVGV4dCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpwcmltaXRpdmVUeXBl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OkNT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6aXNOdW1lcmljVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOZWdhdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpuZWdhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aW52ZXJ0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmFkZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjptdWx0aXBseSk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb252ZXJ0VG9Vbml0VHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5vbmljYWxpemVVbml0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZUNhbGNFeHBy
ZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmRvdWJsZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU6OmNvbXB1dGVMZW5ndGhQeCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVu
ZGVuY2llcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNaZXJvIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmVxdWFscyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpkdW1w
IGNvbnN0KToKKyAgICAgICAgKiBjc3MvY2FsYy9DU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmg6
IEFkZGVkLgorICAgICAgICAqIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQmxlbmRIYWxmKToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUNTUyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNhdGVnb3J5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6cHJpbWl0aXZlVHlwZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NDYWxjVmFsdWU6OmNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpzZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjb2xs
ZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0IGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0NhbGNWYWx1ZTo6ZXF1YWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U0NhbGNWYWx1ZTo6Y2xhbXBUb1Blcm1pdHRlZFJhbmdlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjpjb21wdXRlTGVuZ3RoUHggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NDYWxj
VmFsdWU6OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ2FsY1ZhbHVlOjpjcmVh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogY3NzL2NhbGMv
Q1NTQ2FsY1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vTGVuZ3RoLmNwcDoKKyAgICAgICAgKiBwbGF0Zm9ybS9j
YWxjOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGguY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uQmxlbmRM
ZW5ndGg6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fs
Y0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpkdW1wIGNvbnN0KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxj
RXhwcmVzc2lvbkludmVyc2lvbjo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb246Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bkludmVyc2lvbi5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTGVuZ3RoLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkxl
bmd0aDo6ZXZhbHVhdGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25M
ZW5ndGg6Om9wZXJhdG9yPT0gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Np
b25MZW5ndGg6OmR1bXAgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25MZW5ndGguaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbkxl
bmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9
PSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpldmFsdWF0
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpvcGVy
YXRvcj09IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTmVnYXRpb246
OmR1bXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAgICAgICog
cGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmg6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uTm9kZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZTo6
dHlwZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGU6OkNhbGNF
eHByZXNzaW9uTm9kZSk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51
bWJlci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OdW1iZXI6
OmV2YWx1YXRlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTnVtYmVy
OjpkdW1wIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTnVtYmVyOjpv
cGVyYXRvcj09IGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
TnVtYmVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25OdW1iZXI6
OkNhbGNFeHByZXNzaW9uTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgor
ICAgICAgICAqIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpldmFsdWF0ZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6b3BlcmF0
b3I9PSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpkdW1wIGNvbnN0KToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25PcGVyYXRpb246OkNhbGNFeHByZXNzaW9uT3BlcmF0aW9u
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxj
T3BlcmF0b3IuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNh
dGVnb3J5LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvcjw8KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaDogQWRkZWQuCisgICAgICAg
ICogcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q2Fs
Y3VsYXRpb25WYWx1ZTo6Q2FsY3VsYXRpb25WYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpDYWxj
dWxhdGlvblZhbHVlOjpldmFsdWF0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRv
cj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPDwpOgorICAgICAgICAqIHBsYXRmb3Jt
L2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNhbGN1
bGF0aW9uVmFsdWU6OnNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWxjdWxhdGlvblZhbHVlOjpleHByZXNzaW9uIGNvbnN0KToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaDoKKwogMjAyMS0wNS0yOSAgQWxhbiBCdWp0YXMg
IDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgW0xGQ11bVEZDXSBEbyBub3QgaW5jbHVkZSB2
ZXJ0aWNhbCBzcGFjaW5nIHdoZW4gcmVzb2x2aW5nIHBlcmNlbnQgaGVpZ2h0IGZvciB0YWJsZSBj
b250ZW50CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMjc4MjM5KQorKysgU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTc4LDYgKzc4LDcg
QEAgc2V0KFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgIiR7V0VCQ09S
RV9ESVJ9L2NyeXB0by9rZXlzIgogICAgICIke1dFQkNPUkVfRElSfS9jcnlwdG8vcGFyYW1ldGVy
cyIKICAgICAiJHtXRUJDT1JFX0RJUn0vY3NzIgorICAgICIke1dFQkNPUkVfRElSfS9jc3MvY2Fs
YyIKICAgICAiJHtXRUJDT1JFX0RJUn0vY3NzL3BhcnNlciIKICAgICAiJHtXRUJDT1JFX0RJUn0v
Y3NzL3R5cGVkb20iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L2Nzc2ppdCIKQEAgLTEyNSw2ICsxMjYs
NyBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2FuaW1hdGlv
biIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vYXVkaW8iCisgICAgIiR7V0VCQ09SRV9E
SVJ9L3BsYXRmb3JtL2NhbGMiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2VuY3J5cHRl
ZG1lZGlhIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9nYW1lcGFkIgogICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcyIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL0hlYWRl
cnMuY21ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkocmV2
aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMzQxLDcgKzM0MSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKIAogICAgIGNyeXB0by9TZXJpYWxpemVkQ3J5cHRvS2V5V3JhcC5oCiAKLSAgICBjc3Mv
Q1NTQ2FsY3VsYXRpb25WYWx1ZS5oCiAgICAgY3NzL0NTU0NvbmRpdGlvblJ1bGUuaAogICAgIGNz
cy9DU1NDdXN0b21Qcm9wZXJ0eVZhbHVlLmgKICAgICBjc3MvQ1NTRm9udEZhY2VSdWxlLmgKQEAg
LTM4OSw2ICszODgsOCBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAg
ICAgY3NzL1N0eWxlU2hlZXRDb250ZW50cy5oCiAgICAgY3NzL1N0eWxlU2hlZXRMaXN0LmgKIAor
ICAgIGNzcy9jYWxjL0NTU0NhbGNWYWx1ZS5oCisKICAgICBjc3MvcGFyc2VyL0NTU1BhcnNlci5o
CiAgICAgY3NzL3BhcnNlci9DU1NQYXJzZXJDb250ZXh0LmgKICAgICBjc3MvcGFyc2VyL0NTU1Bh
cnNlck1vZGUuaApAQCAtMTAwMyw3ICsxMDA0LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFN
RVdPUktfSEVBREVSUwogCiAgICAgcGxhdGZvcm0vQWJvcnRhYmxlVGFza1F1ZXVlLmgKICAgICBw
bGF0Zm9ybS9DUFVNb25pdG9yLmgKLSAgICBwbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmgKICAg
ICBwbGF0Zm9ybS9Db2xvckNob29zZXIuaAogICAgIHBsYXRmb3JtL0NvbG9yQ2hvb3NlckNsaWVu
dC5oCiAgICAgcGxhdGZvcm0vQ29udGVudEZpbHRlclVuYmxvY2tIYW5kbGVyLmgKQEAgLTExNTYs
NiArMTE1Niw5IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKIAogICAg
IHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb0Rlc3RpbmF0aW9uR1N0cmVhbWVyLmgKIAor
ICAgIHBsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmgKKyAgICBwbGF0Zm9ybS9jYWxj
L0NhbGN1bGF0aW9uVmFsdWUuaAorCiAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNRW5j
cnlwdGlvblNjaGVtZS5oCiAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNRmFjdG9yeS5o
CiAgICAgcGxhdGZvcm0vZW5jcnlwdGVkbWVkaWEvQ0RNSW5zdGFuY2UuaApJbmRleDogU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC03MTgsNyArNzE4LDYgQEAgY3NzL0NTU0FzcGVjdFJhdGlvVmFsdWUu
Y3BwCiBjc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCiBjc3MvQ1NTQm9yZGVySW1hZ2UuY3BwCiBjc3Mv
Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcAotY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3Bw
CiBjc3MvQ1NTQ2FudmFzVmFsdWUuY3BwCiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAogY3NzL0NTU0NvbmRpdGlvblJ1bGUuY3BwCkBAIC04MjUsNiArODI0LDE0IEBAIGNzcy9T
dHlsZVNoZWV0LmNwcAogY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKIGNzcy9TdHlsZVNoZWV0
TGlzdC5jcHAKIGNzcy9UcmFuc2Zvcm1GdW5jdGlvbnMuY3BwCitjc3MvY2FsYy9DU1NDYWxjQ2F0
ZWdvcnlNYXBwaW5nLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAorY3Nz
L2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY0lu
dmVydE5vZGUuY3BwCitjc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5jcHAKK2Nzcy9jYWxjL0NT
U0NhbGNPcGVyYXRpb25Ob2RlLmNwcAorY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZS5jcHAKK2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAKIGNzcy9wYXJzZXIvQ1NTQXRSdWxlSUQu
Y3BwCiBjc3MvcGFyc2VyL0NTU0RlZmVycmVkUGFyc2VyLmNwcAogY3NzL3BhcnNlci9DU1NQYXJz
ZXIuY3BwCkBAIC0xODE0LDcgKzE4MjEsNiBAQCBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVl
T3ZlcmZsb3dTY3JvCiBwYWdlL3Njcm9sbGluZy9TY3JvbGxpbmdUcmVlU2Nyb2xsaW5nTm9kZS5j
cHAKIHBhZ2Uvc2Nyb2xsaW5nL1Njcm9sbGluZ1RyZWVTY3JvbGxpbmdOb2RlRGVsZWdhdGUuY3Bw
CiBwYWdlL3Njcm9sbGluZy9UaHJlYWRlZFNjcm9sbGluZ1RyZWUuY3BwCi1wbGF0Zm9ybS9DYWxj
dWxhdGlvblZhbHVlLmNwcAogcGxhdGZvcm0vQ29udGVudFR5cGUuY3BwCiBwbGF0Zm9ybS9Db250
ZXh0TWVudS5jcHAKIHBsYXRmb3JtL0NvbnRleHRNZW51SXRlbS5jcHAKQEAgLTE5MjgsNiArMTkz
NCwxNiBAQCBwbGF0Zm9ybS9hdWRpby9TdGVyZW9QYW5uZXIuY3BwCiBwbGF0Zm9ybS9hdWRpby9V
cFNhbXBsZXIuY3BwCiBwbGF0Zm9ybS9hdWRpby9WZWN0b3JNYXRoLmNwcAogcGxhdGZvcm0vYXVk
aW8vWmVyb1BvbGUuY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgu
Y3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uSW52ZXJzaW9uLmNwcAorcGxhdGZvcm0v
Y2FsYy9DYWxjRXhwcmVzc2lvbkxlbmd0aC5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Np
b25OZWdhdGlvbi5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAorcGxh
dGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY0V4
cHJlc3Npb25PcGVyYXRpb24uY3BwCitwbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHAKK3Bs
YXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHAKK3BsYXRmb3JtL2NhbGMvQ2FsY3Vs
YXRpb25WYWx1ZS5jcHAKIHBsYXRmb3JtL2VuY3J5cHRlZG1lZGlhL0NETUZhY3RvcnkuY3BwCiBw
bGF0Zm9ybS9lbmNyeXB0ZWRtZWRpYS9DRE1Mb2dnaW5nLmNwcAogcGxhdGZvcm0vZW5jcnlwdGVk
bWVkaWEvQ0RNUHJpdmF0ZS5jcHAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMTM1NCw3ICsxMzU0LDcgQEAKIAkJNDk5QjNFQzUxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRm
b3JtQ0FMYXllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNDk5QjNFQzMxMjhDQ0M0NzAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FMYXllci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTQ5OUIzRUQ3MTI4Q0Qz
MTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5OUIzRUQ1MTI4Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGlj
c0xheWVyQ0EuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQk0OTlCM0VERDEyOERCNTAyMDBFNzI2QzIgLyogUGxhdGZvcm1DQUFuaW1hdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNDk5QjNFREMxMjhE
QjUwMTAwRTcyNkMyIC8qIFBsYXRmb3JtQ0FBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEg
LyogQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNDlBRTJEOEQxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9u
VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk0OUFFMkQ4RjEzNEVFNTBDMDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUFFMkQ4RDEzNEVFNTBDMDA3Mjky
MEEgLyogQ1NTQ2FsY1ZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNDlBRTJEOTcxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDQ5QUUy
RDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNDlBRjJENjkxNDQzNUQwNTAwMTZB
Nzg0IC8qIERpc3BsYXlSZWZyZXNoTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNDlBRjJENjgxNDQzNUQwNTAwMTZBNzg0IC8qIERpc3BsYXlS
ZWZyZXNoTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTQ5QzdCOTk0MTA0MkQyRDMwMDA5RDQ0NyAvKiBKU1dlYkdMQnVmZmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0OUM3Qjk4MTEwNDJE
MkQzMDAwOUQ0NDcgLyogSlNXZWJHTEJ1ZmZlci5oICovOyB9OwpAQCAtNDE5MCw2ICs0MTkwLDIy
IEBACiAJCUJDRUY0NUY2MEU2ODdCNUMwMDFDMTI4NyAvKiBKU1RleHRNZXRyaWNzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VGNDVGNDBFNjg3QjVD
MDAxQzEyODcgLyogSlNUZXh0TWV0cmljcy5oICovOyB9OwogCQlCQ0VGODY5RjBFODQ0RTlEMDBB
ODVDRDUgLyogU2Nyb2xsYmFyVGhlbWVNYWMubW0gaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0VGODY5RTBFODQ0RTlEMDBBODVDRDUgLyogU2Nyb2xsYmFy
VGhlbWVNYWMubW0gKi87IH07CiAJCUJDRUZFMUVCMERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQ
cm9jZXNzb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEJDRUZFMUU5MERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCAqLzsgfTsKKwkJ
QkNGMTY0NTEyNjYyOUZDNzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NEYyNjYyOUZD
NzAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZS5oICovOyB9OworCQlCQ0YxNjQ1NTI2
NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NTMyNjYyQTEyMjAwMDJG
N0VGIC8qIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NTkyNjYy
QTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ1NzI2NjJBMUU5MDAwMkY3RUYgLyogQ1NT
Q2FsY05lZ2F0ZU5vZGUuaCAqLzsgfTsKKwkJQkNGMTY0NUQyNjYyQTIzNzAwMDJGN0VGIC8qIENT
U0NhbGNJbnZlcnROb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0YxNjQ1QjI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuaCAq
LzsgfTsKKwkJQkNGMTY0NjEyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0YxNjQ1
RjI2NjJBMjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCAqLzsgfTsKKwkJQkNG
MTY0NjUyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NjMyNjYy
QTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oICovOyB9OworCQlC
Q0YxNjQ2QTI2NjJBOTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0NjgyNjYyQTkz
NDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCAqLzsgfTsKKwkJQkNGMTY0NkUy
NjYyQUE1MDAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDZEMjY2MkFBNTAwMDAyRjdFRiAv
KiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggKi87IH07CisJCUJDRjE2NDcyMjY2MkFBQzMwMDAyRjdF
RiAvKiBDYWxjRXhwcmVzc2lvbk5vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDRjE2NDcwMjY2MkFBQzMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lv
bk5vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQlCQ0YxNjQ3NjI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OdW1iZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDc0MjY2MkFC
MzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5oICovOyB9OworCQlCQ0YxNjQ3QTI2
NjJBQjg1MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25MZW5ndGguaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDc4MjY2MkFCODUwMDAyRjdFRiAv
KiBDYWxjRXhwcmVzc2lvbkxlbmd0aC5oICovOyB9OworCQlCQ0YxNjQ3RTI2NjJBQkU3MDAwMkY3
RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gQkNGMTY0N0MyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uTmVnYXRpb24uaCAqLzsgfTsKKwkJQkNGMTY0ODIyNjYyQUM1MTAwMDJGN0VGIC8qIENh
bGNFeHByZXNzaW9uSW52ZXJzaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQ0YxNjQ4MDI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25J
bnZlcnNpb24uaCAqLzsgfTsKKwkJQkNGMTY0ODYyNjYyQUNBMzAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBCQ0YxNjQ4NDI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRp
b24uaCAqLzsgfTsKKwkJQkNGMTY0OEEyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDRjE2NDg4MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
LmggKi87IH07CisJCUJDRjE2NDhFMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjE2NDhDMjY2
MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCAqLzsgfTsKIAkJQkNGN0U0OTExMzdDRDdD
NzAwMUREQUU3IC8qIEFkanVzdFZpZXdTaXplT3JOb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDRjQ4Q0U2MTM3MEQxMTQwMDRFODdENiAvKiBBZGp1
c3RWaWV3U2l6ZU9yTm90LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJQkNGQTkzMDgxMDMzMzE5MzAwN0IyNUQxIC8qIFJlbmRlck92ZXJmbG93Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0ZBOTMwNzEw
MzMzMTkzMDA3QjI1RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQ0ZCMkU1RTA5NzlFNDY0MDBCQTcwM0QgLyog
Q2FjaGVkUmVzb3VyY2VDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDRkIyRTVEMDk3OUU0NjQwMEJBNzAzRCAvKiBDYWNoZWRSZXNvdXJjZUNs
aWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBA
IC04NDQzLDggKzg0NTksOCBAQAogCQk0OTlCM0VENDEyOENEMzE0MDBFNzI2QzIgLyogR3JhcGhp
Y3NMYXllckNBLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdyYXBo
aWNzTGF5ZXJDQS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTQ5OUIzRUQ1MTI4
Q0QzMTQwMEU3MjZDMiAvKiBHcmFwaGljc0xheWVyQ0EuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gR3JhcGhpY3NMYXllckNBLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTQ5OUIzRURDMTI4REI1MDEwMEU3MjZDMiAvKiBQbGF0Zm9ybUNBQW5pbWF0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtQ0FBbmltYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENT
U0NhbGN1bGF0aW9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGN1bGF0aW9uVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNDlBRTJEOEMxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0Nh
bGNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxj
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0OUFFMkQ4RDEzNEVFNTBD
MDA3MjkyMEEgLyogQ1NTQ2FsY1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENTU0NhbGNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUFFMkQ5
NDEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRpb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjdWxhdGlvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNDlBRTJEOTUxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9u
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY3VsYXRpb25WYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0OUFGMkQ2ODE0NDM1RDA1MDAxNkE3
ODQgLyogRGlzcGxheVJlZnJlc2hNb25pdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IERpc3BsYXlSZWZyZXNoTW9uaXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwpAQCAtMTQ1MjEsNiArMTQ1MzcsMzggQEAKIAkJQkNFRkUxREMwRENBNUNGRDAwNzM5MjE5IC8q
IFhTTFRQcm9jZXNzb3IuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IFhTTFRQcm9jZXNzb3Iu
aWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0VGRTFFODBEQ0E1RjY0MDA3Mzky
MTkgLyogSlNYU0xUUHJvY2Vzc29yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTWFNMVFByb2Nlc3Nvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CUJDRUZFMUU5MERDQTVGNjQwMDczOTIxOSAvKiBKU1hTTFRQcm9jZXNzb3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNYU0xUUHJvY2Vzc29yLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDRjE2NDRGMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDUwMjY2MjlGQzcwMDAyRjdFRiAvKiBDU1ND
YWxjRXhwcmVzc2lvbk5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTMyNjYyQTEy
MjAwMDJGN0VGIC8qIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQlCQ0YxNjQ1NDI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NTcyNjYyQTFFOTAwMDJGN0VGIC8qIENT
U0NhbGNOZWdhdGVOb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0NhbGNOZWdhdGVOb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDU4MjY2MkExRTkwMDAyRjdFRiAvKiBD
U1NDYWxjTmVnYXRlTm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NDYWxjTmVnYXRlTm9k
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDVCMjY2MkEyMzcwMDAy
RjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjSW52ZXJ0
Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1QzI2NjJBMjM3MDAw
MkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTQ2Fs
Y0ludmVydE5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ1RjI2
NjJBMjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTQ2FsY09wZXJhdGlvbk5vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNG
MTY0NjAyNjYyQTI4RDAwMDJGN0VGIC8qIENTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQkNGMTY0NjMyNjYyQTMxQTAwMDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9u
Tm9kZVBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NjQyNjYyQTMxQTAwMDJGN0VG
IC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQlCQ0YxNjQ2ODI2NjJBOTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCUJDRjE2NDY5MjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdv
cnlNYXBwaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0NhbGNDYXRlZ29yeU1hcHBpbmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ2RDI2NjJBQTUwMDAwMkY3
RUYgLyogQ2FsY3VsYXRpb25DYXRlZ29yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjdWxhdGlvbkNh
dGVnb3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDZGMjY2MkFBNkYw
MDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGN1bGF0aW9uQ2F0ZWdvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0Yx
NjQ3MDI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENhbGNFeHByZXNzaW9uTm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlC
Q0YxNjQ3MTI2NjJBQUMzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uTm9kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUJDRjE2NDc0MjY2MkFCMzYwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk51bWJl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk51bWJlci5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0YxNjQ3NTI2NjJBQjM2MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25OdW1iZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25OdW1iZXIuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ3ODI2NjJBQjg1MDAwMkY3RUYg
LyogQ2FsY0V4cHJlc3Npb25MZW5ndGguaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25M
ZW5ndGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0NzkyNjYyQUI4NTAw
MDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENh
bGNFeHByZXNzaW9uTGVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNG
MTY0N0MyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTmVnYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlCQ0YxNjQ3RDI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlv
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQkNGMTY0ODAyNjYyQUM1MTAwMDJGN0VGIC8qIENh
bGNFeHByZXNzaW9uSW52ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNFeHByZXNzaW9uSW52
ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJDRjE2NDgxMjY2MkFDNTEw
MDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCUJDRjE2NDg0MjY2MkFDQTMwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlCQ0YxNjQ4NTI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Np
b25PcGVyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FsY0V4cHJlc3Npb25PcGVyYXRp
b24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4ODI2NjJBRDUyMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUJD
RjE2NDg5MjY2MkFENTIwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQlCQ0YxNjQ4QzI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09w
ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhbGNPcGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQlCQ0YxNjQ4RDI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbGNPcGVyYXRvci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCUJDRjM0QTM2MTFBMjMxQ0QwMEM3MTgwNCAvKiBOYW1lZE5vZGVNYXAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTmFtZWROb2RlTWFwLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkNGNDhDRTYxMzcwRDExNDAwNEU4N0Q2IC8q
IEFkanVzdFZpZXdTaXplT3JOb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
QWRqdXN0Vmlld1NpemVPck5vdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlCQ0ZB
OTMwNzEwMzMzMTkzMDA3QjI1RDEgLyogUmVuZGVyT3ZlcmZsb3cuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyT3ZlcmZsb3cuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTI3ODkxLDExICsyNzkzOSw2MiBAQAogCQkJbmFtZSA9IENvbnN0cnVjdG9yczsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCUJDRjE2NDREMjY2MjlGOUEwMDAy
RjdFRiAvKiBjYWxjICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgK
KwkJCQlCQ0YxNjQ2OTI2NjJBOTM0MDAwMkY3RUYgLyogQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5j
cHAgKi8sCisJCQkJQkNGMTY0NjgyNjYyQTkzNDAwMDJGN0VGIC8qIENTU0NhbGNDYXRlZ29yeU1h
cHBpbmcuaCAqLywKKwkJCQlCQ0YxNjQ1MDI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlLmNwcCAqLywKKwkJCQlCQ0YxNjQ0RjI2NjI5RkM3MDAwMkY3RUYgLyogQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlLmggKi8sCisJCQkJQkNGMTY0NjQyNjYyQTMxQTAwMDJGN0VGIC8qIENT
U0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAgKi8sCisJCQkJQkNGMTY0NjMyNjYyQTMxQTAw
MDJGN0VGIC8qIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oICovLAorCQkJCUJDRjE2NDVD
MjY2MkEyMzcwMDAyRjdFRiAvKiBDU1NDYWxjSW52ZXJ0Tm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0
NUIyNjYyQTIzNzAwMDJGN0VGIC8qIENTU0NhbGNJbnZlcnROb2RlLmggKi8sCisJCQkJQkNGMTY0
NTgyNjYyQTFFOTAwMDJGN0VGIC8qIENTU0NhbGNOZWdhdGVOb2RlLmNwcCAqLywKKwkJCQlCQ0Yx
NjQ1NzI2NjJBMUU5MDAwMkY3RUYgLyogQ1NTQ2FsY05lZ2F0ZU5vZGUuaCAqLywKKwkJCQlCQ0Yx
NjQ2MDI2NjJBMjhEMDAwMkY3RUYgLyogQ1NTQ2FsY09wZXJhdGlvbk5vZGUuY3BwICovLAorCQkJ
CUJDRjE2NDVGMjY2MkEyOEQwMDAyRjdFRiAvKiBDU1NDYWxjT3BlcmF0aW9uTm9kZS5oICovLAor
CQkJCUJDRjE2NDU0MjY2MkExMjIwMDAyRjdFRiAvKiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
LmNwcCAqLywKKwkJCQlCQ0YxNjQ1MzI2NjJBMTIyMDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZS5oICovLAorCQkJCTQ5QUUyRDhDMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxj
VmFsdWUuY3BwICovLAorCQkJCTQ5QUUyRDhEMTM0RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjVmFs
dWUuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gY2FsYzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CisJCX07CisJCUJDRjE2NDZDMjY2MkFBMEEwMDAyRjdFRiAvKiBjYWxjICovID0geworCQkJ
aXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ4OTI2NjJBRDUyMDAw
MkY3RUYgLyogQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAgKi8sCisJCQkJQkNGMTY0ODgy
NjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCAqLywKKwkJCQlC
Q0YxNjQ4MTI2NjJBQzUxMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uY3BwICov
LAorCQkJCUJDRjE2NDgwMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkludmVyc2lv
bi5oICovLAorCQkJCUJDRjE2NDc5MjY2MkFCODUwMDAyRjdFRiAvKiBDYWxjRXhwcmVzc2lvbkxl
bmd0aC5jcHAgKi8sCisJCQkJQkNGMTY0NzgyNjYyQUI4NTAwMDJGN0VGIC8qIENhbGNFeHByZXNz
aW9uTGVuZ3RoLmggKi8sCisJCQkJQkNGMTY0N0QyNjYyQUJFNzAwMDJGN0VGIC8qIENhbGNFeHBy
ZXNzaW9uTmVnYXRpb24uY3BwICovLAorCQkJCUJDRjE2NDdDMjY2MkFCRTcwMDAyRjdFRiAvKiBD
YWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmggKi8sCisJCQkJQkNGMTY0NzEyNjYyQUFDMzAwMDJGN0VG
IC8qIENhbGNFeHByZXNzaW9uTm9kZS5jcHAgKi8sCisJCQkJQkNGMTY0NzAyNjYyQUFDMzAwMDJG
N0VGIC8qIENhbGNFeHByZXNzaW9uTm9kZS5oICovLAorCQkJCUJDRjE2NDc1MjY2MkFCMzYwMDAy
RjdFRiAvKiBDYWxjRXhwcmVzc2lvbk51bWJlci5jcHAgKi8sCisJCQkJQkNGMTY0NzQyNjYyQUIz
NjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTnVtYmVyLmggKi8sCisJCQkJQkNGMTY0ODUyNjYy
QUNBMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmNwcCAqLywKKwkJCQlCQ0Yx
NjQ4NDI2NjJBQ0EzMDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCAqLywKKwkJ
CQlCQ0YxNjQ4RDI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmNwcCAqLywKKwkJCQlC
Q0YxNjQ4QzI2NjJBREQ4MDAwMkY3RUYgLyogQ2FsY09wZXJhdG9yLmggKi8sCisJCQkJQkNGMTY0
NkYyNjYyQUE2RjAwMDJGN0VGIC8qIENhbGN1bGF0aW9uQ2F0ZWdvcnkuY3BwICovLAorCQkJCUJD
RjE2NDZEMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5LmggKi8sCisJCQkJ
NDlBRTJEOTQxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAorCQkJ
CTQ5QUUyRDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCisJCQkp
OworCQkJcGF0aCA9IGNhbGM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQlC
Q0YxQTVCQTA5NzgzMjA5MDA2MUExMjMgLyogcGxhdGZvcm0gKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAogCQkJCTQ5RTkxMkE0MEVGQUM4RTYwMDlEMENBRiAvKiBh
bmltYXRpb24gKi8sCiAJCQkJRkQzMTYwNDAxMkIwMjZBMzAwQzFBMzU5IC8qIGF1ZGlvICovLAor
CQkJCUJDRjE2NDZDMjY2MkFBMEEwMDAyRjdFRiAvKiBjYWxjICovLAogCQkJCTFBRTQyRjY3MEFB
NEI4Q0IwMEM4NjEyRCAvKiBjZiAqLywKIAkJCQlBNUM5NzRDRTExNDg1RkRBMDA2NkYyQUIgLyog
Y29jb2EgKi8sCiAJCQkJQ0Q5NEE1Q0IxRjcxQ0I0NjAwRjUyNUM1IC8qIGVuY3J5cHRlZG1lZGlh
ICovLApAQCAtMjc5MTIsOCArMjgwMTEsNiBAQAogCQkJCUIyQzNEOUVDMEQwMDZDMUQwMEVGNkYy
NiAvKiB0ZXh0ICovLAogCQkJCUUxRUU4QjZCMjQxMkIyQTcwMEU3OTRENiAvKiB4ciAqLywKIAkJ
CQlERkRCOTEyQ0Y4RTg4QTZEQTFBRDI2NEYgLyogQWJvcnRhYmxlVGFza1F1ZXVlLmggKi8sCi0J
CQkJNDlBRTJEOTQxMzRFRTVGOTAwNzI5MjBBIC8qIENhbGN1bGF0aW9uVmFsdWUuY3BwICovLAot
CQkJCTQ5QUUyRDk1MTM0RUU1RjkwMDcyOTIwQSAvKiBDYWxjdWxhdGlvblZhbHVlLmggKi8sCiAJ
CQkJQzMzMEEyMjExM0VDMTk2QjAwMDBCNDVCIC8qIENvbG9yQ2hvb3Nlci5oICovLAogCQkJCUMz
N0NERUJDMTQ5RUYyMDMwMDQyMDkwRCAvKiBDb2xvckNob29zZXJDbGllbnQuaCAqLywKIAkJCQlC
Q0M4Q0ZDQTA5ODZDRDI0MDAxNDBCRjIgLyogQ29sb3JEYXRhLmdwZXJmICovLApAQCAtMjk3MDcs
NiArMjk4MDQsNyBAQAogCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3NzICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQlCQ0YxNjQ0RDI2NjI5RjlB
MDAwMkY3RUYgLyogY2FsYyAqLywKIAkJCQk5NDZEMzcyNzFENkNCMjI1MDA3NzA4NEYgLyogcGFy
c2VyICovLAogCQkJCTRCQUZEMERBMjE5MjFFQUQwMEMwQUI2NCAvKiB0eXBlZG9tICovLAogCQkJ
CUZCRDZBRjg0MTVFRjIxRDQwMDhCNzExMCAvKiBCYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCAqLywK
QEAgLTI5NzIwLDggKzI5ODE4LDYgQEAKIAkJCQlFMTZBODRGODE0Qzg1Q0NDMDAyOTc3REYgLyog
Q1NTQm9yZGVySW1hZ2UuaCAqLywKIAkJCQlCQzI3NEIzMDE0MEVCRUQ4MDBFQURGQTYgLyogQ1NT
Qm9yZGVySW1hZ2VTbGljZVZhbHVlLmNwcCAqLywKIAkJCQlCQzI3NEIyRTE0MEVCRUIyMDBFQURG
QTYgLyogQ1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlLmggKi8sCi0JCQkJNDlBRTJEOEMxMzRFRTUw
QzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuY3BwICovLAotCQkJCTQ5QUUyRDhEMTM0
RUU1MEMwMDcyOTIwQSAvKiBDU1NDYWxjdWxhdGlvblZhbHVlLmggKi8sCiAJCQkJQkM2MDRBNDIw
REI1NjM0RTAwMjA0NzM5IC8qIENTU0NhbnZhc1ZhbHVlLmNwcCAqLywKIAkJCQlCQzYwNDlDQjBE
QjU2MEMyMDAyMDQ3MzkgLyogQ1NTQ2FudmFzVmFsdWUuaCAqLywKIAkJCQlCQ0VBNDc3QzA5N0NB
QUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcCAqLywKQEAgLTMx
ODExLDYgKzMxOTA3LDE1IEBACiAJCQkJNDFEMTI5RDMxRjNEMEYxNjAwRDE1RTQ3IC8qIENhY2hl
U3RvcmFnZUNvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTQxRDEyOUQ1MUYzRDBGNjkw
MEQxNUU0NyAvKiBDYWNoZVN0b3JhZ2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQz
QUY4RTcxQUM1QjdFQzAwQ0E3MTdFIC8qIENhY2hlVmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8s
CisJCQkJQkNGMTY0OEEyNjYyQUQ1MjAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGguaCBpbiBIZWFkZXJzICovLAorCQkJCUJDRjE2NDgyMjY2MkFDNTEwMDAyRjdFRiAvKiBDYWxj
RXhwcmVzc2lvbkludmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0N0EyNjYyQUI4
NTAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9uTGVuZ3RoLmggaW4gSGVhZGVycyAqLywKKwkJCQlC
Q0YxNjQ3RTI2NjJBQkU3MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJQkNGMTY0NzIyNjYyQUFDMzAwMDJGN0VGIC8qIENhbGNFeHByZXNzaW9u
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NzYyNjYyQUIzNjAwMDJGN0VGIC8qIENh
bGNFeHByZXNzaW9uTnVtYmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ4NjI2NjJBQ0Ez
MDAwMkY3RUYgLyogQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CUJDRjE2NDhFMjY2MkFERDgwMDAyRjdFRiAvKiBDYWxjT3BlcmF0b3IuaCBpbiBIZWFkZXJzICov
LAorCQkJCUJDRjE2NDZFMjY2MkFBNTAwMDAyRjdFRiAvKiBDYWxjdWxhdGlvbkNhdGVnb3J5Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OUFFMkQ5NzEzNEVFNUY5MDA3MjkyMEEgLyogQ2FsY3VsYXRp
b25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxRThEMDExRUQwQzJEQTAwQjFEOTgzIC8q
IENhbGxiYWNrUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFRkNDNkM4RjIwRkU5MTQ0MDBB
MjMyMUIgLyogQ2FudmFzQWN0aXZpdHlSZWNvcmQuaCBpbiBIZWFkZXJzICovLApAQCAtMzIwODEs
NyArMzIxODYsMTQgQEAKIAkJCQlGQkQ2QUY4ODE1RUYyNUM5MDA4QjcxMTAgLyogQ1NTQmFzaWNT
aGFwZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNkE4NEZBMTRDODVDQ0MwMDI5NzdERiAvKiBD
U1NCb3JkZXJJbWFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMyNzRCMkYxNDBFQkVCMjAwRUFE
RkE2IC8qIENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNDlB
RTJEOEYxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGN1bGF0aW9uVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCUJDRjE2NDZBMjY2MkE5MzQwMDAyRjdFRiAvKiBDU1NDYWxjQ2F0ZWdvcnlNYXBw
aW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ1MTI2NjI5RkM3MDAwMkY3RUYgLyogQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ2NTI2NjJBMzFB
MDAwMkY3RUYgLyogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmggaW4gSGVhZGVycyAqLywK
KwkJCQlCQ0YxNjQ1RDI2NjJBMjM3MDAwMkY3RUYgLyogQ1NTQ2FsY0ludmVydE5vZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCUJDRjE2NDU5MjY2MkExRTkwMDAyRjdFRiAvKiBDU1NDYWxjTmVnYXRl
Tm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJQkNGMTY0NjEyNjYyQTI4RDAwMDJGN0VGIC8qIENT
U0NhbGNPcGVyYXRpb25Ob2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQlCQ0YxNjQ1NTI2NjJBMTIy
MDAwMkY3RUYgLyogQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNDlBRTJEOEYxMzRFRTUwQzAwNzI5MjBBIC8qIENTU0NhbGNWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkM2MDQ5Q0MwREI1NjBDMjAwMjA0NzM5IC8qIENTU0NhbnZhc1ZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0VBNDc5MDA5N0NBQUM4MDA5NEM5RTQgLyogQ1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzBBQUM5QTI1MEVCODQ5MDAx
M0RBOUYgLyogQ1NTQ29uZGl0aW9uUnVsZS5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0NhbGN1bGF0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKG5vbmV4aXN0ZW50
KQpAQCAtMSwyMTkwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAx
OSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAq
IE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAq
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF
IENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKLQotI2luY2x1ZGUgIkNTU1BhcnNlci5oIgotI2lu
Y2x1ZGUgIkNTU1BhcnNlclRva2VuUmFuZ2UuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZU1hcHBpbmdzLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+Ci0KLXN0YXRp
YyBjb25zdCBpbnQgbWF4RXhwcmVzc2lvbkRlcHRoID0gMTAwOwotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci1jbGFzcyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOwotY2xhc3MgQ1NTQ2FsY09wZXJh
dGlvbk5vZGU7Ci1jbGFzcyBDU1NDYWxjTmVnYXRlTm9kZTsKLWNsYXNzIENTU0NhbGNJbnZlcnRO
b2RlOwotfQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU0NBTENFWFBSRVNTSU9OX05PREUo
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSwgdHlwZSgpID09IFdlYkNvcmU6OkNTU0NhbGNFeHBy
ZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY1ByaW1pdGl2ZVZhbHVlKQotU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNPcGVyYXRpb25Ob2RlLCB0eXBl
KCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjT3BlcmF0
aW9uKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0Nh
bGNOZWdhdGVOb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpU
eXBlOjpDc3NDYWxjTmVnYXRlKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NDQUxDRVhQUkVT
U0lPTl9OT0RFKENTU0NhbGNJbnZlcnROb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0KQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3Qg
Q2FsY0V4cHJlc3Npb25Ob2RlJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLXN0YXRpYyBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgTGVuZ3RoJiwgY29uc3QgUmVu
ZGVyU3R5bGUmKTsKLQotc3RhdGljIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkKLXsKLSAgICBub2RlLmR1bXAo
dHMpOwotICAgIHJldHVybiB0czsKLX0KLQotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2Fs
Y1VuaXRDYXRlZ29yeShDU1NVbml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXI7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19Q
WDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX01NOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUFQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19ROgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0gICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NIUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19WTUlOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAgICAgICBy
ZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19QRVJDRU5UQUdFOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVy
Y2VudDsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgotICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19SQUQ6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6Ci0gICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX1RVUk46Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpBbmdsZTsKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTVM6Ci0gICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1M6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOwot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19IWjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
S0haOgotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OwotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGN1bGF0aW9uQ2F0ZWdvcnlG
b3JDb21iaW5hdGlvbihDU1NVbml0VHlwZSB0eXBlKQotewotICAgIHN3aXRjaCAodHlwZSkgewot
ICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6Ci0gICAgICAgIHJldHVybiBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXI7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DTToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19QVDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1E6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U6Ci0gICAgICAgIHJldHVybiBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfR1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICAgICAgcmV0dXJu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19N
UzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUzoKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlRpbWU7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpGcmVxdWVuY3k7Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfRVhTOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6Ci0g
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1JMSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NIUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19WTUlOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLSAg
ICB9Ci19Ci0KLXN0YXRpYyBDU1NVbml0VHlwZSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0
aW9uQ2F0ZWdvcnkoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLXsKLSAgICBzd2l0Y2gg
KGNhdGVnb3J5KSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6IHJldHVy
biBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Okxlbmd0aDogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfUFg7Ci0gICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50OiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdFOwot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6IHJldHVybiBDU1NVbml0VHlwZTo6
Q1NTX0RFRzsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6IHJldHVybiBDU1NV
bml0VHlwZTo6Q1NTX01TOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5
OiByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19IWjsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok90aGVyOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg6Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIENT
U1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLX0KLQotc3RhdGljIGJvb2wgaGFzRG91YmxlVmFsdWUo
Q1NTVW5pdFR5cGUgdHlwZSkKLXsKLSAgICBzd2l0Y2ggKHR5cGUpIHsKLSAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QRVJDRU5UQUdF
OgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX0VYUzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0hTOgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19SRU1TOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QWDoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfQ006Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01NOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JTjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFQ6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BDOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19ERUc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfR1JBRDoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKLSAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfTVM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1M6Ci0gICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19LSFo6
Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RJTUVOU0lPTjoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVlc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgotICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19WTUlOOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19EUFBYOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19E
UEk6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RQQ006Ci0gICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX0ZSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ROgotICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19MSFM6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOgotICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19TVFJJTkc6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0ZP
TlRfRkFNSUxZOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19VUkk6Ci0gICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0lERU5UOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19BVFRSOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DT1VOVEVSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19SRUNUOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SR0JDT0xPUjoKLSAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUEFJUjoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVU5JQ09ERV9S
QU5HRToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ09VTlRFUl9OQU1FOgotICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19TSEFQRToKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVBRDoK
LSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUVVJUktZX0VNUzoKLSAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfQ0FMQzoKLSAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQ19QRVJDRU5UQUdF
X1dJVEhfTlVNQkVSOgotICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DQUxDX1BFUkNFTlRBR0Vf
V0lUSF9MRU5HVEg6Ci0gICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BST1BFUlRZX0lEOgotICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WQUxVRV9JRDoKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH07Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
Ci1zdGF0aWMgQ1NTVmFsdWVJRCBmdW5jdGlvbkZyb21PcGVyYXRvcihDYWxjT3BlcmF0b3Igb3Ap
Ci17Ci0gICAgc3dpdGNoIChvcCkgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6Ci0gICAg
Y2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0
aXBseToKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVDYWxjOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgICAgIHJldHVybiBD
U1NWYWx1ZU1pbjsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgotICAgICAgICByZXR1cm4g
Q1NTVmFsdWVNYXg7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOgotICAgICAgICByZXR1
cm4gQ1NTVmFsdWVDbGFtcDsKLSAgICB9Ci0gICAgcmV0dXJuIENTU1ZhbHVlQ2FsYzsKLX0KLQot
I2lmICFMT0dfRElTQUJMRUQKLXN0YXRpYyBTdHJpbmcgcHJldHR5UHJpbnROb2RlKGNvbnN0IENT
U0NhbGNFeHByZXNzaW9uTm9kZSYgbm9kZSkKLXsKLSAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0
cmVhbTsKLSAgICBtdWx0aWxpbmVTdHJlYW0gPDwgbm9kZTsKLSAgICByZXR1cm4gbXVsdGlsaW5l
U3RyZWFtLnJlbGVhc2UoKTsKLX0KLQotc3RhdGljIFN0cmluZyBwcmV0dHlQcmludE5vZGVzKGNv
bnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzKQotewotICAgIFRl
eHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOwotICAgIG11bHRpbGluZVN0cmVhbSA8PCBub2RlczsK
LSAgICByZXR1cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKLX0KLSNlbmRpZgotCi1jbGFz
cyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNz
aW9uTm9kZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBjcmVhdGUoUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZShXVEZNb3ZlKHZhbHVlKSkpOwotICAgIH0KLQotICAgIHN0
YXRpYyBSZWZQdHI8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4gY3JlYXRlKGRvdWJsZSB2YWx1
ZSwgQ1NTVW5pdFR5cGUgdHlwZSkKLSAgICB7Ci0gICAgICAgIGlmICghc3RkOjppc2Zpbml0ZSh2
YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUodmFsdWUsIHR5cGUpKSk7Ci0gICAgfQotCi0gICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmNzc1RleHQoKTsKLSAgICB9Ci0K
LSAgICBDU1NVbml0VHlwZSBwcmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgfQotCi0gICAgYm9vbCBp
c051bWVyaWNWYWx1ZSgpIGNvbnN0OwotICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0OwotCi0g
ICAgdm9pZCBuZWdhdGUoKTsKLSAgICB2b2lkIGludmVydCgpOwotCi0gICAgZW51bSBjbGFzcyBV
bml0Q29udmVyc2lvbiB7Ci0gICAgICAgIEludmFsaWQsCi0gICAgICAgIFByZXNlcnZlLAotICAg
ICAgICBDYW5vbmljYWxpemUKLSAgICB9OwotICAgIHZvaWQgYWRkKGNvbnN0IENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGUmLCBVbml0Q29udmVyc2lvbiA9IFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2
ZSk7Ci0gICAgdm9pZCBtdWx0aXBseShkb3VibGUpOwotCi0gICAgdm9pZCBjb252ZXJ0VG9Vbml0
VHlwZShDU1NVbml0VHlwZSk7Ci0gICAgdm9pZCBjYW5vbmljYWxpemVVbml0KCk7Ci0KLSAgICBj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdl
dCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbAotICAgIHsK
LSAgICAgICAgcmV0dXJuICFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpOwotICAgIH0KLQotICAgIGJv
b2wgZXF1YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0IGZpbmFs
OwotICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIENzc0NhbGNQcmltaXRpdmVW
YWx1ZTsgfQotCi0gICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRl
Q2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZp
bmFsOwotICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7Ci0K
LSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEmKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVw
ZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCBmaW5hbDsKLSAgICB2b2lk
IGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1By
b3BlcnR5SUQ+JikgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNv
bnN0IGZpbmFsOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGUoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbHVlKQotICAgICAgICA6IENTU0NhbGNF
eHByZXNzaW9uTm9kZShjYWxjVW5pdENhdGVnb3J5KHZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKQot
ICAgICAgICAsIG1fdmFsdWUoV1RGTW92ZSh2YWx1ZSkpCi0gICAgewotICAgIH0KLQotICAgIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gbV92YWx1ZTsKLX07Ci0KLS8vIEZJWE1FOiBVc2UgY2FsY1Vu
aXRDYXRlZ29yeT8KLWJvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOdW1lcmljVmFs
dWUoKSBjb25zdAotewotICAgIHJldHVybiBtX3ZhbHVlLT5pc0xlbmd0aCgpIHx8IG1fdmFsdWUt
PmlzTnVtYmVyKCkgfHwgbV92YWx1ZS0+aXNQZXJjZW50YWdlKCkgfHwgbV92YWx1ZS0+aXNBbmds
ZSgpCi0gICAgICAgIHx8IG1fdmFsdWUtPmlzVGltZSgpIHx8IG1fdmFsdWUtPmlzUmVzb2x1dGlv
bigpIHx8IG1fdmFsdWUtPmlzRmxleCgpIHx8IG1fdmFsdWUtPmlzRnJlcXVlbmN5KCk7Ci19Ci0K
LWJvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aXNOZWdhdGl2ZSgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIGlzTnVtZXJpY1ZhbHVlKCkgJiYgbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSA8IDAu
MDsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpuZWdhdGUoKQotewotICAg
IEFTU0VSVChpc051bWVyaWNWYWx1ZSgpKTsKLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZSgwLjAgLSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpLCBtX3ZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpOwotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmludmVydCgp
Ci17Ci0gICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVlKCkpOwotICAgIGlmICghbV92YWx1ZS0+ZG91
YmxlVmFsdWUoKSkKLSAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUo
c3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpLCBtX3ZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpOwotCi0gICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMS4w
IC8gbV92YWx1ZS0+ZG91YmxlVmFsdWUoKSwgbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKTsKLX0K
LQotdm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjphZGQoY29uc3QgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZSYgbm9kZSwgVW5pdENvbnZlcnNpb24gdW5pdENvbnZlcnNpb24pCi17Ci0g
ICAgYXV0byB2YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Ci0KLSAgICBzd2l0
Y2ggKHVuaXRDb252ZXJzaW9uKSB7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lvbjo6SW52YWxpZDoK
LSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug
VW5pdENvbnZlcnNpb246OlByZXNlcnZlOgotICAgICAgICBBU1NFUlQobm9kZS5wcmltaXRpdmVU
eXBlKCkgPT0gdmFsdWVUeXBlKTsKLSAgICAgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVl
OjpjcmVhdGUobV92YWx1ZS0+ZG91YmxlVmFsdWUoKSArIG5vZGUuZG91YmxlVmFsdWUodmFsdWVU
eXBlKSwgdmFsdWVUeXBlKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBVbml0Q29udmVyc2lv
bjo6Q2Fub25pY2FsaXplOiB7Ci0gICAgICAgIGF1dG8gdmFsdWVDYXRlZ29yeSA9IHVuaXRDYXRl
Z29yeSh2YWx1ZVR5cGUpOwotICAgICAgICAvLyBGSVhNRTogSXQncyBhd2t3YXJkIHRoYXQgY2Fu
b25pY2FsVW5pdFR5cGVGb3JDYXRlZ29yeSgpIGhhcyBzcGVjaWFsIGhhbmRsaW5nIGZvciBDU1NV
bml0Q2F0ZWdvcnk6OlBlcmNlbnQuCi0gICAgICAgIGF1dG8gY2Fub25pY2FsVHlwZSA9IHZhbHVl
Q2F0ZWdvcnkgPT0gQ1NTVW5pdENhdGVnb3J5OjpQZXJjZW50ID8gQ1NTVW5pdFR5cGU6OkNTU19Q
RVJDRU5UQUdFIDogY2Fub25pY2FsVW5pdFR5cGVGb3JDYXRlZ29yeSh2YWx1ZUNhdGVnb3J5KTsK
LSAgICAgICAgQVNTRVJUKGNhbm9uaWNhbFR5cGUgIT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dO
KTsKLSAgICAgICAgZG91YmxlIGxlZnRWYWx1ZSA9IG1fdmFsdWUtPmRvdWJsZVZhbHVlKGNhbm9u
aWNhbFR5cGUpOwotICAgICAgICBkb3VibGUgcmlnaHRWYWx1ZSA9IG5vZGUuZG91YmxlVmFsdWUo
Y2Fub25pY2FsVHlwZSk7Ci0gICAgICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3Jl
YXRlKGxlZnRWYWx1ZSArIHJpZ2h0VmFsdWUsIGNhbm9uaWNhbFR5cGUpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0gICAgfQotfQotCi12b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6Om11
bHRpcGx5KGRvdWJsZSBtdWx0aXBsaWVyKQotewotICAgIGF1dG8gdmFsdWVUeXBlID0gbV92YWx1
ZS0+cHJpbWl0aXZlVHlwZSgpOwotICAgIEFTU0VSVChoYXNEb3VibGVWYWx1ZSh2YWx1ZVR5cGUp
KTsKLSAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3Vi
bGVWYWx1ZSh2YWx1ZVR5cGUpICogbXVsdGlwbGllciwgdmFsdWVUeXBlKTsKLX0KLQotdm9pZCBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlwZSB1
bml0VHlwZSkKLXsKLSAgICBBU1NFUlQodW5pdENhdGVnb3J5KHVuaXRUeXBlKSA9PSB1bml0Q2F0
ZWdvcnkobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSk7Ci0gICAgZG91YmxlIG5ld1ZhbHVlID0g
bV92YWx1ZS0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOwotICAgIG1fdmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKG5ld1ZhbHVlLCB1bml0VHlwZSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZTo6Y2Fub25pY2FsaXplVW5pdCgpCi17Ci0gICAgYXV0byBjYXRlZ29y
eSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihtX3ZhbHVlLT5wcmltaXRpdmVU
eXBlKCkpOwotICAgIGlmIChjYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgYXV0byBjYW5vbmljYWxUeXBlID0gY2Fub25pY2FsVW5p
dFR5cGVGb3JDYWxjdWxhdGlvbkNhdGVnb3J5KGNhdGVnb3J5KTsKLSAgICBpZiAoY2Fub25pY2Fs
VHlwZSA9PSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGRvdWJsZSBuZXdWYWx1ZSA9IG1fdmFsdWUtPmRvdWJsZVZhbHVlKGNhbm9uaWNhbFR5cGUpOwot
ICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG5ld1ZhbHVlLCBjYW5vbmlj
YWxUeXBlKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Ci17Ci0gICAgc3dpdGNoIChj
YXRlZ29yeSgpKSB7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uTnVtYmVyPihtX3ZhbHVlLT5mbG9h
dFZhbHVlKCkpOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOgotICAgICAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVzc2lvbkxlbmd0aD4oTGVuZ3RoKG1fdmFsdWUt
PmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKSwgTGVuZ3RoVHlwZTo6Rml4ZWQp
KTsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOiB7Ci0gICAgICAgIHJldHVybiBtYWtlVW5p
cXVlPENhbGNFeHByZXNzaW9uTGVuZ3RoPihtX3ZhbHVlLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRG
bG9hdENvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpKTsKLSAg
ICB9Ci0gICAgLy8gT25seSB0eXBlcyB0aGF0IGNvdWxkIGJlIHBhcnQgb2YgYSBMZW5ndGggZXhw
cmVzc2lvbiBjYW4gYmUgY29udmVydGVkCi0gICAgLy8gdG8gYSBDYWxjRXhwcmVzc2lvbk5vZGUu
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIgbWFrZXMgbm8gc2Vuc2UgYXMgYSBM
ZW5ndGguCi0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpUaW1lOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5Ogot
ICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
bnVsbHB0cjsKLX0KLQotZG91YmxlIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAotewotICAgIGlmIChoYXNEb3VibGVWYWx1
ZSh1bml0VHlwZSkpIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIEFTU0VSVCh1bml0
Q2F0ZWdvcnkobV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpKSA9PSB1bml0Q2F0ZWdvcnkodW5pdFR5
cGUpKSwgYnV0IG9ubHkgd2hlbiBhbGwgY2FsbGVycyBhcmUgZml4ZWQgKGUuZy4gd2Via2l0Lm9y
Zy9iLzIwNDgyNikuCi0gICAgICAgIGlmICh1bml0Q2F0ZWdvcnkobV92YWx1ZS0+cHJpbWl0aXZl
VHlwZSgpKSAhPSB1bml0Q2F0ZWdvcnkodW5pdFR5cGUpKSB7Ci0gICAgICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJDYWxsaW5nIGRvdWJsZVZhbHVlKCkgd2l0aCB1bml0
ICIgPDwgdW5pdFR5cGUgPDwgIiBvbiBhIG5vZGUgb2YgdW5pdCB0eXBlICIgPDwgbV92YWx1ZS0+
cHJpbWl0aXZlVHlwZSgpIDw8ICIgd2hpY2ggaXMgaW5jb21wYXRpYmxlIik7Ci0gICAgICAgICAg
ICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBtX3ZhbHVlLT5kb3VibGVW
YWx1ZSh1bml0VHlwZSk7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiAwOwotfQotCi1kb3VibGUgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y29tcHV0ZUxl
bmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBj
b25zdAotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkoKSkgewotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TGVuZ3RoOgotICAgICAgICByZXR1cm4gbV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxk
b3VibGU+KGNvbnZlcnNpb25EYXRhKTsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQ6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAgICAgIHJl
dHVybiBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpOwotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRO
dW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZToKLSAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpG
cmVxdWVuY3k6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjoKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZCBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjpjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgbV92YWx1ZS0+Y29sbGVjdERp
cmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotdm9pZCBDU1NDYWxj
UHJpbWl0aXZlVmFsdWVOb2RlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRl
bmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fdmFs
dWUtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1ZXMpOwot
fQotCi1ib29sIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxj
RXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewotICAgIGlmICh0eXBlKCkgIT0gb3RoZXIu
dHlwZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gY29tcGFyZUNTU1Zh
bHVlKG1fdmFsdWUsIHN0YXRpY19jYXN0PGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUm
PihvdGhlcikubV92YWx1ZSk7Ci19Ci0KLXZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6
ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAidmFsdWUgIiA8PCBtX3Zh
bHVlLT5jdXN0b21DU1NUZXh0KCkgPDwgIiAoY2F0ZWdvcnk6ICIgPDwgY2F0ZWdvcnkoKSA8PCAi
LCB0eXBlOiAiIDw8IHByaW1pdGl2ZVR5cGUoKSA8PCAiKSI7Ci19Ci0KLWNsYXNzIENTU0NhbGNO
ZWdhdGVOb2RlIGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6
Ci0gICAgc3RhdGljIFJlZjxDU1NDYWxjTmVnYXRlTm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgY2hpbGQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBDU1NDYWxjTmVnYXRlTm9kZShXVEZNb3ZlKGNoaWxkKSkpOwotICAgIH0KLQotICAgIGNvbnN0
IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdl
dCgpOyB9Ci0gICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hp
bGQuZ2V0KCk7IH0KLQotICAgIHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4mJiBjaGlsZCkgeyBtX2NoaWxkID0gV1RGTW92ZShjaGlsZCk7IH0KLQotcHJpdmF0ZToKLSAg
ICBDU1NDYWxjTmVnYXRlTm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQot
ICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKLSAgICAg
ICAgLCBtX2NoaWxkKFdURk1vdmUoY2hpbGQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzWmVy
bygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9Ci0gICAgZG91Ymxl
IGRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdCBmaW5hbCB7IHJldHVybiAt
bV9jaGlsZC0+ZG91YmxlVmFsdWUodW5pdFR5cGUpOyB9Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5n
dGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29u
c3QgZmluYWwgeyByZXR1cm4gLW1fY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0
YSk7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDc3NDYWxj
TmVnYXRlOyB9Ci0gICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fY2hpbGQtPnByaW1pdGl2ZVR5cGUoKTsgfQotCi0gICAgdm9pZCBjb2xsZWN0RGly
ZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9w
ZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFs
RGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENv
bXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGll
cykgY29uc3QgZmluYWwgeyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0KLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikg
Y29uc3QgZmluYWw7Ci0KLSAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwot
fTsKLQotc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY05lZ2F0ZU5v
ZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEm
IGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIGF1dG8gY2hpbGROb2RlID0gbV9jaGlsZC0+
Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpOwotICAgIHJldHVybiBtYWtlVW5p
cXVlPENhbGNFeHByZXNzaW9uTmVnYXRpb24+KFdURk1vdmUoY2hpbGROb2RlKSk7Ci19Ci0KLXZv
aWQgQ1NTQ2FsY05lZ2F0ZU5vZGU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAg
dHMgPDwgIi0iIDw8IG1fY2hpbGQuZ2V0KCk7Ci19Ci0KLWNsYXNzIENTU0NhbGNJbnZlcnROb2Rl
IGZpbmFsIDogcHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIFJlZjxDU1NDYWxjSW52ZXJ0Tm9kZT4gY3JlYXRlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+JiYgY2hpbGQpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NDYWxj
SW52ZXJ0Tm9kZShXVEZNb3ZlKGNoaWxkKSkpOwotICAgIH0KLQotICAgIGNvbnN0IENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgY2hpbGQoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9Ci0g
ICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGlsZCgpIHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7
IH0KLQotICAgIHZvaWQgc2V0Q2hpbGQoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGls
ZCkgeyBtX2NoaWxkID0gV1RGTW92ZShjaGlsZCk7IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxj
SW52ZXJ0Tm9kZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKQotICAgICAgICA6
IENTU0NhbGNFeHByZXNzaW9uTm9kZShjaGlsZC0+Y2F0ZWdvcnkoKSkKLSAgICAgICAgLCBtX2No
aWxkKFdURk1vdmUoY2hpbGQpKQotICAgIHsKLSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
Q2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICBib29sIGlzWmVybygpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQtPmlzWmVybygpOyB9Ci0gICAgZG91YmxlIGRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlKSBjb25zdCBmaW5hbDsKLSAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKLSAgICBUeXBl
IHR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBUeXBlOjpDc3NDYWxjSW52ZXJ0OyB9Ci0gICAg
Q1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fY2hpbGQt
PnByaW1pdGl2ZVR5cGUoKTsgfQotCi0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25h
bERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBm
aW5hbCB7IG1fY2hpbGQtPmNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHBy
b3BlcnRpZXMpOyB9Ci0gICAgdm9pZCBjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBl
bmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwg
eyBtX2NoaWxkLT5jb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJv
cGVydGllcyk7IH0KLQotICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0K
LSAgICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotc3RkOjp1bmlx
dWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZUNhbGNF
eHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRh
KSBjb25zdAotewotICAgIGF1dG8gY2hpbGROb2RlID0gbV9jaGlsZC0+Y3JlYXRlQ2FsY0V4cHJl
c3Npb24oY29udmVyc2lvbkRhdGEpOwotICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNz
aW9uSW52ZXJzaW9uPihXVEZNb3ZlKGNoaWxkTm9kZSkpOwotfQotCi1kb3VibGUgQ1NTQ2FsY0lu
dmVydE5vZGU6OmRvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAotewotICAg
IGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKLSAgICBp
ZiAoIWNoaWxkVmFsdWUpCi0gICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJs
ZT46OmluZmluaXR5KCk7Ci0gICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7Ci19Ci0KLWRvdWJs
ZSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIGF1dG8gY2hpbGRWYWx1
ZSA9IG1fY2hpbGQtPmNvbXB1dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7Ci0gICAgaWYgKCFj
aGlsZFZhbHVlKQotICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+Ojpp
bmZpbml0eSgpOwotICAgIHJldHVybiAxLjAgLyBjaGlsZFZhbHVlOwotfQotCi12b2lkIENTU0Nh
bGNJbnZlcnROb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICIx
LyIgPDwgbV9jaGlsZC5nZXQoKTsKLX0KLQotLy8gVGhpcyBpcyB0aGUgcmVzdWx0IG9mIHRoZSAi
VG8gYWRkIHR3byB0eXBlcyB0eXBlMSBhbmQgdHlwZTIsIHBlcmZvcm0gdGhlIGZvbGxvd2luZyBz
dGVwczoiIHJ1bGVzLgotCi1zdGF0aWMgY29uc3QgQ2FsY3VsYXRpb25DYXRlZ29yeSBhZGRTdWJ0
cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5n
bGUpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGUpXSA9
IHsKLS8vICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAgICAgICAgIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Okxlbmd0aCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQgICAg
ICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIgIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnRMZW5ndGgKLSAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwgICAg
ICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyCi0gICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0
aAotICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudCwgICAg
ICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50Ci0gICAg
eyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlciwgICAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhl
ciB9LCAvLyAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIKLSAgICB7
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGggfSwgLy8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAotfTsKLQot
c3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5lQ2F0ZWdvcnkoY29uc3QgQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2lkZSwgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBy
aWdodFNpZGUsIENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5IGxl
ZnRDYXRlZ29yeSA9IGxlZnRTaWRlLmNhdGVnb3J5KCk7Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29y
eSByaWdodENhdGVnb3J5ID0gcmlnaHRTaWRlLmNhdGVnb3J5KCk7Ci0gICAgQVNTRVJUKGxlZnRD
YXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLSAgICBBU1NFUlQocmlnaHRD
YXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLQotICAgIHN3aXRjaCAob3Ap
IHsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpT
dWJ0cmFjdDoKLSAgICAgICAgaWYgKGxlZnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OkFuZ2xlICYmIHJpZ2h0Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKLSAg
ICAgICAgICAgIHJldHVybiBhZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bGVmdENhdGVnb3J5KV1bc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHJpZ2h0Q2F0ZWdvcnkpXTsKLSAg
ICAgICAgaWYgKGxlZnRDYXRlZ29yeSA9PSByaWdodENhdGVnb3J5KQotICAgICAgICAgICAgcmV0
dXJuIGxlZnRDYXRlZ29yeTsKLSAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKLSAgICAgICAgaWYgKGxlZnRD
YXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgJiYgcmlnaHRDYXRlZ29yeSAh
PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnkgPT0gQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyID8gcmlnaHRDYXRlZ29yeSA6IGxlZnRDYXRlZ29yeTsK
LSAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgotICAgICAgICBpZiAocmlnaHRDYXRlZ29y
eSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgcmlnaHRTaWRlLmlzWmVybygpKQot
ICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgICAgICBy
ZXR1cm4gbGVmdENhdGVnb3J5OwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46Ci0gICAgY2Fz
ZSBDYWxjT3BlcmF0b3I6Ok1heDoKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6Ci0gICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXI7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0
dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotfQotCi0vLyBGSVhNRTogTmVlZCB0byBp
bXBsZW1lbnQgY29ycmVjdCBjYXRlZ29yeSBjb21wdXRhdGlvbiBwZXI6Ci0vLyA8aHR0cHM6Ly9k
cmFmdHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1lcmljdmFsdWUtaW52
ZXJ0LWEtdHlwZT4KLS8vIFRvIGludmVydCBhIHR5cGUgdHlwZSwgcGVyZm9ybSB0aGUgZm9sbG93
aW5nIHN0ZXBzOgotLy8gTGV0IHJlc3VsdCBiZSBhIG5ldyB0eXBlIHdpdGggYW4gaW5pdGlhbGx5
IGVtcHR5IG9yZGVyZWQgbWFwIGFuZCBhbiBpbml0aWFsbHkgbnVsbCBwZXJjZW50IGhpbnQKLS8v
IEZvciBlYWNoIHVuaXQg4oaSIGV4cG9uZW50IG9mIHR5cGUsIHNldCByZXN1bHRbdW5pdF0gdG8g
KC0xICogZXhwb25lbnQpLgotc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnlGb3JJ
bnZlcnQoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKLXsKLSAgICByZXR1cm4gY2F0ZWdv
cnk7Ci19Ci0KLXN0YXRpYyBDYWxjdWxhdGlvbkNhdGVnb3J5IGRldGVybWluZUNhdGVnb3J5KGNv
bnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzLCBDYWxjT3BlcmF0
b3Igb3ApCi17Ci0gICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotCi0gICAgYXV0byBjdXJyZW50Q2F0ZWdvcnkgPSBub2Rl
c1swXS0+Y2F0ZWdvcnkoKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBub2Rlcy5z
aXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBhdXRvJiBub2RlID0gbm9kZXNbaV0uZ2V0KCk7
Ci0gICAgICAgIAotICAgICAgICBhdXRvIHVzZWRPcGVyYXRvciA9IG9wOwotICAgICAgICBpZiAo
bm9kZS50eXBlKCkgPT0gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0
KQotICAgICAgICAgICAgdXNlZE9wZXJhdG9yID0gQ2FsY09wZXJhdG9yOjpEaXZpZGU7Ci0KLSAg
ICAgICAgYXV0byBuZXh0Q2F0ZWdvcnkgPSBub2RlLmNhdGVnb3J5KCk7Ci0KLSAgICAgICAgc3dp
dGNoICh1c2VkT3BlcmF0b3IpIHsKLSAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDoKLSAg
ICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OgotICAgICAgICAgICAgLy8gPGh0dHBz
Oi8vZHJhZnRzLmNzcy1ob3VkaW5pLm9yZy9jc3MtdHlwZWQtb20tMS8jY3NzbnVtZXJpY3ZhbHVl
LWFkZC10d28tdHlwZXM+Ci0gICAgICAgICAgICAvLyBBdCBhICsgb3IgLSBzdWItZXhwcmVzc2lv
biwgYXR0ZW1wdCB0byBhZGQgdGhlIHR5cGVzIG9mIHRoZSBsZWZ0IGFuZCByaWdodCBhcmd1bWVu
dHMuCi0gICAgICAgICAgICAvLyBJZiB0aGlzIHJldHVybnMgZmFpbHVyZSwgdGhlIGVudGlyZSBj
YWxjdWxhdGlvbuKAmXMgdHlwZSBpcyBmYWlsdXJlLiBPdGhlcndpc2UsIHRoZSBzdWItZXhwcmVz
c2lvbuKAmXMgdHlwZSBpcyB0aGUgcmV0dXJuZWQgdHlwZS4KLSAgICAgICAgICAgIGlmIChjdXJy
ZW50Q2F0ZWdvcnkgPCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSAmJiBuZXh0Q2F0ZWdvcnkg
PCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZSkKLSAgICAgICAgICAgICAgICBjdXJyZW50Q2F0
ZWdvcnkgPSBhZGRTdWJ0cmFjdFJlc3VsdFtzdGF0aWNfY2FzdDx1bnNpZ25lZD4oY3VycmVudENh
dGVnb3J5KV1bc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5leHRDYXRlZ29yeSldOwotICAgICAgICAg
ICAgZWxzZSBpZiAoY3VycmVudENhdGVnb3J5ICE9IG5leHRDYXRlZ29yeSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Ci0gICAgICAgICAgICBicmVh
azsKLQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6Ci0gICAgICAgICAgICAv
LyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3NudW1l
cmljdmFsdWUtbXVsdGlwbHktdHdvLXR5cGVzPgotICAgICAgICAgICAgLy8gQXQgYSAqIHN1Yi1l
eHByZXNzaW9uLCBtdWx0aXBseSB0aGUgdHlwZXMgb2YgdGhlIGxlZnQgYW5kIHJpZ2h0IGFyZ3Vt
ZW50cy4gVGhlIHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1cm5lZCByZXN1bHQu
Ci0gICAgICAgICAgICBpZiAoY3VycmVudENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlciAmJiBuZXh0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQot
ICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKLQotICAg
ICAgICAgICAgY3VycmVudENhdGVnb3J5ID0gY3VycmVudENhdGVnb3J5ID09IENhbGN1bGF0aW9u
Q2F0ZWdvcnk6Ok51bWJlciA/IG5leHRDYXRlZ29yeSA6IGN1cnJlbnRDYXRlZ29yeTsKLSAgICAg
ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6IHsKLSAg
ICAgICAgICAgIGF1dG8gaW52ZXJ0Q2F0ZWdvcnkgPSBjYXRlZ29yeUZvckludmVydChuZXh0Q2F0
ZWdvcnkpOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBBdCBhIC8gc3ViLWV4cHJlc3Np
b24sIGxldCBsZWZ0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBp
dHMgbGVmdCBhcmd1bWVudCwKLSAgICAgICAgICAgIC8vIGFuZCByaWdodCB0eXBlIGJlIHRoZSBy
ZXN1bHQgb2YgZmluZGluZyB0aGUgdHlwZXMgb2YgaXRzIHJpZ2h0IGFyZ3VtZW50IGFuZCB0aGVu
IGludmVydGluZyBpdC4KLSAgICAgICAgICAgIC8vIFRoZSBzdWItZXhwcmVzc2lvbuKAmXMgdHlw
ZSBpcyB0aGUgcmVzdWx0IG9mIG11bHRpcGx5aW5nIHRoZSBsZWZ0IHR5cGUgYW5kIHJpZ2h0IHR5
cGUuCi0gICAgICAgICAgICBpZiAoaW52ZXJ0Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6TnVtYmVyIHx8IG5vZGUuaXNaZXJvKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQot
ICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgotICAgICAgICBjYXNlIENhbGNPcGVyYXRv
cjo6TWF4OgotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6Ci0gICAgICAgICAgICAv
LyBUaGUgdHlwZSBvZiBhIG1pbigpLCBtYXgoKSwgb3IgY2xhbXAoKSBleHByZXNzaW9uIGlzIHRo
ZSByZXN1bHQgb2YgYWRkaW5nIHRoZSB0eXBlcyBvZiBpdHMgY29tbWEtc2VwYXJhdGVkIGNhbGN1
bGF0aW9ucwotICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGN1cnJlbnRDYXRlZ29yeTsKLX0KLQotc3Rh
dGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgcmVzb2x2ZWRUeXBlRm9yTWluT3JNYXhPckNsYW1wKENh
bGN1bGF0aW9uQ2F0ZWdvcnkgY2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRp
b25DYXRlZ29yeSkKLXsKLSAgICBzd2l0Y2ggKGNhdGVnb3J5KSB7Ci0gICAgY2FzZSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5n
dGg6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgotICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKLSAgICBjYXNlIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OkFuZ2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZToK
LSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgotICAgICAgICByZXR1cm4gY2F0ZWdvcnk7Ci0KLSAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnQ6Ci0gICAgICAgIGlmIChkZXN0aW5hdGlv
bkNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCkKLSAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOwotICAgICAgICBpZiAoZGVz
dGluYXRpb25DYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAg
ICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjsKLSAgICAgICAg
cmV0dXJuIGNhdGVnb3J5OwotICAgIH0KLQotICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpPdGhlcjsKLX0KLQotc3RhdGljIGJvb2wgaXNTYW1lUGFpcihDYWxjdWxhdGlvbkNhdGVnb3J5
IGEsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgYiwgQ2FsY3VsYXRpb25DYXRlZ29yeSB4LCBDYWxjdWxh
dGlvbkNhdGVnb3J5IHkpCi17Ci0gICAgcmV0dXJuIChhID09IHggJiYgYiA9PSB5KSB8fCAoYSA9
PSB5ICYmIGIgPT0geCk7Ci19Ci0KLWNsYXNzIENTU0NhbGNPcGVyYXRpb25Ob2RlIGZpbmFsIDog
cHVibGljIENTU0NhbGNFeHByZXNzaW9uTm9kZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3Jl
YXRlKENhbGNPcGVyYXRvciwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBsZWZ0U2lk
ZSwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByaWdodFNpZGUpOwotICAgIHN0YXRp
YyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZVN1bShWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKTsKLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNP
cGVyYXRpb25Ob2RlPiBjcmVhdGVQcm9kdWN0KFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4mJiB2YWx1ZXMpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+
IGNyZWF0ZU1pbk9yTWF4T3JDbGFtcChDYWxjT3BlcmF0b3IsIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4mJiB2YWx1ZXMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25D
YXRlZ29yeSk7Ci0KLSAgICBzdGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxp
ZnkoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJik7Ci0KLSAgICBzdGF0aWMgdm9pZCBidWls
ZENTU1RleHQoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiwgU3RyaW5nQnVpbGRlciYpOwot
Ci0gICAgQ2FsY09wZXJhdG9yIGNhbGNPcGVyYXRvcigpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmF0
b3I7IH0KLSAgICBib29sIGlzQ2FsY1N1bU5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9y
ID09IENhbGNPcGVyYXRvcjo6QWRkOyB9Ci0gICAgYm9vbCBpc0NhbGNQcm9kdWN0Tm9kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsgfQotICAg
IGJvb2wgaXNNaW5Pck1heE5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNP
cGVyYXRvcjo6TWluIHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXg7IH0KLSAgICBi
b29sIHNob3VsZFNvcnRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIGlzQ2FsY1N1bU5vZGUoKSB8
fCBpc0NhbGNQcm9kdWN0Tm9kZSgpOyB9Ci0KLSAgICB2b2lkIGhvaXN0Q2hpbGRyZW5XaXRoT3Bl
cmF0b3IoQ2FsY09wZXJhdG9yKTsKLSAgICB2b2lkIGNvbWJpbmVDaGlsZHJlbigpOwotICAgIAot
ICAgIGJvb2wgY2FuQ29tYmluZUFsbENoaWxkcmVuKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBWZWN0
b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
IG1fY2hpbGRyZW47IH0KLSAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBj
aGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KLQotcHJpdmF0ZToKLSAgICBDU1NDYWxj
T3BlcmF0aW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5LCBDYWxjT3BlcmF0b3Ig
b3AsIFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQotICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9k
ZShjYXRlZ29yeSkKLSAgICAgICAgLCBtX29wZXJhdG9yKG9wKQotICAgIHsKLSAgICAgICAgbV9j
aGlsZHJlbi5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDIpOwotICAgICAgICBtX2NoaWxkcmVuLnVu
Y2hlY2tlZEFwcGVuZChXVEZNb3ZlKGxlZnRTaWRlKSk7Ci0gICAgICAgIG1fY2hpbGRyZW4udW5j
aGVja2VkQXBwZW5kKFdURk1vdmUocmlnaHRTaWRlKSk7Ci0gICAgfQotCi0gICAgQ1NTQ2FsY09w
ZXJhdGlvbk5vZGUoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9w
LCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4pCi0gICAgICAg
IDogQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlKGNhdGVnb3J5KQotICAgICAgICAsIG1fb3BlcmF0b3Io
b3ApCi0gICAgICAgICwgbV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKLSAgICB7Ci0gICAg
fQotCi0gICAgVHlwZSB0eXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gQ3NzQ2FsY09wZXJhdGlv
bjsgfQotCi0gICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgcmV0
dXJuICFkb3VibGVWYWx1ZShwcmltaXRpdmVUeXBlKCkpOwotICAgIH0KLQotICAgIGJvb2wgZXF1
YWxzKGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOwotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0IGZpbmFsOwotCi0gICAgQ1NTVW5p
dFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsOwotICAgIGRvdWJsZSBkb3VibGVWYWx1
ZShDU1NVbml0VHlwZSkgY29uc3QgZmluYWw7Ci0gICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChj
b25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7Ci0KLSAgICB2b2lk
IGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4mKSBjb25zdCBmaW5hbDsKLSAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRp
b25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7Ci0K
LSAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgc3RhdGljIENT
U0NhbGNFeHByZXNzaW9uTm9kZSogZ2V0TnVtYmVyU2lkZShDU1NDYWxjRXhwcmVzc2lvbk5vZGUm
IGxlZnRTaWRlLCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJpZ2h0U2lkZSkKLSAgICB7Ci0gICAg
ICAgIGlmIChsZWZ0U2lkZS5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJl
cikKLSAgICAgICAgICAgIHJldHVybiAmbGVmdFNpZGU7Ci0gICAgICAgIGlmIChyaWdodFNpZGUu
Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCi0gICAgICAgICAgICBy
ZXR1cm4gJnJpZ2h0U2lkZTsKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQotCi0gICAg
ZG91YmxlIGV2YWx1YXRlKGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBldmFsdWF0ZU9wZXJhdG9yKG1fb3BlcmF0b3IsIGNoaWxkcmVu
KTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgZG91YmxlIGV2YWx1YXRlT3BlcmF0b3IoQ2FsY09wZXJh
dG9yLCBjb25zdCBWZWN0b3I8ZG91YmxlPiYpOwotICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50
IGRlcHRoKTsKLSAgICBzdGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlS
ZWN1cnNpdmUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiwgaW50IGRlcHRoKTsKLSAgICAK
LSAgICBlbnVtIGNsYXNzIEdyb3VwaW5nUGFyZW5zIHsKLSAgICAgICAgT21pdCwKLSAgICAgICAg
SW5jbHVkZQotICAgIH07Ci0gICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNv
bnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYsIFN0cmluZ0J1aWxkZXImLCBHcm91cGluZ1BhcmVu
cyA9IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKTsKLQotICAgIENhbGNPcGVyYXRvciBtX29wZXJh
dG9yOwotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbV9jaGlsZHJlbjsK
LX07Ci0KLVJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6
OmNyZWF0ZShDYWxjT3BlcmF0b3Igb3AsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
bGVmdFNpZGUsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQotewot
ICAgIGlmICghbGVmdFNpZGUgfHwgIXJpZ2h0U2lkZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0KLSAgICBBU1NFUlQob3AgPT0gQ2FsY09wZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJh
dG9yOjpNdWx0aXBseSk7Ci0KLSAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcik7Ci0gICAgQVNTRVJUKHJpZ2h0U2lkZS0+Y2F0ZWdvcnko
KSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKLQotICAgIGF1dG8gbmV3Q2F0ZWdvcnkg
PSBkZXRlcm1pbmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKLSAgICBpZiAo
bmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1NDYWxjT3Bl
cmF0aW9uTm9kZSAiIDw8IG9wIDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUg
Y2F0ZWdvcnkgZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZSgqbGVmdFNpZGUpIDw8ICIgYW5kICIg
PDwgKnJpZ2h0U2lkZSk7Ci0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIH0KLQotICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIG9wLCBs
ZWZ0U2lkZS5yZWxlYXNlTm9uTnVsbCgpLCByaWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSkpOwot
fQotCi1SZWZQdHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpj
cmVhdGVTdW0oVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKLXsK
LSAgICBpZiAodmFsdWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0
b3I6OkFkZCk7Ci0gICAgaWYgKG5ld0NhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyKSB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0
byBjcmVhdGUgc3VtIG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZy
b20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOwotICAgICAgICBuZXdDYXRlZ29yeSA9
IGRldGVybWluZUNhdGVnb3J5KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpBZGQpOwotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNP
cGVyYXRpb25Ob2RlKG5ld0NhdGVnb3J5LCBDYWxjT3BlcmF0b3I6OkFkZCwgV1RGTW92ZSh2YWx1
ZXMpKSk7Ci19Ci0KLVJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlv
bk5vZGU6OmNyZWF0ZVByb2R1Y3QoVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYm
IHZhbHVlcykKLXsKLSAgICBpZiAodmFsdWVzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0KLSAgICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVz
LCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKLSAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0
cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBwcm9kdWN0IG5vZGUgYmVjYXVzZSB1bmFibGUgdG8g
ZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOwot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3
IENTU0NhbGNPcGVyYXRpb25Ob2RlKG5ld0NhdGVnb3J5LCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5
LCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQotUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBD
U1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciBv
cCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRp
b25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQotewotICAgIEFTU0VSVChvcCA9PSBDYWxj
T3BlcmF0b3I6Ok1pbiB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok1heCB8fCBvcCA9PSBDYWxjT3Bl
cmF0b3I6OkNsYW1wKTsKLSAgICBBU1NFUlRfSU1QTElFUyhvcCA9PSBDYWxjT3BlcmF0b3I6OkNs
YW1wLCB2YWx1ZXMuc2l6ZSgpID09IDMpOwotCi0gICAgT3B0aW9uYWw8Q2FsY3VsYXRpb25DYXRl
Z29yeT4gY2F0ZWdvcnkgPSBzdGQ6Om51bGxvcHQ7Ci0gICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZh
bHVlcykgewotICAgICAgICBhdXRvIHZhbHVlQ2F0ZWdvcnkgPSByZXNvbHZlZFR5cGVGb3JNaW5P
ck1heE9yQ2xhbXAodmFsdWUtPmNhdGVnb3J5KCksIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotCi0g
ICAgICAgIEFTU0VSVCh2YWx1ZUNhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIp
OwotICAgICAgICBpZiAoIWNhdGVnb3J5KSB7Ci0gICAgICAgICAgICBpZiAodmFsdWVDYXRlZ29y
eSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICAgICAgICAgIExPR19X
SVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJh
dGlvbk5vZGUgIiA8PCBvcCA8PCAiIG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNh
dGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2F0ZWdvcnkg
PSB2YWx1ZUNhdGVnb3J5OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHZh
bHVlQ2F0ZWdvcnkpIHsKLSAgICAgICAgICAgIGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVl
KCksIHZhbHVlQ2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCkpIHsKLSAgICAgICAgICAgICAgICBjYXRlZ29yeSA9
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg7Ci0gICAgICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29y
eS52YWx1ZSgpLCB2YWx1ZUNhdGVnb3J5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIpKSB7Ci0gICAgICAgICAgICAgICAgY2F0
ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOwotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVy
YXRpb25Ob2RlKGNhdGVnb3J5LnZhbHVlKCksIG9wLCBXVEZNb3ZlKHZhbHVlcykpKTsKLX0KLQot
dm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxj
T3BlcmF0b3Igb3ApCi17Ci0gICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6QWRkIHx8IG9w
ID09IENhbGNPcGVyYXRvcjo6TXVsdGlwbHkpOwotCi0gICAgYXV0byBoYXNDaGlsZFdpdGhPcGVy
YXRvciA9IFsmXSAoQ2FsY09wZXJhdG9yIG9wKSB7Ci0gICAgICAgIGZvciAoYXV0byYgY2hpbGQg
OiBtX2NoaWxkcmVuKSB7Ci0gICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+
KGNoaWxkLmdldCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0
KCkpLmNhbGNPcGVyYXRvcigpID09IG9wKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9OwotCi0gICAgaWYgKCFoYXND
aGlsZFdpdGhPcGVyYXRvcihvcCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFZlY3RvcjxSZWY8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgZm9yIChhdXRvJiBjaGls
ZCA6IG1fY2hpbGRyZW4pIHsKLSAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihj
aGlsZC5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgp
KS5jYWxjT3BlcmF0b3IoKSA9PSBvcCkgewotICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBk
b3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7Ci0g
ICAgICAgICAgICBmb3IgKGF1dG8mIGNoaWxkVG9Nb3ZlIDogY2hpbGRyZW4pCi0gICAgICAgICAg
ICAgICAgbmV3Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKLSAgICAgICAg
fSBlbHNlCi0gICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOwot
ICAgIH0KLSAgICAKLSAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwotICAgIG1fY2hpbGRy
ZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKLX0KLQotZW51bSBjbGFzcyBTb3J0aW5nQ2F0ZWdv
cnkgewotICAgIE51bWJlciwKLSAgICBQZXJjZW50LAotICAgIERpbWVuc2lvbiwKLSAgICBPdGhl
cgotfTsKLQotc3RhdGljIFNvcnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnlGb3JUeXBlKENT
U1VuaXRUeXBlIHVuaXRUeXBlKQotewotICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGluZ0NhdGVn
b3J5IHNvcnRPcmRlcltdID0gewotICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAg
ICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwKLSAgICAgICAgU29ydGluZ0NhdGVn
b3J5OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsCi0gICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6UGVyY2VudCwgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudCwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLAotICAgICAgICBTb3J0aW5nQ2F0ZWdv
cnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgs
Ci0gICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGUsCi0gICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAg
Ly8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZSwKLSAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpE
aW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3ksCi0gICAgICAg
IFNvcnRpbmdDYXRlZ29yeTo6T3RoZXIsICAgICAgICAgLy8gVU90aGVyCi0gICAgfTsKLQotICAg
IENPTVBJTEVfQVNTRVJUKEFSUkFZX1NJWkUoc29ydE9yZGVyKSA9PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpICsgMSwgc29ydE9yZGVyX3NpemVfc2hv
dWxkX21hdGNoX1VuaXRDYXRlZ29yeSk7Ci0gICAgcmV0dXJuIHNvcnRPcmRlcltzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oY2FsY1VuaXRDYXRlZ29yeSh1bml0VHlwZSkpXTsKLX0KLQotc3RhdGljIFNv
cnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
JiBub2RlKQotewotICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkK
LSAgICAgICAgcmV0dXJuIHNvcnRpbmdDYXRlZ29yeUZvclR5cGUobm9kZS5wcmltaXRpdmVUeXBl
KCkpOwotCi0gICAgcmV0dXJuIFNvcnRpbmdDYXRlZ29yeTo6T3RoZXI7Ci19Ci0KLXN0YXRpYyBD
U1NVbml0VHlwZSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24oY29uc3QgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlJiBub2RlKQotewotICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
Pihub2RlKSkKLSAgICAgICAgcmV0dXJuIG5vZGUucHJpbWl0aXZlVHlwZSgpOwotICAgIAotICAg
IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Ci19Ci0KLXN0YXRpYyBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbiBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRo
VHlwZXMoQ1NTVW5pdFR5cGUgZmlyc3RUeXBlLCBDU1NVbml0VHlwZSBzZWNvbmRUeXBlKQotewot
ICAgIGlmIChmaXJzdFR5cGUgPT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOIHx8IHNlY29uZFR5
cGUgPT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOKQotICAgICAgICByZXR1cm4gQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7Ci0KLSAgICBhdXRvIGZp
cnN0Q2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oZmlyc3RUeXBl
KTsKLQotICAgIC8vIENvbXBhdGlibGUgdHlwZXMuCi0gICAgaWYgKGZpcnN0Q2F0ZWdvcnkgIT0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgJiYgZmlyc3RDYXRlZ29yeSA9PSBjYWxjdWxhdGlv
bkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oc2Vjb25kVHlwZSkpCi0gICAgICAgIHJldHVybiBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOwotCi0g
ICAgLy8gTWF0Y2hpbmcgdHlwZXMuCi0gICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlICYm
IGhhc0RvdWJsZVZhbHVlKGZpcnN0VHlwZSkpCi0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6UHJlc2VydmU7Ci0KLSAgICByZXR1cm4gQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7Ci19Ci0KLWJv
b2wgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNvbnN0Ci17
Ci0gICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpIDwgMikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihtX2NoaWxkcmVuWzBdKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byBmaXJzdFVuaXRUeXBlID0gbV9jaGls
ZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOwotICAgIGF1dG8gZmlyc3RDYXRlZ29yeSA9IGNhbGN1
bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBl
KCkpOwotCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgYXV0byYgbm9kZSA9IG1fY2hpbGRyZW5baV07Ci0KLSAgICAgICAgaWYg
KCFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBhdXRvIG5vZGVVbml0VHlwZSA9IG5vZGUtPnByaW1pdGl2ZVR5
cGUoKTsKLSAgICAgICAgYXV0byBub2RlQ2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9y
Q29tYmluYXRpb24obm9kZVVuaXRUeXBlKTsKLQotICAgICAgICBpZiAobm9kZUNhdGVnb3J5ICE9
IGZpcnN0Q2F0ZWdvcnkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KG5vZGVDYXRlZ29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlciAmJiBub2RlVW5pdFR5
cGUgIT0gZmlyc3RVbml0VHlwZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIGlmICghaGFzRG91YmxlVmFsdWUobm9kZVVuaXRUeXBlKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6Y29tYmluZUNoaWxkcmVuKCkKLXsKLSAgICBpZiAobV9jaGlsZHJl
bi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoc2hvdWxkU29ydENoaWxk
cmVuKCkpIHsKLSAgICAgICAgLy8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVz
LTQvI3NvcnQtYS1jYWxjdWxhdGlvbnMtY2hpbGRyZW4+Ci0gICAgICAgIHN0ZDo6c3RhYmxlX3Nv
cnQobV9jaGlsZHJlbi5iZWdpbigpLCBtX2NoaWxkcmVuLmVuZCgpLCBbXShjb25zdCBhdXRvJiBm
aXJzdCwgY29uc3QgYXV0byYgc2Vjb25kKSB7Ci0gICAgICAgICAgICAvLyBTb3J0IG9yZGVyOiBu
dW1iZXIsIHBlcmNlbnRhZ2UsIGRpbWVuc2lvbiwgb3RoZXIuCi0gICAgICAgICAgICBTb3J0aW5n
Q2F0ZWdvcnkgZmlyc3RDYXRlZ29yeSA9IHNvcnRpbmdDYXRlZ29yeShmaXJzdC5nZXQoKSk7Ci0g
ICAgICAgICAgICBTb3J0aW5nQ2F0ZWdvcnkgc2Vjb25kQ2F0ZWdvcnkgPSBzb3J0aW5nQ2F0ZWdv
cnkoc2Vjb25kLmdldCgpKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGZpcnN0Q2F0
ZWdvcnkgPT0gU29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24gJiYgc2Vjb25kQ2F0ZWdvcnkgPT0g
U29ydGluZ0NhdGVnb3J5OjpEaW1lbnNpb24pIHsKLSAgICAgICAgICAgICAgICAvLyBJZiBub2Rl
cyBjb250YWlucyBhbnkgZGltZW5zaW9ucywgcmVtb3ZlIHRoZW0gZnJvbSBub2Rlcywgc29ydCB0
aGVtIGJ5IHRoZWlyIHVuaXRzLCBhbmQgYXBwZW5kIHRoZW0gdG8gcmV0LgotICAgICAgICAgICAg
ICAgIGF1dG8gZmlyc3RVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6OnVuaXRUeXBlU3Ry
aW5nKGZpcnN0LT5wcmltaXRpdmVUeXBlKCkpOwotICAgICAgICAgICAgICAgIGF1dG8gc2Vjb25k
VW5pdFN0cmluZyA9IENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyhzZWNvbmQtPnBy
aW1pdGl2ZVR5cGUoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGNvZGVQb2ludENvbXBhcmVM
ZXNzVGhhbihmaXJzdFVuaXRTdHJpbmcsIHNlY29uZFVuaXRTdHJpbmcpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGZpcnN0Q2F0ZWdv
cnkpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHNlY29uZENhdGVnb3J5KTsKLSAgICAgICAgfSk7
Ci0KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAicG9zdC1zb3J0OiAi
IDw8ICp0aGlzKTsKLSAgICB9Ci0KLSAgICBpZiAoY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJh
dG9yOjpBZGQpIHsKLSAgICAgICAgLy8gRm9yIGVhY2ggc2V0IG9mIHJvb3TigJlzIGNoaWxkcmVu
IHRoYXQgYXJlIG51bWVyaWMgdmFsdWVzIHdpdGggaWRlbnRpY2FsIHVuaXRzLAotICAgICAgICAv
LyByZW1vdmUgdGhvc2UgY2hpbGRyZW4gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEgc2luZ2xlIG51
bWVyaWMgdmFsdWUgY29udGFpbmluZwotICAgICAgICAvLyB0aGUgc3VtIG9mIHRoZSByZW1vdmVk
IG5vZGVzLCBhbmQgd2l0aCB0aGUgc2FtZSB1bml0LgotICAgICAgICBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+IG5ld0NoaWxkcmVuOwotICAgICAgICBuZXdDaGlsZHJlbi5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6ZSgpKTsKLSAgICAgICAgbmV3Q2hpbGRy
ZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW5bMF0uY29weVJlZigpKTsKLQotICAgICAgICBD
U1NVbml0VHlwZSBwcmV2aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obmV3
Q2hpbGRyZW5bMF0uZ2V0KCkpOwotCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBt
X2NoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBjdXJyZW50Tm9kZSA9
IG1fY2hpbGRyZW5baV07Ci0gICAgICAgICAgICBDU1NVbml0VHlwZSBjdXJyZW50VHlwZSA9IHBy
aW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihjdXJyZW50Tm9kZS5nZXQoKSk7Ci0KLSAgICAgICAg
ICAgIGF1dG8gY29udmVyc2lvblR5cGUgPSBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRoVHlwZXMo
cHJldmlvdXNUeXBlLCBjdXJyZW50VHlwZSk7Ci0gICAgICAgICAgICBpZiAoY29udmVyc2lvblR5
cGUgIT0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQp
IHsKLSAgICAgICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihu
ZXdDaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLmFkZChkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlPihjdXJyZW50Tm9kZS5nZXQoKSksIGNvbnZlcnNpb25UeXBlKTsKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHJldmlvdXNUeXBl
ID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKGN1cnJlbnROb2RlKTsKLSAgICAgICAgICAg
IG5ld0NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChjdXJyZW50Tm9kZS5jb3B5UmVmKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIAotICAgICAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOwotICAg
ICAgICBtX2NoaWxkcmVuID0gV1RGTW92ZShuZXdDaGlsZHJlbik7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoY2FsY09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eSkgewotICAgICAgICAvLyBJZiByb290IGhhcyBtdWx0aXBsZSBjaGlsZHJlbiB0aGF0IGFyZSBu
dW1iZXJzIChub3QgcGVyY2VudGFnZXMgb3IgZGltZW5zaW9ucyksCi0gICAgICAgIC8vIHJlbW92
ZSB0aGVtIGFuZCByZXBsYWNlIHRoZW0gd2l0aCBhIHNpbmdsZSBudW1iZXIgY29udGFpbmluZyB0
aGUgcHJvZHVjdCBvZiB0aGUgcmVtb3ZlZCBub2Rlcy4KLSAgICAgICAgZG91YmxlIG11bHRpcGxp
ZXIgPSAxOwotCi0gICAgICAgIC8vIFNvcnRpbmcgd2lsbCBoYXZlIHB1dCB0aGUgbnVtYmVyIG5v
ZGVzIGZpcnN0LgotICAgICAgICB1bnNpZ25lZCBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID0gMDsK
LSAgICAgICAgZm9yIChhdXRvJiBub2RlIDogbV9jaGlsZHJlbikgewotICAgICAgICAgICAgYXV0
byBub2RlVHlwZSA9IHByaW1pdGl2ZVR5cGVGb3JDb21iaW5hdGlvbihub2RlLmdldCgpKTsKLSAg
ICAgICAgICAgIGlmIChub2RlVHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUikKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgbXVsdGlwbGllciAq
PSBub2RlLT5kb3VibGVWYWx1ZShDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7Ci0gICAgICAgICAg
ICArK2xlYWRpbmdOdW1iZXJOb2RlQ291bnQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47Ci0gICAgICAg
IG5ld0NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5zaXplKCkpOwot
ICAgICAgICAKLSAgICAgICAgLy8gSWYgcm9vdCBjb250YWlucyBvbmx5IHR3byBjaGlsZHJlbiwg
b25lIG9mIHdoaWNoIGlzIGEgbnVtYmVyIChub3QgYSBwZXJjZW50YWdlIG9yIGRpbWVuc2lvbikg
YW5kIHRoZSBvdGhlciBvZgotICAgICAgICAvLyB3aGljaCBpcyBhIFN1bSB3aG9zZSBjaGlsZHJl
biBhcmUgYWxsIG51bWVyaWMgdmFsdWVzLCBtdWx0aXBseSBhbGwgb2YgdGhlIFN1beKAmXMgY2hp
bGRyZW4gYnkgdGhlIG51bWJlciwgdGhlbgotICAgICAgICAvLyByZXR1cm4gdGhlIFN1bS4KLSAg
ICAgICAgLy8gVGhlIFN1bSdzIGNoaWxkcmVuIHNpbXBsaWZpY2F0aW9uIHdpbGwgaGF2ZSBoYXBw
ZW5lZCBhbHJlYWR5LgotICAgICAgICBib29sIGRpZE11bHRpcGx5ID0gZmFsc2U7Ci0gICAgICAg
IGlmIChsZWFkaW5nTnVtYmVyTm9kZUNvdW50ICYmIG1fY2hpbGRyZW4uc2l6ZSgpIC0gbGVhZGlu
Z051bWJlck5vZGVDb3VudCA9PSAxKSB7Ci0gICAgICAgICAgICBhdXRvIG11bHRpcGxpY2FuZENh
dGVnb3J5ID0gY2FsY1VuaXRDYXRlZ29yeShwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24obV9j
aGlsZHJlbi5sYXN0KCkuZ2V0KCkpKTsKLSAgICAgICAgICAgIGlmIChtdWx0aXBsaWNhbmRDYXRl
Z29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgewotICAgICAgICAgICAgICAgIG5l
d0NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChtX2NoaWxkcmVuLmxhc3QoKS5jb3B5UmVmKCkpOwot
ICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0No
aWxkcmVuWzBdLmdldCgpKS5tdWx0aXBseShtdWx0aXBsaWVyKTsKLSAgICAgICAgICAgICAgICBk
aWRNdWx0aXBseSA9IHRydWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGlzPENTU0NhbGNPcGVy
YXRpb25Ob2RlPihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09w
ZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKS5jYWxjT3BlcmF0b3IoKSA9PSBD
YWxjT3BlcmF0b3I6OkFkZCkgewotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIG11bHRpcGx5
aW5nIHdpdGggYW5vdGhlciBvcGVyYXRpb24gdGhhdCBpcyBhbiBhZGRpdGlvbiBhbmQgYWxsIHRo
ZSBhZGRlZCBjaGlsZHJlbgotICAgICAgICAgICAgICAgIC8vIGFyZSBwZXJjZW50YWdlcyBvciBk
aW1lbnNpb25zLCB3ZSBzaG91bGQgbXVsdGlwbHkgZWFjaCBjaGlsZCBhbmQgbWFrZSB0aGlzIGV4
cHJlc3Npb24gYW4KLSAgICAgICAgICAgICAgICAvLyBhZGRpdGlvbi4KLSAgICAgICAgICAgICAg
ICBhdXRvIGFsbENoaWxkcmVuQXJlUHJpbWl0aXZlVmFsdWVzID0gW10oY29uc3QgVmVjdG9yPFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4pIC0+IGJvb2wKLSAgICAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikg
ewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPihjaGlsZC5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICAgICAgICAgIH07Ci0KLSAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZHJl
biA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRpb25Ob2RlPihtX2NoaWxkcmVuLmxhc3QoKS5nZXQo
KSkuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgICAgICBpZiAoYWxsQ2hpbGRyZW5BcmVQcmltaXRp
dmVWYWx1ZXMoY2hpbGRyZW4pKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAoYXV0byYgY2hp
bGQgOiBjaGlsZHJlbikgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4uYXBw
ZW5kKGNoaWxkLmNvcHlSZWYoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkb3duY2FzdDxD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihuZXdDaGlsZHJlbi5sYXN0KCkuZ2V0KCkpLm11bHRp
cGx5KG11bHRpcGxpZXIpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgIG1fb3BlcmF0b3IgPSBDYWxjT3BlcmF0b3I6OkFkZDsKLSAgICAgICAgICAgICAgICAgICAg
ZGlkTXVsdGlwbHkgPSB0cnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmICghZGlkTXVsdGlwbHkpIHsKLSAgICAgICAgICAgIGlmIChs
ZWFkaW5nTnVtYmVyTm9kZUNvdW50KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBtdWx0aXBsaWVy
Tm9kZSA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKG11bHRpcGxpZXIsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAg
ICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKFdURk1vdmUobXVsdGlwbGllck5v
ZGUpKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbGVh
ZGluZ051bWJlck5vZGVDb3VudDsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpCi0gICAgICAg
ICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hpbGRyZW5baV0uY29weVJl
ZigpKTsKLSAgICAgICAgfQotCi0gICAgICAgIG5ld0NoaWxkcmVuLnNocmlua1RvRml0KCk7Ci0g
ICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0NoaWxkcmVuKTsKLSAgICB9Ci0KLSAgICBp
ZiAoaXNNaW5Pck1heE5vZGUoKSAmJiBjYW5Db21iaW5lQWxsQ2hpbGRyZW4oKSkgewotICAgICAg
ICBhdXRvIGNvbWJpbmVkVW5pdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7
Ci0gICAgICAgIGF1dG8gY2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRp
b24oY29tYmluZWRVbml0VHlwZSk7Ci0gICAgICAgIGlmIChjYXRlZ29yeSAhPSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpPdGhlcikKLSAgICAgICAgICAgIGNvbWJpbmVkVW5pdFR5cGUgPSBjYW5vbmlj
YWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkoY2F0ZWdvcnkpOwotCi0gICAgICAgIGRv
dWJsZSByZXNvbHZlZFZhbHVlID0gZG91YmxlVmFsdWUoY29tYmluZWRVbml0VHlwZSk7Ci0gICAg
ICAgIGF1dG8gbmV3Q2hpbGQgPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShyZXNvbHZlZFZhbHVlLCBjb21iaW5lZFVuaXRUeXBlKSk7
Ci0KLSAgICAgICAgbV9jaGlsZHJlbi5jbGVhcigpOwotICAgICAgICBtX2NoaWxkcmVuLmFwcGVu
ZChXVEZNb3ZlKG5ld0NoaWxkKSk7Ci0gICAgfQotfQotCi0vLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvY3NzLXZhbHVlcy00LyNzaW1wbGlmeS1hLWNhbGN1bGF0aW9uLXRyZWUKLQotUmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUpCi17Ci0gICAgcmV0dXJuIHNpbXBsaWZ5
UmVjdXJzaXZlKFdURk1vdmUocm9vdE5vZGUpLCAwKTsKLX0KLQotUmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5UmVjdXJzaXZlKFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUsIGludCBkZXB0aCkKLXsKLSAgICBpZiAoaXM8
Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlKSkgewotICAgICAgICBhdXRvJiBvcGVyYXRp
b25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3ROb2RlLmdldCgpKTsK
LSAgICAgICAgCi0gICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGlsZHJl
bigpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgICAgIGF1dG8gY2hpbGQgPSBjaGlsZHJlbltpXS5jb3B5UmVmKCk7Ci0g
ICAgICAgICAgICBhdXRvIG5ld05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxk
KSwgZGVwdGggKyAxKTsKLSAgICAgICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9IGNoaWxkcmVu
W2ldLnB0cigpKQotICAgICAgICAgICAgICAgIGNoaWxkcmVuW2ldID0gV1RGTW92ZShuZXdOb2Rl
KTsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3RO
b2RlKSkgewotICAgICAgICBhdXRvJiBuZWdhdGVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0
ZU5vZGU+KHJvb3ROb2RlLmdldCgpKTsKLSAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4gY2hpbGQgPSBuZWdhdGVOb2RlLmNoaWxkKCk7Ci0gICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNp
bXBsaWZ5UmVjdXJzaXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOwotICAgICAgICBpZiAo
bmV3Tm9kZS5wdHIoKSAhPSAmbmVnYXRlTm9kZS5jaGlsZCgpKQotICAgICAgICAgICAgbmVnYXRl
Tm9kZS5zZXRDaGlsZChXVEZNb3ZlKG5ld05vZGUpKTsKLSAgICB9IGVsc2UgaWYgKGlzPENTU0Nh
bGNJbnZlcnROb2RlPihyb290Tm9kZSkpIHsKLSAgICAgICAgYXV0byYgaW52ZXJ0Tm9kZSA9IGRv
d25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZS5nZXQoKSk7Ci0gICAgICAgIFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNoaWxkID0gaW52ZXJ0Tm9kZS5jaGlsZCgpOwotICAgICAg
ICBhdXRvIG5ld05vZGUgPSBzaW1wbGlmeVJlY3Vyc2l2ZShXVEZNb3ZlKGNoaWxkKSwgZGVwdGgg
KyAxKTsKLSAgICAgICAgaWYgKG5ld05vZGUucHRyKCkgIT0gJmludmVydE5vZGUuY2hpbGQoKSkK
LSAgICAgICAgICAgIGludmVydE5vZGUuc2V0Q2hpbGQoV1RGTW92ZShuZXdOb2RlKSk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHNpbXBsaWZ5Tm9kZShXVEZNb3ZlKHJvb3ROb2RlKSwgZGVwdGgpOwot
fQotCi1SZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2lt
cGxpZnlOb2RlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcm9vdE5vZGUsIGludCBkZXB0
aCkKLXsKLSAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUpKSB7
Ci0gICAgICAgIC8vIElmIHJvb3QgaXMgYSBwZXJjZW50YWdlIHRoYXQgd2lsbCBiZSByZXNvbHZl
ZCBhZ2FpbnN0IGFub3RoZXIgdmFsdWUsIGFuZCB0aGVyZSBpcyBlbm91Z2ggaW5mb3JtYXRpb24K
LSAgICAgICAgLy8gYXZhaWxhYmxlIHRvIHJlc29sdmUgaXQsIGRvIHNvLCBhbmQgZXhwcmVzcyB0
aGUgcmVzdWx0aW5nIG51bWVyaWMgdmFsdWUgaW4gdGhlIGFwcHJvcHJpYXRlIGNhbm9uaWNhbAot
ICAgICAgICAvLyB1bml0LiBSZXR1cm4gdGhlIHZhbHVlLgotCi0gICAgICAgIC8vIElmIHJvb3Qg
aXMgYSBkaW1lbnNpb24gdGhhdCBpcyBub3QgZXhwcmVzc2VkIGluIGl0cyBjYW5vbmljYWwgdW5p
dCwgYW5kIHRoZXJlIGlzIGVub3VnaCBpbmZvcm1hdGlvbgotICAgICAgICAvLyBhdmFpbGFibGUg
dG8gY29udmVydCBpdCB0byB0aGUgY2Fub25pY2FsIHVuaXQsIGRvIHNvLCBhbmQgcmV0dXJuIHRo
ZSB2YWx1ZS4KLSAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOwotICAgICAgICBwcmltaXRp
dmVWYWx1ZU5vZGUuY2Fub25pY2FsaXplVW5pdCgpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShy
b290Tm9kZSk7Ci0gICAgfQotCi0gICAgLy8gSWYgcm9vdCBpcyBhbiBvcGVyYXRvciBub2RlIHRo
YXTigJlzIG5vdCBvbmUgb2YgdGhlIGNhbGMtb3BlcmF0b3Igbm9kZXMsIGFuZCBhbGwgb2YgaXRz
IGNoaWxkcmVuIGFyZSBudW1lcmljIHZhbHVlcwotICAgIC8vIHdpdGggZW5vdWdoIGluZm9ybWF0
aW9uIHRvIGNvbXB1dGVkIHRoZSBvcGVyYXRpb24gcm9vdCByZXByZXNlbnRzLCByZXR1cm4gdGhl
IHJlc3VsdCBvZiBydW5uaW5nIHJvb3TigJlzIG9wZXJhdGlvbgotICAgIC8vIHVzaW5nIGl0cyBj
aGlsZHJlbiwgZXhwcmVzc2VkIGluIHRoZSByZXN1bHTigJlzIGNhbm9uaWNhbCB1bml0LgotICAg
IGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8m
IGNhbGNPcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KHJvb3RO
b2RlLmdldCgpKTsKLSAgICAgICAgLy8gRG9uJ3Qgc2ltcGxpZnkgYXQgdGhlIHJvb3QsIG90aGVy
d2lzZSB3ZSBsb3NlIHRyYWNrIG9mIHRoZSBvcGVyYXRpb24gZm9yIHNlcmlhbGl6YXRpb24uCi0g
ICAgICAgIGlmIChjYWxjT3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpLnNpemUoKSA9PSAxICYmIGRl
cHRoKQotICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUuY2hpbGRy
ZW4oKVswXSk7Ci0gICAgICAgIAotICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxj
U3VtTm9kZSgpKSB7Ci0gICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5ob2lzdENoaWxkcmVu
V2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcjo6QWRkKTsKLSAgICAgICAgICAgIGNhbGNPcGVyYXRp
b25Ob2RlLmNvbWJpbmVDaGlsZHJlbigpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNhbGNP
cGVyYXRpb25Ob2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCkpIHsKLSAgICAgICAgICAgIGNhbGNPcGVy
YXRpb25Ob2RlLmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpNdWx0aXBs
eSk7Ci0gICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4oKTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmlzTWluT3JN
YXhOb2RlKCkpCi0gICAgICAgICAgICBjYWxjT3BlcmF0aW9uTm9kZS5jb21iaW5lQ2hpbGRyZW4o
KTsKLQotICAgICAgICAvLyBJZiBvbmx5IG9uZSBjaGlsZCByZW1haW5zLCByZXR1cm4gdGhlIGNo
aWxkIChleGNlcHQgYXQgdGhlIHJvb3QpLgotICAgICAgICBhdXRvIHNob3VsZENvbWJpbmVQYXJl
bnRXaXRoT25seUNoaWxkID0gW10oY29uc3QgQ1NTQ2FsY09wZXJhdGlvbk5vZGUmIHBhcmVudCwg
aW50IGRlcHRoKQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAocGFyZW50LmNoaWxkcmVuKCku
c2l6ZSgpICE9IDEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAg
ICAvLyBBbHdheXMgc2ltcGxpZnkgYmVsb3cgdGhlIHJvb3QuCi0gICAgICAgICAgICBpZiAoZGVw
dGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIC8vIEF0IHRo
ZSByb290LCBwcmVzZXJ2ZSB0aGUgcm9vdCBmdW5jdGlvbiBieSBvbmx5IG1lcmdpbmcgbm9kZXMg
d2l0aCB0aGUgc2FtZSBmdW5jdGlvbi4KLSAgICAgICAgICAgIGF1dG8mIGNoaWxkID0gcGFyZW50
LmNoaWxkcmVuKCkuZmlyc3QoKTsKLSAgICAgICAgICAgIGlmICghaXM8Q1NTQ2FsY09wZXJhdGlv
bk5vZGU+KGNoaWxkKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
ICAgIGF1dG8gcGFyZW50RnVuY3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihwYXJlbnQuY2Fs
Y09wZXJhdG9yKCkpOwotICAgICAgICAgICAgYXV0byBjaGlsZEZ1bmN0aW9uID0gZnVuY3Rpb25G
cm9tT3BlcmF0b3IoZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5j
YWxjT3BlcmF0b3IoKSk7Ci0gICAgICAgICAgICByZXR1cm4gY2hpbGRGdW5jdGlvbiA9PSBwYXJl
bnRGdW5jdGlvbjsKLSAgICAgICAgfTsKLQotICAgICAgICBpZiAoc2hvdWxkQ29tYmluZVBhcmVu
dFdpdGhPbmx5Q2hpbGQoY2FsY09wZXJhdGlvbk5vZGUsIGRlcHRoKSkKLSAgICAgICAgICAgIHJl
dHVybiBXVEZNb3ZlKGNhbGNPcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCkuZmlyc3QoKSk7Ci0KLSAg
ICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOwotICAgIH0KLQotICAgIGlmIChpczxDU1ND
YWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9IGRv
d25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKLSAgICAg
ICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYSBudW1lcmljIHZhbHVlLCByZXR1cm4gYW4gZXF1
aXZhbGVudCBudW1lcmljIHZhbHVlLCBidXQgd2l0aCB0aGUgdmFsdWUgbmVnYXRlZCAoMCAtIHZh
bHVlKS4KLSAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9k
ZSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pc051
bWVyaWNWYWx1ZSgpKSB7Ci0gICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlPihjaGlsZE5vZGUpLm5lZ2F0ZSgpOwotICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9k
ZTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMg
YSBOZWdhdGUgbm9kZSwgcmV0dXJuIHRoZSBjaGlsZOKAmXMgY2hpbGQuCi0gICAgICAgIGlmIChp
czxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGROb2RlKSkKLSAgICAgICAgICAgIHJldHVybiBkb3du
Y2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGROb2RlKS5jaGlsZCgpOwotICAgICAgICAKLSAg
ICAgICAgcmV0dXJuIFdURk1vdmUocm9vdE5vZGUpOwotICAgIH0KLQotICAgIGlmIChpczxDU1ND
YWxjSW52ZXJ0Tm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGNoaWxkTm9kZSA9IGRv
d25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZS5nZXQoKSkuY2hpbGQoKTsKLSAgICAg
ICAgLy8gSWYgcm9vdOKAmXMgY2hpbGQgaXMgYSBudW1iZXIgKG5vdCBhIHBlcmNlbnRhZ2Ugb3Ig
ZGltZW5zaW9uKSByZXR1cm4gdGhlIHJlY2lwcm9jYWwgb2YgdGhlIGNoaWxk4oCZcyB2YWx1ZS4K
LSAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkgJiYg
ZG93bmNhc3Q8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKS5pc051bWVyaWNW
YWx1ZSgpKSB7Ci0gICAgICAgICAgICBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
PihjaGlsZE5vZGUpLmludmVydCgpOwotICAgICAgICAgICAgcmV0dXJuIGNoaWxkTm9kZTsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIElmIHJvb3TigJlzIGNoaWxkIGlzIGFuIEludmVydCBub2Rl
LCByZXR1cm4gdGhlIGNoaWxk4oCZcyBjaGlsZC4KLSAgICAgICAgaWYgKGlzPENTU0NhbGNJbnZl
cnROb2RlPihjaGlsZE5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNJ
bnZlcnROb2RlPihjaGlsZE5vZGUpLmNoaWxkKCk7Ci0KLSAgICAgICAgcmV0dXJuIFdURk1vdmUo
cm9vdE5vZGUpOwotICAgIH0KLQotICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKLX0KLQot
Q1NTVW5pdFR5cGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnByaW1pdGl2ZVR5cGUoKSBjb25zdAot
ewotICAgIGF1dG8gdW5pdENhdGVnb3J5ID0gY2F0ZWdvcnkoKTsKLSAgICBzd2l0Y2ggKHVuaXRD
YXRlZ29yeSkgewotICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOgotI2lmIEFT
U0VSVF9FTkFCTEVECi0gICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAg
ICAgICAgICAgQVNTRVJUKGNoaWxkLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
Ok51bWJlcik7Ci0jZW5kaWYKLSAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVS
OwotCi0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50OiB7Ci0gICAgICAgIGlm
IChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBDU1NVbml0VHlwZTo6
Q1NTX1VOS05PV047Ci0KLSAgICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpID09IDIpIHsKLSAg
ICAgICAgICAgIGlmIChtX2NoaWxkcmVuWzBdLT5jYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok51bWJlcikKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jaGlsZHJlblsxXS0+cHJp
bWl0aXZlVHlwZSgpOwotICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMV0tPmNhdGVnb3J5KCkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBt
X2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIH0KLSAgICAgICAgQ1NTVW5p
dFR5cGUgZmlyc3RUeXBlID0gbV9jaGlsZHJlblswXS0+cHJpbWl0aXZlVHlwZSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICAgICAgaWYgKGZpcnN0
VHlwZSAhPSBjaGlsZC0+cHJpbWl0aXZlVHlwZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBD
U1NVbml0VHlwZTo6Q1NTX1VOS05PV047Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZpcnN0
VHlwZTsKLSAgICB9Ci0KLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDoKLSAg
ICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOgotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6VGltZToKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToK
LSAgICAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAgICAgICAgICByZXR1cm4g
bV9jaGlsZHJlbi5maXJzdCgpLT5wcmltaXRpdmVUeXBlKCk7Ci0gICAgICAgIHJldHVybiBjYW5v
bmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0ZWdvcnkodW5pdENhdGVnb3J5KTsKLQotICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKLSAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpPdGhlcjoKLSAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKLSAg
ICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIENTU1VuaXRUeXBlOjpD
U1NfVU5LTk9XTjsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4gQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0gICAgbm9kZXMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShtX2NoaWxkcmVuLnNpemUoKSk7Ci0KLSAgICBmb3IgKGF1dG8mIGNo
aWxkIDogbV9jaGlsZHJlbikgewotICAgICAgICBhdXRvIG5vZGUgPSBjaGlsZC0+Y3JlYXRlQ2Fs
Y0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpOwotICAgICAgICBpZiAoIW5vZGUpCi0gICAgICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgbm9kZXMudW5jaGVja2VkQXBwZW5kKFdURk1v
dmUobm9kZSkpOwotICAgIH0KLQotICAgIC8vIFJldmVyc2UgdGhlIG9wZXJhdGlvbiB3ZSBkaWQg
d2hlbiBjcmVhdGluZyB0aGlzIG5vZGUsIHJlY292ZXJpbmcgYSBzdWl0YWJsZSBkZXN0aW5hdGlv
biBjYXRlZ29yeSBmb3Igb3RoZXJ3aXNlLWFtYmlndW91cyBtaW4vbWF4L2NsYW1wIG5vZGVzLgot
ICAgIC8vIE5vdGUgdGhhdCB0aGlzIGNhdGVnb3J5IGlzIHJlYWxseSBvbmx5IGdvb2QgZW5vdWdo
IGZvciB0aGF0IHB1cnBvc2UgYW5kIGlzIG5vdCBhY2N1cmF0ZSBmb3Igb3RoZXIgbm9kZSB0eXBl
czsgd2UgY291bGQgdXNlIGEgYm9vbGVhbiBpbnN0ZWFkLgotICAgIGF1dG8gZGVzdGluYXRpb25D
YXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOwotICAgIGlmIChjYXRlZ29yeSgp
ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgpCi0gICAgICAgIGRlc3RpbmF0
aW9uQ2F0ZWdvcnkgPSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7Ci0gICAgZWxzZSBpZiAo
Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyKQotICAgICAg
ICBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyOwotCi0g
ICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+KFdURk1vdmUobm9k
ZXMpLCBtX29wZXJhdG9yLCBkZXN0aW5hdGlvbkNhdGVnb3J5KTsKLX0KLQotZG91YmxlIENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpkb3VibGVWYWx1ZShDU1NVbml0VHlwZSB1bml0VHlwZSkgY29uc3QK
LXsKLSAgICBib29sIGFsbG93TnVtYmVycyA9IGNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRv
cjo6TXVsdGlwbHk7Ci0KLSAgICByZXR1cm4gZXZhbHVhdGUobV9jaGlsZHJlbi5tYXAoWyZdIChh
dXRvJiBjaGlsZCkgewotICAgICAgICBDU1NVbml0VHlwZSBjaGlsZFR5cGUgPSB1bml0VHlwZTsK
LSAgICAgICAgaWYgKGFsbG93TnVtYmVycyAmJiB1bml0VHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NT
X05VTUJFUiAmJiBjaGlsZC0+cHJpbWl0aXZlVHlwZSgpID09IENTU1VuaXRUeXBlOjpDU1NfTlVN
QkVSKQotICAgICAgICAgICAgY2hpbGRUeXBlID0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7Ci0g
ICAgICAgIHJldHVybiBjaGlsZC0+ZG91YmxlVmFsdWUoY2hpbGRUeXBlKTsKLSAgICB9KSk7Ci19
Ci0KLWRvdWJsZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewotICAgIHJl
dHVybiBldmFsdWF0ZShtX2NoaWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7Ci0gICAgICAg
IHJldHVybiBjaGlsZC0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsKLSAgICB9KSk7
Ci19Ci0KLXZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RDb21wdXRhdGlv
bmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVlcykgY29uc3QKLXsK
LSAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKLSAgICAgICAgY2hpbGQtPmNvbGxl
Y3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Ci19Ci0KLXZvaWQgQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVu
Y2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Ci17Ci0gICAgZm9yIChh
dXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgIGNoaWxkLT5jb2xsZWN0RGlyZWN0Um9v
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0KLQotdm9pZCBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6YnVpbGRDU1NUZXh0KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgbm9k
ZSwgU3RyaW5nQnVpbGRlciYgYnVpbGRlcikKLXsKLSAgICBhdXRvIHNob3VsZE91dHB1dEVuY2xv
c2luZ0NhbGMgPSBbXShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIHJvb3ROb2RlKSB7Ci0g
ICAgICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpKSB7Ci0gICAgICAg
ICAgICBhdXRvJiBvcGVyYXRpb25Ob2RlID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+
KHJvb3ROb2RlKTsKLSAgICAgICAgICAgIHJldHVybiBvcGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5v
ZGUoKSB8fCBvcGVyYXRpb25Ob2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCk7Ci0gICAgICAgIH0KLSAg
ICAgICAgcmV0dXJuICFpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9kZSk7Ci0g
ICAgfTsKLSAgICAKLSAgICBib29sIG91dHB1dENhbGMgPSBzaG91bGRPdXRwdXRFbmNsb3NpbmdD
YWxjKG5vZGUpOwotICAgIGlmIChvdXRwdXRDYWxjKQotICAgICAgICBidWlsZGVyLmFwcGVuZCgi
Y2FsYygiKTsKLQotICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShub2RlLCBidWlsZGVyLCBHcm91
cGluZ1BhcmVuczo6T21pdCk7Ci0KLSAgICBpZiAob3V0cHV0Q2FsYykKLSAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJyknKTsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIGZ1bmN0aW9uUHJlZml4Rm9y
T3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQotewotICAgIHN3aXRjaCAob3ApIHsKLSAgICBjYXNl
IENhbGNPcGVyYXRvcjo6QWRkOgotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKLSAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlwbHk6Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRp
dmlkZToKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiAiIjsK
LSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiByZXR1cm4gIm1pbigiOwotICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNYXg6IHJldHVybiAibWF4KCI7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNs
YW1wOiByZXR1cm4gImNsYW1wKCI7Ci0gICAgfQotICAgIAotICAgIHJldHVybiAiIjsKLX0KLQot
Ly8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NlcmlhbGl6ZS1hLWNh
bGN1bGF0aW9uLXRyZWU+Ci12b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHRS
ZWN1cnNpdmUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWlsZGVy
JiBidWlsZGVyLCBHcm91cGluZ1BhcmVucyBwYXJlbnMpCi17Ci0gICAgLy8gSWYgcm9vdCBpcyBh
IG51bWVyaWMgdmFsdWUsIG9yIGEgbm9uLW1hdGggZnVuY3Rpb24sIHNlcmlhbGl6ZSByb290IHBl
ciB0aGUgbm9ybWFsIHJ1bGVzIGZvciBpdCBhbmQgcmV0dXJuIHRoZSByZXN1bHQuCi0gICAgaWYg
KGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIHZh
bHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5vZGUpOwotICAg
ICAgICBidWlsZGVyLmFwcGVuZCh2YWx1ZU5vZGUuY3VzdG9tQ1NTVGV4dCgpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obm9kZSkp
IHsKLSAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENTU0NhbGNPcGVyYXRp
b25Ob2RlPihub2RlKTsKLQotICAgICAgICBpZiAob3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2Rl
KCkpIHsKLSAgICAgICAgICAgIC8vIElmIHJvb3QgaXMgYSBTdW0gbm9kZSwgbGV0IHMgYmUgYSBz
dHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigiLgotICAgICAgICAgICAgaWYgKHBhcmVucyA9
PSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSkKLSAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnKCcpOwotCi0gICAgICAgICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBj
aGlsZHJlbi4KLSAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGls
ZHJlbigpOwotICAgICAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAg
ICAvLyBTZXJpYWxpemUgcm9vdOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4K
LSAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWls
ZGVyKTsKLQotICAgICAgICAgICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhl
IGZpcnN0OgotICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBOZWdhdGUgbm9kZSwgYXBwZW5k
ICIgLSAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIHRoZSBOZWdhdGXigJlzIGNoaWxkIGFuZCBhcHBl
bmQgdGhlIHJlc3VsdCB0byBzLgotICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYSBuZWdhdGl2
ZSBudW1lcmljIHZhbHVlLCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhlIG5l
Z2F0aW9uIG9mIGNoaWxkIGFzIG5vcm1hbCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KLSAg
ICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBwZW5kICIgKyAiIHRvIHMsIHRoZW4gc2VyaWFsaXpl
IGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBzLgotICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAg
YXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsKLSAgICAgICAgICAgICAgICBpZiAoaXM8Q1NTQ2Fs
Y05lZ2F0ZU5vZGU+KGNoaWxkKSkgewotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgiIC0gIik7Ci0gICAgICAgICAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShkb3du
Y2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkKCksIGJ1aWxkZXIpOwot
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU+KGNoaWxkKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZU5v
ZGUgPSBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihjaGlsZC5nZXQoKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZU5vZGUuaXNOZWdhdGl2ZSgpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC0gIik7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBTZXJpYWxpemUgdGhlIG5lZ2F0aW9uIG9mIGNoaWxkLgotICAg
ICAgICAgICAgICAgICAgICAgICAgYXV0byB1bml0VHlwZSA9IHByaW1pdGl2ZVZhbHVlTm9kZS52
YWx1ZSgpLnByaW1pdGl2ZVR5cGUoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKDAgLSBwcmltaXRpdmVWYWx1ZU5vZGUudmFsdWUoKS5kb3VibGVWYWx1ZSgpLCBDU1NQ
cmltaXRpdmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcodW5pdFR5cGUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIg
KyAiKTsKLSAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoY2hpbGQsIGJ1aWxk
ZXIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5n
UGFyZW5zOjpJbmNsdWRlKQotICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChvcGVy
YXRpb25Ob2RlLmlzQ2FsY1Byb2R1Y3ROb2RlKCkpIHsKLSAgICAgICAgICAgIC8vIElmIHJvb3Qg
aXMgYSBQcm9kdWN0IG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWluaW5n
ICIoIi4KLSAgICAgICAgICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUp
Ci0gICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJygnKTsKLQotICAgICAgICAgICAgLy8g
U2ltcGxpZmljYXRpb24gYWxyZWFkeSBzb3J0ZWQgY2hpbGRyZW4uCi0gICAgICAgICAgICBhdXRv
JiBjaGlsZHJlbiA9IG9wZXJhdGlvbk5vZGUuY2hpbGRyZW4oKTsKLSAgICAgICAgICAgIEFTU0VS
VChjaGlsZHJlbi5zaXplKCkpOwotICAgICAgICAgICAgLy8gU2VyaWFsaXplIHJvb3TigJlzIGZp
cnN0IGNoaWxkLCBhbmQgYXBwZW5kIGl0IHRvIHMuCi0gICAgICAgICAgICBidWlsZENTU1RleHRS
ZWN1cnNpdmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVpbGRlcik7Ci0KLSAgICAgICAgICAgIC8vIEZv
ciBlYWNoIGNoaWxkIG9mIHJvb3QgYmV5b25kIHRoZSBmaXJzdDoKLSAgICAgICAgICAgIC8vIElm
IGNoaWxkIGlzIGFuIEludmVydCBub2RlLCBhcHBlbmQgIiAvICIgdG8gcywgdGhlbiBzZXJpYWxp
emUgdGhlIEludmVydOKAmXMgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCi0gICAg
ICAgICAgICAvLyBPdGhlcndpc2UsIGFwcGVuZCAiICogIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSBj
aGlsZCBhbmQgYXBwZW5kIHRoZSByZXN1bHQgdG8gcy4KLSAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgICAgIGF1
dG8mIGNoaWxkID0gY2hpbGRyZW5baV07Ci0gICAgICAgICAgICAgICAgaWYgKGlzPENTU0NhbGNJ
bnZlcnROb2RlPihjaGlsZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQo
IiAvICIpOwotICAgICAgICAgICAgICAgICAgICBidWlsZENTU1RleHRSZWN1cnNpdmUoZG93bmNh
c3Q8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkLmdldCgpKS5jaGlsZCgpLCBidWlsZGVyKTsKLSAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiAqICIpOwotICAgICAgICAgICAgICAgIGJ1aWxkQ1NT
VGV4dFJlY3Vyc2l2ZShjaGlsZCwgYnVpbGRlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
ICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCi0gICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJyknKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
Ci0gICAgICAgIC8vIElmIHJvb3QgaXMgYW55dGhpbmcgYnV0IGEgU3VtLCBOZWdhdGUsIFByb2R1
Y3QsIG9yIEludmVydCBub2RlLCBzZXJpYWxpemUgYSBtYXRoIGZ1bmN0aW9uIGZvciB0aGUKLSAg
ICAgICAgLy8gZnVuY3Rpb24gY29ycmVzcG9uZGluZyB0byB0aGUgbm9kZSB0eXBlLCB0cmVhdGlu
ZyB0aGUgbm9kZeKAmXMgY2hpbGRyZW4gYXMgdGhlIGZ1bmN0aW9u4oCZcwotICAgICAgICAvLyBj
b21tYS1zZXBhcmF0ZWQgY2FsY3VsYXRpb24gYXJndW1lbnRzLCBhbmQgcmV0dXJuIHRoZSByZXN1
bHQuCi0gICAgICAgIGJ1aWxkZXIuYXBwZW5kKGZ1bmN0aW9uUHJlZml4Rm9yT3BlcmF0b3Iob3Bl
cmF0aW9uTm9kZS5jYWxjT3BlcmF0b3IoKSkpOwotCi0gICAgICAgIGF1dG8mIGNoaWxkcmVuID0g
b3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpOwotICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgp
KTsKLSAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuLmZpcnN0KCksIGJ1aWxk
ZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKLQotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCIsICIpOwotICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkcmVuW2ldLCBi
dWlsZGVyLCBHcm91cGluZ1BhcmVuczo6T21pdCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCcpJyk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihub2RlKSkgewotICAgICAgICBhdXRvJiBuZWdh
dGVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5vZGUpOwotICAgICAgICAvLyBJ
ZiByb290IGlzIGEgTmVnYXRlIG5vZGUsIGxldCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250
YWluaW5nICIoLTEgKiAiLgotICAgICAgICBidWlsZGVyLmFwcGVuZCgiLTEgKiIpOwotICAgICAg
ICBidWlsZENTU1RleHRSZWN1cnNpdmUobmVnYXRlTm9kZS5jaGlsZCgpLCBidWlsZGVyKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+
KG5vZGUpKSB7Ci0gICAgICAgIGF1dG8mIGludmVydE5vZGUgPSBkb3duY2FzdDxDU1NDYWxjSW52
ZXJ0Tm9kZT4obm9kZSk7Ci0gICAgICAgIC8vIElmIHJvb3QgaXMgYW4gSW52ZXJ0IG5vZGUsIGxl
dCBzIGJlIGEgc3RyaW5nIGluaXRpYWxseSBjb250YWluaW5nICIoMSAvICIuCi0gICAgICAgIGJ1
aWxkZXIuYXBwZW5kKCIxIC8gIik7Ci0gICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShpbnZl
cnROb2RlLmNoaWxkKCksIGJ1aWxkZXIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotfQotCi12
b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewot
ICAgIHRzIDw8ICJjYWxjIG9wZXJhdGlvbiAiIDw8IG1fb3BlcmF0b3IgPDwgIiAoY2F0ZWdvcnk6
ICIgPDwgY2F0ZWdvcnkoKSA8PCAiLCB0eXBlICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsK
LQotICAgIFRleHRTdHJlYW06Okdyb3VwU2NvcGUgc2NvcGUodHMpOwotICAgIHRzIDw8IG1fY2hp
bGRyZW4uc2l6ZSgpIDw8ICIgY2hpbGRyZW4iOwotICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2No
aWxkcmVuKQotICAgICAgICB0cy5kdW1wUHJvcGVydHkoIm5vZGUiLCBjaGlsZCk7Ci19Ci0KLWJv
b2wgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUmIGV4cCkgY29uc3QKLXsKLSAgICBpZiAodHlwZSgpICE9IGV4cC50eXBlKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJiBvdGhlciA9
IHN0YXRpY19jYXN0PGNvbnN0IENTU0NhbGNPcGVyYXRpb25Ob2RlJj4oZXhwKTsKLQotICAgIGlm
IChtX2NoaWxkcmVuLnNpemUoKSAhPSBvdGhlci5tX2NoaWxkcmVuLnNpemUoKSB8fCBtX29wZXJh
dG9yICE9IG90aGVyLm1fb3BlcmF0b3IpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgewotICAgICAgICBp
ZiAoIWNvbXBhcmVDU1NWYWx1ZShtX2NoaWxkcmVuW2ldLCBvdGhlci5tX2NoaWxkcmVuW2ldKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWRvdWJsZSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXZhbHVhdGVPcGVyYXRvcihDYWxjT3BlcmF0
b3Igb3AsIGNvbnN0IFZlY3Rvcjxkb3VibGU+JiBjaGlsZHJlbikKLXsKLSAgICBzd2l0Y2ggKG9w
KSB7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogewotICAgICAgICBkb3VibGUgc3VtID0g
MDsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAgICAgc3Vt
ICs9IGNoaWxkOwotICAgICAgICByZXR1cm4gc3VtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6U3VidHJhY3Q6Ci0gICAgICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkgPT0gMik7Ci0g
ICAgICAgIHJldHVybiBjaGlsZHJlblswXSAtIGNoaWxkcmVuWzFdOwotICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpNdWx0aXBseTogewotICAgICAgICBkb3VibGUgcHJvZHVjdCA9IDE7Ci0gICAgICAg
IGZvciAoYXV0byYgY2hpbGQgOiBjaGlsZHJlbikKLSAgICAgICAgICAgIHByb2R1Y3QgKj0gY2hp
bGQ7Ci0gICAgICAgIHJldHVybiBwcm9kdWN0OwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRv
cjo6RGl2aWRlOgotICAgICAgICBBU1NFUlQoY2hpbGRyZW4uc2l6ZSgpID09IDEgfHwgY2hpbGRy
ZW4uc2l6ZSgpID09IDIpOwotICAgICAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID09IDEpCi0gICAg
ICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKTsK
LSAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC8gY2hpbGRyZW5bMV07Ci0gICAgY2FzZSBDYWxj
T3BlcmF0b3I6Ok1pbjogewotICAgICAgICBpZiAoY2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgICAgIGRvdWJsZSBtaW5pbXVtID0gY2hpbGRyZW5bMF07Ci0gICAgICAgIGZvciAoYXV0byBj
aGlsZCA6IGNoaWxkcmVuKQotICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1pbmltdW0s
IGNoaWxkKTsKLSAgICAgICAgcmV0dXJuIG1pbmltdW07Ci0gICAgfQotICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpNYXg6IHsKLSAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OnF1aWV0X05hTigpOwotICAg
ICAgICBkb3VibGUgbWF4aW11bSA9IGNoaWxkcmVuWzBdOwotICAgICAgICBmb3IgKGF1dG8gY2hp
bGQgOiBjaGlsZHJlbikKLSAgICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBj
aGlsZCk7Ci0gICAgICAgIHJldHVybiBtYXhpbXVtOwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVy
YXRvcjo6Q2xhbXA6IHsKLSAgICAgICAgaWYgKGNoaWxkcmVuLnNpemUoKSAhPSAzKQotICAgICAg
ICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91YmxlPjo6cXVpZXRfTmFOKCk7Ci0g
ICAgICAgIGRvdWJsZSBtaW4gPSBjaGlsZHJlblswXTsKLSAgICAgICAgZG91YmxlIHZhbHVlID0g
Y2hpbGRyZW5bMV07Ci0gICAgICAgIGRvdWJsZSBtYXggPSBjaGlsZHJlblsyXTsKLSAgICAgICAg
cmV0dXJuIHN0ZDo6bWF4KG1pbiwgc3RkOjptaW4odmFsdWUsIG1heCkpOwotICAgIH0KLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotY2xhc3Mg
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIoQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNh
dGVnb3J5KQotICAgICAgICA6IG1fZGVzdGluYXRpb25DYXRlZ29yeShkZXN0aW5hdGlvbkNhdGVn
b3J5KQotICAgIHsgfQotCi0gICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gcGFyc2VD
YWxjKENTU1BhcnNlclRva2VuUmFuZ2UsIENTU1ZhbHVlSUQgZnVuY3Rpb24pOwotICAgIAotcHJp
dmF0ZToKLSAgICBjaGFyIG9wZXJhdG9yVmFsdWUoY29uc3QgQ1NTUGFyc2VyVG9rZW4mIHRva2Vu
KQotICAgIHsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbikKLSAg
ICAgICAgICAgIHJldHVybiB0b2tlbi5kZWxpbWl0ZXIoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0g
ICAgfQotCi0gICAgYm9vbCBwYXJzZVZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBSZWZQdHI8
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOwotICAgIGJvb2wgcGFyc2VWYWx1ZVRlcm0oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4m
KTsKLSAgICBib29sIHBhcnNlQ2FsY0Z1bmN0aW9uKENTU1BhcnNlclRva2VuUmFuZ2UmLCBDU1NW
YWx1ZUlELCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0gICAg
Ym9vbCBwYXJzZUNhbGNTdW0oQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKLSAgICBib29sIHBhcnNlQ2FsY1Byb2R1Y3QoQ1NT
UGFyc2VyVG9rZW5SYW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4mKTsKLSAgICBib29sIHBhcnNlQ2FsY1ZhbHVlKENTU1BhcnNlclRva2VuUmFuZ2UmLCBpbnQg
ZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7Ci0KLSAgICBDYWxjdWxhdGlv
bkNhdGVnb3J5IG1fZGVzdGluYXRpb25DYXRlZ29yeTsKLX07Ci0KLS8vIDxodHRwczovL2RyYWZ0
cy5jc3N3Zy5vcmcvY3NzLXZhbHVlcy00LyNjYWxjLXN5bnRheD46Ci0vLyA8Y2FsYygpPiAgPSBj
YWxjKCA8Y2FsYy1zdW0+ICkKLS8vIDxtaW4oKT4gICA9IG1pbiggPGNhbGMtc3VtPiMgKQotLy8g
PG1heCgpPiAgID0gbWF4KCA8Y2FsYy1zdW0+IyApCi0vLyA8Y2xhbXAoKT4gPSBjbGFtcCggPGNh
bGMtc3VtPiN7M30gKQotLy8gPHNpbigpPiAgID0gc2luKCA8Y2FsYy1zdW0+ICkKLS8vIDxjb3Mo
KT4gICA9IGNvcyggPGNhbGMtc3VtPiApCi0vLyA8dGFuKCk+ICAgPSB0YW4oIDxjYWxjLXN1bT4g
KQotLy8gPGFzaW4oKT4gID0gYXNpbiggPGNhbGMtc3VtPiApCi0vLyA8YWNvcygpPiAgPSBhY29z
KCA8Y2FsYy1zdW0+ICkKLS8vIDxhdGFuKCk+ICA9IGF0YW4oIDxjYWxjLXN1bT4gKQotLy8gPGF0
YW4yKCk+ID0gYXRhbjIoIDxjYWxjLXN1bT4sIDxjYWxjLXN1bT4gKQotLy8gPHBvdygpPiAgID0g
cG93KCA8Y2FsYy1zdW0+LCA8Y2FsYy1zdW0+ICkKLS8vIDxzcXJ0KCk+ICA9IHNxcnQoIDxjYWxj
LXN1bT4gKQotLy8gPGh5cG90KCk+ID0gaHlwb3QoIDxjYWxjLXN1bT4jICkKLS8vIDxjYWxjLXN1
bT4gPSA8Y2FsYy1wcm9kdWN0PiBbIFsgJysnIHwgJy0nIF0gPGNhbGMtcHJvZHVjdD4gXSoKLS8v
IDxjYWxjLXByb2R1Y3Q+ID0gPGNhbGMtdmFsdWU+IFsgWyAnKicgfCAnLycgXSA8Y2FsYy12YWx1
ZT4gXSoKLS8vIDxjYWxjLXZhbHVlPiA9IDxudW1iZXI+IHwgPGRpbWVuc2lvbj4gfCA8cGVyY2Vu
dGFnZT4gfCAoIDxjYWxjLXN1bT4gKQotUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGMoQ1NTUGFyc2VyVG9rZW5SYW5nZSB0
b2tlbnMsIENTU1ZhbHVlSUQgZnVuY3Rpb24pCi17Ci0gICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNw
YWNlKCk7Ci0KLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiByZXN1bHQ7Ci0gICAg
Ym9vbCBvayA9IHBhcnNlQ2FsY0Z1bmN0aW9uKHRva2VucywgZnVuY3Rpb24sIDAsIHJlc3VsdCk7
Ci0gICAgaWYgKCFvayB8fCAhdG9rZW5zLmF0RW5kKCkpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgTE9H
X1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
OjpwYXJzZUNhbGMgIiA8PCBwcmV0dHlQcmludE5vZGUoKnJlc3VsdCkpOwotCi0gICAgcmVzdWx0
ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OnNpbXBsaWZ5KHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgp
KTsKLQotICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjIC0gYWZ0ZXIgc2ltcGxpZmljYXRpb24gIiA8PCBwcmV0
dHlQcmludE5vZGUoKnJlc3VsdCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotZW51bSBQ
YXJzZVN0YXRlIHsKLSAgICBPSywKLSAgICBUb29EZWVwLAotICAgIE5vTW9yZVRva2VucwotfTsK
LQotc3RhdGljIFBhcnNlU3RhdGUgY2hlY2tEZXB0aEFuZEluZGV4KGludCBkZXB0aCwgQ1NTUGFy
c2VyVG9rZW5SYW5nZSB0b2tlbnMpCi17Ci0gICAgaWYgKHRva2Vucy5hdEVuZCgpKQotICAgICAg
ICByZXR1cm4gTm9Nb3JlVG9rZW5zOwotICAgIGlmIChkZXB0aCA+IG1heEV4cHJlc3Npb25EZXB0
aCkgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8ICJEZXB0aCAiIDw8
IGRlcHRoIDw8ICIgZXhjZWVkZWQgbWF4RXhwcmVzc2lvbkRlcHRoICIgPDwgbWF4RXhwcmVzc2lv
bkRlcHRoKTsKLSAgICAgICAgcmV0dXJuIFRvb0RlZXA7Ci0gICAgfQotICAgIHJldHVybiBPSzsK
LX0KLQotYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY0Z1bmN0aW9u
KENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgQ1NTVmFsdWVJRCBmdW5jdGlvbklELCBpbnQg
ZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYg
KGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgLy8gImFyZ3VtZW50cyIgcmVmZXJzIHRvIHRoaW5ncyBiZXR3ZWVuIGNv
bW1hcy4KLSAgICB1bnNpZ25lZCBtaW5Bcmd1bWVudENvdW50ID0gMTsKLSAgICBPcHRpb25hbDx1
bnNpZ25lZD4gbWF4QXJndW1lbnRDb3VudDsKLQotICAgIHN3aXRjaCAoZnVuY3Rpb25JRCkgewot
ICAgIGNhc2UgQ1NTVmFsdWVNaW46Ci0gICAgY2FzZSBDU1NWYWx1ZU1heDoKLSAgICAgICAgbWF4
QXJndW1lbnRDb3VudCA9IHN0ZDo6bnVsbG9wdDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBD
U1NWYWx1ZUNsYW1wOgotICAgICAgICBtaW5Bcmd1bWVudENvdW50ID0gMzsKLSAgICAgICAgbWF4
QXJndW1lbnRDb3VudCA9IDM7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQ1NTVmFsdWVDYWxj
OgotICAgICAgICBtYXhBcmd1bWVudENvdW50ID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgLy8g
VE9ETzogY2xhbXAsIHNpbiwgY29zLCB0YW4sIGFzaW4sIGFjb3MsIGF0YW4sIGF0YW4yLCBwb3cs
IHNxcnQsIGh5cG90LgotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAg
IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAgICBib29sIHJl
cXVpcmVDb21tYSA9IGZhbHNlOwotICAgIHVuc2lnbmVkIGFyZ3VtZW50Q291bnQgPSAwOwotICAg
IHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKLSAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNw
YWNlKCk7Ci0gICAgICAgIGlmIChyZXF1aXJlQ29tbWEpIHsKLSAgICAgICAgICAgIGlmICh0b2tl
bnMuY29uc3VtZSgpLnR5cGUoKSAhPSBDb21tYVRva2VuKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgICAgIHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbm9kZTsKLSAgICAg
ICAgaWYgKCFwYXJzZUNhbGNTdW0odG9rZW5zLCBkZXB0aCwgbm9kZSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgKythcmd1bWVudENvdW50OwotICAgICAgICBpZiAobWF4
QXJndW1lbnRDb3VudCAmJiBhcmd1bWVudENvdW50ID4gbWF4QXJndW1lbnRDb3VudC52YWx1ZSgp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIG5vZGVzLmFwcGVuZChub2Rl
LnJlbGVhc2VOb25OdWxsKCkpOwotICAgICAgICByZXF1aXJlQ29tbWEgPSB0cnVlOwotICAgIH0K
LSAgICAKLSAgICBpZiAoYXJndW1lbnRDb3VudCA8IG1pbkFyZ3VtZW50Q291bnQpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHN3aXRjaCAoZnVuY3Rpb25JRCkgewotICAgIGNhc2UgQ1NT
VmFsdWVNaW46Ci0gICAgICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVN
aW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpNaW4sIFdURk1vdmUobm9kZXMpLCBtX2Rlc3Rp
bmF0aW9uQ2F0ZWdvcnkpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlTWF4Ogot
ICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNs
YW1wKENhbGNPcGVyYXRvcjo6TWF4LCBXVEZNb3ZlKG5vZGVzKSwgbV9kZXN0aW5hdGlvbkNhdGVn
b3J5KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBDU1NWYWx1ZUNsYW1wOgotICAgICAgICBy
ZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNP
cGVyYXRvcjo6Q2xhbXAsIFdURk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOwot
ICAgICAgICBicmVhazsKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoKLSAgICBjYXNlIENT
U1ZhbHVlQ2FsYzoKLSAgICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0
ZVN1bShXVEZNb3ZlKG5vZGVzKSk7Ci0gICAgICAgIGJyZWFrOwotICAgIC8vIFRPRE86IGNsYW1w
LCBzaW4sIGNvcywgdGFuLCBhc2luLCBhY29zLCBhdGFuLCBhdGFuMiwgcG93LCBzcXJ0LCBoeXBv
dAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIHJldHVybiAhIXJl
c3VsdDsKLX0KLQotYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
PiYgcmVzdWx0KQotewotICAgIENTU1BhcnNlclRva2VuIHRva2VuID0gdG9rZW5zLmNvbnN1bWVJ
bmNsdWRpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgaWYgKCEodG9rZW4udHlwZSgpID09IE51bWJlclRv
a2VuIHx8IHRva2VuLnR5cGUoKSA9PSBQZXJjZW50YWdlVG9rZW4gfHwgdG9rZW4udHlwZSgpID09
IERpbWVuc2lvblRva2VuKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAotICAgIGF1dG8g
dHlwZSA9IHRva2VuLnVuaXRUeXBlKCk7Ci0gICAgaWYgKGNhbGNVbml0Q2F0ZWdvcnkodHlwZSkg
PT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICByZXN1bHQgPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZSh0b2tlbi5udW1lcmljVmFsdWUoKSwgdHlwZSkpOwotICAgIAot
ICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6
cGFyc2VDYWxjVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJl
ZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYgKGNoZWNrRGVw
dGhBbmRJbmRleChkZXB0aCwgdG9rZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgYXV0byBmaW5kRnVuY3Rpb25JZCA9IFsmXShDU1NWYWx1ZUlEJiBmdW5jdGlvbklkKSB7
Ci0gICAgICAgIGlmICh0b2tlbnMucGVlaygpLnR5cGUoKSA9PSBMZWZ0UGFyZW50aGVzaXNUb2tl
bikgewotICAgICAgICAgICAgZnVuY3Rpb25JZCA9IENTU1ZhbHVlQ2FsYzsKLSAgICAgICAgICAg
IHJldHVybiB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAgZnVuY3Rpb25JZCA9IHRva2Vucy5w
ZWVrKCkuZnVuY3Rpb25JZCgpOwotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ZhbHVlOjppc0NhbGNG
dW5jdGlvbihmdW5jdGlvbklkKTsKLSAgICB9OwotCi0gICAgQ1NTVmFsdWVJRCBmdW5jdGlvbklk
OwotICAgIGlmIChmaW5kRnVuY3Rpb25JZChmdW5jdGlvbklkKSkgewotICAgICAgICBDU1NQYXJz
ZXJUb2tlblJhbmdlIGlubmVyUmFuZ2UgPSB0b2tlbnMuY29uc3VtZUJsb2NrKCk7Ci0gICAgICAg
IHRva2Vucy5jb25zdW1lV2hpdGVzcGFjZSgpOwotICAgICAgICBpbm5lclJhbmdlLmNvbnN1bWVX
aGl0ZXNwYWNlKCk7Ci0gICAgICAgIHJldHVybiBwYXJzZUNhbGNGdW5jdGlvbihpbm5lclJhbmdl
LCBmdW5jdGlvbklkLCBkZXB0aCArIDEsIHJlc3VsdCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHBh
cnNlVmFsdWUodG9rZW5zLCByZXN1bHQpOwotfQotCi1ib29sIENTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlcjo6cGFyc2VDYWxjUHJvZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGlu
dCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKLXsKLSAgICBp
ZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVl
OwotICAgIGlmICghcGFyc2VDYWxjVmFsdWUodG9rZW5zLCBkZXB0aCwgZmlyc3RWYWx1ZSkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25O
b2RlPj4gbm9kZXM7Ci0KLSAgICB3aGlsZSAoIXRva2Vucy5hdEVuZCgpKSB7Ci0gICAgICAgIGNo
YXIgb3BlcmF0b3JDaGFyYWN0ZXIgPSBvcGVyYXRvclZhbHVlKHRva2Vucy5wZWVrKCkpOwotICAg
ICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJh
dG9yOjpNdWx0aXBseSkgJiYgb3BlcmF0b3JDaGFyYWN0ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4o
Q2FsY09wZXJhdG9yOjpEaXZpZGUpKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHRva2Vu
cy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotICAgICAgICAKLSAgICAgICAgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4gbmV4dFZhbHVlOwotICAgICAgICBpZiAoIXBhcnNlQ2Fs
Y1ZhbHVlKHRva2VucywgZGVwdGgsIG5leHRWYWx1ZSkgfHwgIW5leHRWYWx1ZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3Rh
dGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpEaXZpZGUpKQotICAgICAgICAgICAgbmV4dFZh
bHVlID0gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZShuZXh0VmFsdWUucmVsZWFzZU5vbk51bGwo
KSk7Ci0KLSAgICAgICAgaWYgKGZpcnN0VmFsdWUpCi0gICAgICAgICAgICBub2Rlcy5hcHBlbmQo
Zmlyc3RWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKLQotICAgICAgICBub2Rlcy5hcHBlbmQobmV4
dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotICAgIH0KLQotICAgIGlmIChub2Rlcy5pc0VtcHR5
KCkpIHsKLSAgICAgICAgcmVzdWx0ID0gV1RGTW92ZShmaXJzdFZhbHVlKTsKLSAgICAgICAgcmV0
dXJuICEhcmVzdWx0OwotICAgIH0KLQotICAgIHJlc3VsdCA9IENTU0NhbGNPcGVyYXRpb25Ob2Rl
OjpjcmVhdGVQcm9kdWN0KFdURk1vdmUobm9kZXMpKTsKLSAgICByZXR1cm4gISFyZXN1bHQ7Ci19
Ci0KLWJvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJzZUNhbGNTdW0oQ1NTUGFy
c2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBpbnQgZGVwdGgsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+JiByZXN1bHQpCi17Ci0gICAgaWYgKGNoZWNrRGVwdGhBbmRJbmRleChkZXB0aCwgdG9r
ZW5zKSAhPSBPSykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUmVmUHRyPENTU0NhbGNF
eHByZXNzaW9uTm9kZT4gZmlyc3RWYWx1ZTsKLSAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1Y3QodG9r
ZW5zLCBkZXB0aCwgZmlyc3RWYWx1ZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFZl
Y3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbm9kZXM7Ci0KLSAgICB3aGlsZSAoIXRv
a2Vucy5hdEVuZCgpKSB7Ci0gICAgICAgIGNoYXIgb3BlcmF0b3JDaGFyYWN0ZXIgPSBvcGVyYXRv
clZhbHVlKHRva2Vucy5wZWVrKCkpOwotICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgIT0g
c3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpBZGQpICYmIG9wZXJhdG9yQ2hhcmFjdGVy
ICE9IHN0YXRpY19jYXN0PGNoYXI+KENhbGNPcGVyYXRvcjo6U3VidHJhY3QpKQotICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgaWYgKCgmdG9rZW5zLnBlZWsoKSAtIDEpLT50eXBlKCkgIT0g
V2hpdGVzcGFjZVRva2VuKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCsg
MnB4KSBpcyBpbnZhbGlkCi0KLSAgICAgICAgdG9rZW5zLmNvbnN1bWUoKTsKLSAgICAgICAgaWYg
KHRva2Vucy5wZWVrKCkudHlwZSgpICE9IFdoaXRlc3BhY2VUb2tlbikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsgLy8gY2FsYygxcHggKzJweCkgaXMgaW52YWxpZAotCi0gICAgICAgIHRva2Vu
cy5jb25zdW1lSW5jbHVkaW5nV2hpdGVzcGFjZSgpOwotCi0gICAgICAgIFJlZlB0cjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+IG5leHRWYWx1ZTsKLSAgICAgICAgaWYgKCFwYXJzZUNhbGNQcm9kdWN0
KHRva2VucywgZGVwdGgsIG5leHRWYWx1ZSkgfHwgIW5leHRWYWx1ZSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAob3BlcmF0b3JDaGFyYWN0ZXIgPT0gc3RhdGljX2Nh
c3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdCkpCi0gICAgICAgICAgICBuZXh0VmFsdWUg
PSBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsK
LQotICAgICAgICBpZiAoZmlyc3RWYWx1ZSkKLSAgICAgICAgICAgIG5vZGVzLmFwcGVuZChmaXJz
dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgICAgIG5vZGVzLmFwcGVuZChuZXh0VmFs
dWUucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgfQotCi0gICAgaWYgKG5vZGVzLmlzRW1wdHkoKSkg
ewotICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGZpcnN0VmFsdWUpOwotICAgICAgICByZXR1cm4g
ISFyZXN1bHQ7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNy
ZWF0ZVN1bShXVEZNb3ZlKG5vZGVzKSk7Ci0gICAgcmV0dXJuICEhcmVzdWx0OwotfQotCi1zdGF0
aWMgaW5saW5lIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlQmxlbmRIYWxmKGNv
bnN0IExlbmd0aCYgbGVuZ3RoLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGZsb2F0IHByb2dy
ZXNzKQotewotICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlKENhbGNPcGVy
YXRvcjo6TXVsdGlwbHksIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKSwKLSAgICAgICAgQ1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJv
Z3Jlc3MsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSkpOwotfQotCi1zdGF0aWMgVmVjdG9yPFJl
ZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBjcmVhdGVDU1MoY29uc3QgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMsIGNvbnN0IFJlbmRlclN0eWxlJiBz
dHlsZSkKLXsKLSAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsK
LSAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShub2Rlcy5zaXplKCkpOwotICAgIGZv
ciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7Ci0gICAgICAgIGF1dG8gY3NzTm9kZSA9IGNyZWF0ZUNT
Uygqbm9kZSwgc3R5bGUpOwotICAgICAgICBpZiAoIWNzc05vZGUpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgdmFsdWVzLnVuY2hlY2tlZEFwcGVuZChjc3NOb2RlLnJlbGVhc2VOb25O
dWxsKCkpOwotICAgIH0KLSAgICByZXR1cm4gdmFsdWVzOwotfQotCi1zdGF0aWMgUmVmUHRyPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4gY3JlYXRlQ1NTKGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYg
bm9kZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIHN3aXRjaCAobm9kZS50eXBl
KCkpIHsKLSAgICBjYXNlIENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok51bWJlcjogewotICAgICAg
ICBmbG9hdCB2YWx1ZSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihub2RlKS52YWx1
ZSgpOyAvLyBkb3VibGU/Ci0gICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
OjpjcmVhdGUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSh2YWx1ZSwgQ1NTVW5pdFR5cGU6OkNT
U19OVU1CRVIpKTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpMZW5n
dGg6IHsKLSAgICAgICAgYXV0byYgbGVuZ3RoID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25MZW5n
dGg+KG5vZGUpLmxlbmd0aCgpOwotICAgICAgICBpZiAoIWxlbmd0aC5pc1BlcmNlbnQoKSAmJiBs
ZW5ndGguaXNaZXJvKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgcmV0
dXJuIGNyZWF0ZUNTUyhsZW5ndGgsIHN0eWxlKTsKLSAgICB9Ci0KLSAgICBjYXNlIENhbGNFeHBy
ZXNzaW9uTm9kZVR5cGU6Ok5lZ2F0aW9uOiB7Ci0gICAgICAgIGF1dG8gY2hpbGROb2RlID0gY3Jl
YXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uPihub2RlKS5jaGlsZCgpLCBz
dHlsZSk7Ci0gICAgICAgIGlmICghY2hpbGROb2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0gICAgICAgIHJldHVybiBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5y
ZWxlYXNlTm9uTnVsbCgpKTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
OjpJbnZlcnNpb246IHsKLSAgICAgICAgYXV0byBjaGlsZE5vZGUgPSBjcmVhdGVDU1MoKmRvd25j
YXN0PENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihub2RlKS5jaGlsZCgpLCBzdHlsZSk7Ci0gICAg
ICAgIGlmICghY2hpbGROb2RlKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAg
IHJldHVybiBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKGNoaWxkTm9kZS5yZWxlYXNlTm9uTnVs
bCgpKTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpPcGVyYXRpb246
IHsKLSAgICAgICAgYXV0byYgb3BlcmF0aW9uTm9kZSA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9u
T3BlcmF0aW9uPihub2RlKTsKLSAgICAgICAgYXV0byYgb3BlcmF0aW9uQ2hpbGRyZW4gPSBvcGVy
YXRpb25Ob2RlLmNoaWxkcmVuKCk7Ci0gICAgICAgIENhbGNPcGVyYXRvciBvcCA9IG9wZXJhdGlv
bk5vZGUuZ2V0T3BlcmF0b3IoKTsKLSAgICAgICAgCi0gICAgICAgIHN3aXRjaCAob3ApIHsKLSAg
ICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogewotICAgICAgICAgICAgYXV0byBjaGlsZHJl
biA9IGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOwotICAgICAgICAgICAgaWYg
KGNoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAgICAgICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgICAgICByZXR1
cm4gV1RGTW92ZShjaGlsZHJlblswXSk7Ci0gICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJh
dGlvbk5vZGU6OmNyZWF0ZVN1bShXVEZNb3ZlKGNoaWxkcmVuKSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7Ci0gICAgICAgICAgICBBU1NFUlQob3Bl
cmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09IDIpOwotCi0gICAgICAgICAgICBWZWN0b3I8UmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVlczsKLSAgICAgICAgICAgIHZhbHVlcy5yZXNlcnZl
SW5pdGlhbENhcGFjaXR5KG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGF1dG8gZmlyc3RDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRy
ZW5bMF0sIHN0eWxlKTsKLSAgICAgICAgICAgIGF1dG8gc2Vjb25kQ2hpbGQgPSBjcmVhdGVDU1Mo
Km9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7Ci0KLSAgICAgICAgICAgIGlmICghc2Vjb25k
Q2hpbGQpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7Ci0KLSAgICAgICAgICAg
IGF1dG8gbmVnYXRlTm9kZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUoc2Vjb25kQ2hpbGQu
cmVsZWFzZU5vbk51bGwoKSk7Ci0gICAgICAgICAgICBpZiAoIWZpcnN0Q2hpbGQpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIG5lZ2F0ZU5vZGU7Ci0KLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQo
Zmlyc3RDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKLSAgICAgICAgICAgIHZhbHVlcy5hcHBlbmQo
V1RGTW92ZShuZWdhdGVOb2RlKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiBDU1NDYWxjT3BlcmF0
aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUodmFsdWVzKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7Ci0gICAgICAgICAgICBhdXRvIGNoaWxkcmVu
ID0gY3JlYXRlQ1NTKG9wZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSk7Ci0gICAgICAgICAgICBpZiAo
Y2hpbGRyZW4uaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KFdURk1v
dmUoY2hpbGRyZW4pKTsKLSAgICAgICAgfQotICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2
aWRlOiB7Ci0gICAgICAgICAgICBBU1NFUlQob3BlcmF0aW9uQ2hpbGRyZW4uc2l6ZSgpID09IDIp
OwotCi0gICAgICAgICAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+IHZhbHVl
czsKLSAgICAgICAgICAgIHZhbHVlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG9wZXJhdGlvbkNo
aWxkcmVuLnNpemUoKSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGF1dG8gZmlyc3RDaGls
ZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5bMF0sIHN0eWxlKTsKLSAgICAgICAgICAg
IGlmICghZmlyc3RDaGlsZCkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAg
ICAgICAgICAgYXV0byBzZWNvbmRDaGlsZCA9IGNyZWF0ZUNTUygqb3BlcmF0aW9uQ2hpbGRyZW5b
MV0sIHN0eWxlKTsKLSAgICAgICAgICAgIGlmICghc2Vjb25kQ2hpbGQpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBhdXRvIGludmVydE5vZGUgPSBDU1NDYWxj
SW52ZXJ0Tm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAg
ICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVsZWFzZU5vbk51bGwoKSk7Ci0gICAg
ICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUoaW52ZXJ0Tm9kZSkpOwotCi0gICAgICAgICAg
ICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZVByb2R1Y3QoY3JlYXRlQ1NTKG9w
ZXJhdGlvbkNoaWxkcmVuLCBzdHlsZSkpOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpNaW46Ci0gICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNYXg6Ci0gICAgICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogewotICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNy
ZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOwotICAgICAgICAgICAgaWYgKGNoaWxk
cmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAg
ICAgIHJldHVybiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKG9w
LCBXVEZNb3ZlKGNoaWxkcmVuKSwgb3BlcmF0aW9uTm9kZS5kZXN0aW5hdGlvbkNhdGVnb3J5KCkp
OwotICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgfQot
ICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGg6IHsKLSAgICAgICAg
Ly8gRklYTUU6IChodHRwOi8vd2Via2l0Lm9yZy9iLzEyMjAzNikgQ3JlYXRlIGEgQ1NTQ2FsY0V4
cHJlc3Npb25Ob2RlIGVxdWl2YWxlbnQgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC4KLSAg
ICAgICAgYXV0byYgYmxlbmQgPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihu
b2RlKTsKLSAgICAgICAgZmxvYXQgcHJvZ3Jlc3MgPSBibGVuZC5wcm9ncmVzcygpOwotICAgICAg
ICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6OkFkZCwg
Y3JlYXRlQmxlbmRIYWxmKGJsZW5kLmZyb20oKSwgc3R5bGUsIDEgLSBwcm9ncmVzcyksIGNyZWF0
ZUJsZW5kSGFsZihibGVuZC50bygpLCBzdHlsZSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0gICAgY2Fz
ZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpVbmRlZmluZWQ6Ci0gICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotc3RhdGljIFJlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBMZW5ndGgmIGxlbmd0aCwg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotewotICAgIHN3aXRjaCAobGVuZ3RoLnR5cGUoKSkg
ewotICAgIGNhc2UgTGVuZ3RoVHlwZTo6UGVyY2VudDoKLSAgICBjYXNlIExlbmd0aFR5cGU6OkZp
eGVkOgotICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVuZ3RoLCBzdHlsZSkpOwotICAgIGNhc2UgTGVuZ3Ro
VHlwZTo6Q2FsY3VsYXRlZDoKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUNTUyhsZW5ndGguY2FsY3Vs
YXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSwgc3R5bGUpOwotICAgIGNhc2UgTGVuZ3RoVHlwZTo6
QXV0bzoKLSAgICBjYXNlIExlbmd0aFR5cGU6OkludHJpbnNpYzoKLSAgICBjYXNlIExlbmd0aFR5
cGU6Ok1pbkludHJpbnNpYzoKLSAgICBjYXNlIExlbmd0aFR5cGU6Ok1pbkNvbnRlbnQ6Ci0gICAg
Y2FzZSBMZW5ndGhUeXBlOjpNYXhDb250ZW50OgotICAgIGNhc2UgTGVuZ3RoVHlwZTo6RmlsbEF2
YWlsYWJsZToKLSAgICBjYXNlIExlbmd0aFR5cGU6OkZpdENvbnRlbnQ6Ci0gICAgY2FzZSBMZW5n
dGhUeXBlOjpSZWxhdGl2ZToKLSAgICBjYXNlIExlbmd0aFR5cGU6OlVuZGVmaW5lZDoKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBudWxscHRyOwotfQot
Ci1TdHJpbmcgQ1NTQ2FsY1ZhbHVlOjpjdXN0b21DU1NUZXh0KCkgY29uc3QKLXsKLSAgICBTdHJp
bmdCdWlsZGVyIGJ1aWxkZXI7Ci0gICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4
dChtX2V4cHJlc3Npb24uZ2V0KCksIGJ1aWxkZXIpOwotICAgIHJldHVybiBidWlsZGVyLnRvU3Ry
aW5nKCk7Ci19Ci0KLWJvb2wgQ1NTQ2FsY1ZhbHVlOjplcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVl
JiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gY29tcGFyZUNTU1ZhbHVlKG1fZXhwcmVzc2lv
biwgb3RoZXIubV9leHByZXNzaW9uKTsKLX0KLQotaW5saW5lIGRvdWJsZSBDU1NDYWxjVmFsdWU6
OmNsYW1wVG9QZXJtaXR0ZWRSYW5nZShkb3VibGUgdmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlICYmIHZhbHVlIDwgMCA/IDAgOiB2YWx1ZTsKLX0K
LQotZG91YmxlIENTU0NhbGNWYWx1ZTo6ZG91YmxlVmFsdWUoKSBjb25zdAotewotICAgIHJldHVy
biBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5kb3VibGVWYWx1ZShwcmltaXRp
dmVUeXBlKCkpKTsKLX0KLQotZG91YmxlIENTU0NhbGNWYWx1ZTo6Y29tcHV0ZUxlbmd0aFB4KGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAotewot
ICAgIHJldHVybiBjbGFtcFRvUGVybWl0dGVkUmFuZ2UobV9leHByZXNzaW9uLT5jb21wdXRlTGVu
Z3RoUHgoY29udmVyc2lvbkRhdGEpKTsKLX0KLQotYm9vbCBDU1NDYWxjVmFsdWU6OmlzQ2FsY0Z1
bmN0aW9uKENTU1ZhbHVlSUQgZnVuY3Rpb25JZCkKLXsKLSAgICBzd2l0Y2ggKGZ1bmN0aW9uSWQp
IHsKLSAgICBjYXNlIENTU1ZhbHVlQ2FsYzoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0Q2FsYzoK
LSAgICBjYXNlIENTU1ZhbHVlTWluOgotICAgIGNhc2UgQ1NTVmFsdWVNYXg6Ci0gICAgY2FzZSBD
U1NWYWx1ZUNsYW1wOgotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBkZWZhdWx0OgotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBDU1ND
YWxjVmFsdWU6OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMgPDwgaW5kZW50
IDw8ICIoIiA8PCAiQ1NTQ2FsY1ZhbHVlIjsKLQotICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3Ry
ZWFtOwotICAgIG11bHRpbGluZVN0cmVhbS5zZXRJbmRlbnQodHMuaW5kZW50KCkgKyAyKTsKLQot
ICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoInNob3VsZCBjbGFtcCBub24tbmVnYXRp
dmUiLCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7Ci0gICAgbXVsdGlsaW5lU3RyZWFtLmR1
bXBQcm9wZXJ0eSgiZXhwcmVzc2lvbiIsIG1fZXhwcmVzc2lvbi5nZXQoKSk7Ci0KLSAgICB0cyA8
PCBtdWx0aWxpbmVTdHJlYW0ucmVsZWFzZSgpOwotICAgIHRzIDw8ICIpXG4iOwotfQotCi1SZWZQ
dHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0ZShDU1NWYWx1ZUlEIGZ1bmN0aW9u
LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIENhbGN1bGF0aW9uQ2F0ZWdvcnkg
ZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSByYW5nZSkKLXsKLSAgICBDU1NDYWxjRXhw
cmVzc2lvbk5vZGVQYXJzZXIgcGFyc2VyKGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOwotICAgIGF1dG8g
ZXhwcmVzc2lvbiA9IHBhcnNlci5wYXJzZUNhbGModG9rZW5zLCBmdW5jdGlvbik7Ci0gICAgaWYg
KCFleHByZXNzaW9uKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIHJlc3VsdCA9
IGFkb3B0UmVmKG5ldyBDU1NDYWxjVmFsdWUoZXhwcmVzc2lvbi5yZWxlYXNlTm9uTnVsbCgpLCBy
YW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGwpKTsKLSAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3Ry
ZWFtIDw8ICJDU1NDYWxjVmFsdWU6OmNyZWF0ZSAiIDw8ICpyZXN1bHQpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0gICAgCi1SZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBDU1NDYWxjVmFsdWU6OmNyZWF0
ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiB2YWx1ZSwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxl
KQotewotICAgIGF1dG8gZXhwcmVzc2lvbiA9IGNyZWF0ZUNTUyh2YWx1ZS5leHByZXNzaW9uKCks
IHN0eWxlKTsKLSAgICBpZiAoIWV4cHJlc3Npb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwot
Ci0gICAgYXV0byBzaW1wbGlmaWVkRXhwcmVzc2lvbiA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpz
aW1wbGlmeShleHByZXNzaW9uLnJlbGVhc2VOb25OdWxsKCkpOwotCi0gICAgYXV0byByZXN1bHQg
PSBhZG9wdFJlZihuZXcgQ1NTQ2FsY1ZhbHVlKFdURk1vdmUoc2ltcGxpZmllZEV4cHJlc3Npb24p
LCB2YWx1ZS5zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoKSkpOwotICAgIExPR19XSVRIX1NUUkVB
TShDYWxjLCBzdHJlYW0gPDwgIkNTU0NhbGNWYWx1ZTo6Y3JlYXRlIGZyb20gQ2FsY3VsYXRpb25W
YWx1ZTogIiA8PCAqcmVzdWx0KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1UZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5
KQotewotICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Ok51bWJlcjogdHMgPDwgIm51bWJlciI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY3VsYXRpb25D
YXRlZ29yeTo6TGVuZ3RoOiB0cyA8PCAibGVuZ3RoIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50OiB0cyA8PCAicGVyY2VudCI7IGJyZWFrOwotICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjogdHMgPDwgInBlcmNlbnQtbnVtYmVy
IjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOiB0
cyA8PCAicGVyY2VudC1sZW5ndGgiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OkFuZ2xlOiB0cyA8PCAiYW5nbGUiOyBicmVhazsKLSAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlRpbWU6IHRzIDw8ICJ0aW1lIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpGcmVxdWVuY3k6IHRzIDw8ICJmcmVxdWVuY3kiOyBicmVhazsKLSAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOiB0cyA8PCAib3RoZXIiOyBicmVhazsKLSAgICB9Ci0K
LSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENTU0NhbGNWYWx1ZSYgdmFsdWUpCi17Ci0gICAgdmFsdWUuZHVtcCh0cyk7Ci0g
ICAgcmV0dXJuIHRzOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDYWxjdWxhdGlvblZhbHVlLmgJKG5vbmV4aXN0ZW50KQpAQCAt
MSwxNTMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0g
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZl
VmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ2FsY3Vs
YXRpb25WYWx1ZS5oIgotCi1uYW1lc3BhY2UgV1RGIHsKLWNsYXNzIFRleHRTdHJlYW07Ci19Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTUGFyc2VyVG9rZW5SYW5nZTsKLWNsYXNz
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotY2xhc3Mg
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiB7Ci1wdWJsaWM6Ci0gICAgZW51bSBUeXBlIHsKLSAgICAgICAgQ3NzQ2FsY1ByaW1p
dGl2ZVZhbHVlID0gMSwKLSAgICAgICAgQ3NzQ2FsY09wZXJhdGlvbiwKLSAgICAgICAgQ3NzQ2Fs
Y05lZ2F0ZSwKLSAgICAgICAgQ3NzQ2FsY0ludmVydCwKLSAgICB9OwotCi0gICAgdmlydHVhbCB+
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKCkgPSBkZWZhdWx0OwotICAgIHZpcnR1YWwgYm9vbCBpc1pl
cm8oKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Np
b25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKENTU1VuaXRU
eXBlKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29s
IGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCB7IHJldHVy
biBtX2NhdGVnb3J5ID09IG90aGVyLm1fY2F0ZWdvcnk7IH0KLSAgICB2aXJ0dWFsIFR5cGUgdHlw
ZSgpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBj
b25zdCA9IDA7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxE
ZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKLSAgICB2aXJ0
dWFsIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hT
ZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCA9IDA7Ci0KLSAgICBDYWxjdWxhdGlvbkNhdGVnb3J5
IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYXRlZ29yeTsgfQotCi0gICAgdmlydHVhbCB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKLQotcHJvdGVjdGVkOgotICAgIENTU0Nh
bGNFeHByZXNzaW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQotICAgICAgICA6
IG1fY2F0ZWdvcnkoY2F0ZWdvcnkpCi0gICAgewotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDYWxj
dWxhdGlvbkNhdGVnb3J5IG1fY2F0ZWdvcnk7Ci19OwotCi1jbGFzcyBDU1NDYWxjVmFsdWUgZmlu
YWwgOiBwdWJsaWMgQ1NTVmFsdWUgewotcHVibGljOgotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2Fs
Y1ZhbHVlPiBjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5n
ZSk7Ci0KLSAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNWYWx1ZT4gY3JlYXRlKGNvbnN0IENhbGN1
bGF0aW9uVmFsdWUmLCBjb25zdCBSZW5kZXJTdHlsZSYpOwotCi0gICAgQ2FsY3VsYXRpb25DYXRl
Z29yeSBjYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwcmVzc2lvbi0+Y2F0ZWdvcnkoKTsg
fQotICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0OwotICAgIGRvdWJsZSBjb21wdXRlTGVu
Z3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OwotICAgIENTU1Vu
aXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCB7IHJldHVybiBtX2V4cHJlc3Npb24tPnByaW1p
dGl2ZVR5cGUoKTsgfQotCi0gICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZUNhbGN1bGF0
aW9uVmFsdWUoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OwotICAgIHZv
aWQgc2V0UGVybWl0dGVkVmFsdWVSYW5nZShWYWx1ZVJhbmdlKTsKLQotICAgIHZvaWQgY29sbGVj
dERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYp
IGNvbnN0OwotICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdDsKLQotICAgIFN0cmluZyBjdXN0b21D
U1NUZXh0KCkgY29uc3Q7Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29u
c3Q7Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgaXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCk7Ci0K
LSAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0OwotCi1wcml2YXRlOgotICAgIENTU0Nh
bGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmLCBib29sIHNob3VsZENsYW1wVG9O
b25OZWdhdGl2ZSk7Ci0KLSAgICBkb3VibGUgY2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSkg
Y29uc3Q7Ci0KLSAgICBjb25zdCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Np
b247Ci0gICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKLX07Ci0KLWlubGluZSBD
U1NDYWxjVmFsdWU6OkNTU0NhbGNWYWx1ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGV4
cHJlc3Npb24sIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKQotICAgIDogQ1NTVmFsdWUo
Q2FsY3VsYXRpb25DbGFzcykKLSAgICAsIG1fZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24p
KQotICAgICwgbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUoc2hvdWxkQ2xhbXBUb05vbk5lZ2F0
aXZlKQotewotfQotCi1pbmxpbmUgUmVmPENhbGN1bGF0aW9uVmFsdWU+IENTU0NhbGNWYWx1ZTo6
Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBj
b252ZXJzaW9uRGF0YSkgY29uc3QKLXsKLSAgICByZXR1cm4gQ2FsY3VsYXRpb25WYWx1ZTo6Y3Jl
YXRlKG1fZXhwcmVzc2lvbi0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRhdGEpLAot
ICAgICAgICBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSA/IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0
aXZlIDogVmFsdWVSYW5nZTo6QWxsKTsKLX0KLQotaW5saW5lIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpz
ZXRQZXJtaXR0ZWRWYWx1ZVJhbmdlKFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgbV9zaG91bGRD
bGFtcFRvTm9uTmVnYXRpdmUgPSByYW5nZSAhPSBWYWx1ZVJhbmdlOjpBbGw7Ci19Ci0KLWlubGlu
ZSB2b2lkIENTU0NhbGNWYWx1ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNp
ZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewotICAgIG1fZXhwcmVz
c2lvbi0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKLX0K
LQotaW5saW5lIHZvaWQgQ1NTQ2FsY1ZhbHVlOjpjb2xsZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAotewot
ICAgIG1fZXhwcmVzc2lvbi0+Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5j
aWVzKHZhbHVlcyk7Ci19Ci0KLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6OlRleHRT
dHJlYW0mLCBDYWxjdWxhdGlvbkNhdGVnb3J5KTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8
PChXVEY6OlRleHRTdHJlYW0mLCBjb25zdCBDU1NDYWxjVmFsdWUmKTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQotCi1TUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19WQUxVRShDU1NDYWxjVmFs
dWUsIGlzQ2FsY1ZhbHVlKCkpCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1ND
QUxDRVhQUkVTU0lPTl9OT0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAotICAgIHN0
YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5v
ZGUpIHsgcmV0dXJuIG5vZGUucHJlZGljYXRlOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
RU5EKCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhZGllbnRWYWx1ZS5jcHAJKHJldmlz
aW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NHcmFkaWVudFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgIkNTU0dyYWRpZW50VmFs
dWUuaCIKIAogI2luY2x1ZGUgIkFuaW1hdGlvblV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkNTU0Nh
bGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NQcmltaXRpdmVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ByaW1pdGl2ZVZhbHVlLmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ByaW1pdGl2ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIsNyArMjIsNyBA
QAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCiAKICNpbmNsdWRlICJDU1NCYXNpY1No
YXBlcy5oIgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1ND
YWxjVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGb250RmFtaWx5LmgiCiAjaW5jbHVkZSAiQ1NTSGVs
cGVyLmgiCiAjaW5jbHVkZSAiQ1NTTWFya3VwLmgiCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVk
ZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRp
b25DYXRlZ29yeS5oIgogI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKICNpbmNsdWRlICJD
b2xvci5oIgogI2luY2x1ZGUgIkNvbG9yU2VyaWFsaXphdGlvbi5oIgpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL0NTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCShyZXZpc2lvbiAyNzgy
MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw3IEBACiAKICNwcmFnbWEgb25jZQogCi0jaW5jbHVk
ZSAiQ1NTQ2FsY3VsYXRpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkNTU0ZvbnRGYW1pbHkuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgog
I2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEuaCIKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhbHVlLmNwcAkocmV2aXNpb24gMjc4MjM5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1Zh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ1NT
QXNwZWN0UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0JvcmRlckltYWdlU2xpY2VWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU0NhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NDYWxjVmFs
dWUuaCIKICNpbmNsdWRlICJDU1NDYW52YXNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NvbnRlbnRE
aXN0cmlidXRpb25WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5n
LmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0
ZWdvcnlNYXBwaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjQ2F0ZWdvcnlNYXBw
aW5nLmgiCisKKyNpbmNsdWRlICJDU1NVbml0cy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0
ZWdvcnkuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitDYWxjdWxhdGlvbkNhdGVnb3J5IGNh
bGNVbml0Q2F0ZWdvcnkoQ1NTVW5pdFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSOgorICAgICAgICByZXR1cm4gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TnVtYmVyOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FTVM6Cisg
ICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VYUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
UFg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NNOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6
OkNTU19NTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSU46CisgICAgY2FzZSBDU1NVbml0
VHlwZTo6Q1NTX1BUOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QQzoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19SRU1T
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19DSFM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6
Q1NTX1ZXOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfVk1JTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKKyAgICAgICAg
cmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDsKKyAgICBjYXNlIENTU1VuaXRUeXBl
OjpDU1NfUEVSQ0VOVEFHRToKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQ7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0RFRzoKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfUkFEOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19HUkFEOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19UVVJOOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6QW5nbGU7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01TOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19TOgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTsK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfSFo6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X0tIWjoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cisg
ICAgfQorfQorCitDYWxjdWxhdGlvbkNhdGVnb3J5IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21i
aW5hdGlvbihDU1NVbml0VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpOdW1iZXI7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BYOgorICAgIGNhc2Ug
Q1NTVW5pdFR5cGU6OkNTU19DTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTU06CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0lOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19QVDoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NT
X1E6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg7CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpQZXJjZW50OworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19ERUc6CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JBRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfR1JB
RDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVFVSTjoKKyAgICAgICAgcmV0dXJuIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOworICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NUzoKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUzoKKyAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlRpbWU7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0haOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19LSFo6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpG
cmVxdWVuY3k7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0VNUzoKKyAgICBjYXNlIENTU1Vu
aXRUeXBlOjpDU1NfRVhTOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19MSFM6CisgICAgY2Fz
ZSBDU1NVbml0VHlwZTo6Q1NTX1JFTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1JMSFM6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVlc6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZIOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19WTUlOOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19WTUFYOgorICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICB9Cit9
CisKK0NTU1VuaXRUeXBlIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShD
YWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsK
KyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjogcmV0dXJuIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoOiByZXR1
cm4gQ1NTVW5pdFR5cGU6OkNTU19QWDsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQ6IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0U7CisgICAgY2FzZSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpBbmdsZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfREVHOworICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZTogcmV0dXJuIENTU1VuaXRUeXBlOjpDU1Nf
TVM7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6IHJldHVybiBDU1NV
bml0VHlwZTo6Q1NTX0haOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6Cisg
ICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOgorICAgIGNhc2UgQ2Fs
Y3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNT
U19VTktOT1dOOworfQorCitib29sIGhhc0RvdWJsZVZhbHVlKENTU1VuaXRUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUjoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUEVSQ0VOVEFHRToKKyAgICBjYXNlIENTU1VuaXRU
eXBlOjpDU1NfRU1TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19FWFM6CisgICAgY2FzZSBD
U1NVbml0VHlwZTo6Q1NTX0NIUzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVNUzoKKyAg
ICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUFg6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NN
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19NTToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfSU46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BUOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19QQzoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfREVHOgorICAgIGNhc2UgQ1NT
VW5pdFR5cGU6OkNTU19SQUQ6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0dSQUQ6CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX1RVUk46CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX01T
OgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19TOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNT
U19IWjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfS0haOgorICAgIGNhc2UgQ1NTVW5pdFR5
cGU6OkNTU19ESU1FTlNJT046CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1ZXOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19WSDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1JTjoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfVk1BWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfRFBQWDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfRFBJOgorICAgIGNhc2UgQ1NTVW5p
dFR5cGU6OkNTU19EUENNOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19GUjoKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfUToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfTEhTOgorICAg
IGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19STEhTOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1Nf
U1RSSU5HOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19GT05UX0ZBTUlMWToKKyAgICBjYXNl
IENTU1VuaXRUeXBlOjpDU1NfVVJJOgorICAgIGNhc2UgQ1NTVW5pdFR5cGU6OkNTU19JREVOVDoK
KyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfQVRUUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfQ09VTlRFUjoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfUkVDVDoKKyAgICBjYXNlIENT
U1VuaXRUeXBlOjpDU1NfUkdCQ09MT1I6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1BBSVI6
CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1VOSUNPREVfUkFOR0U6CisgICAgY2FzZSBDU1NV
bml0VHlwZTo6Q1NTX0NPVU5URVJfTkFNRToKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpDU1NfU0hB
UEU6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX1FVQUQ6CisgICAgY2FzZSBDU1NVbml0VHlw
ZTo6Q1NTX1FVSVJLWV9FTVM6CisgICAgY2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NBTEM6CisgICAg
Y2FzZSBDU1NVbml0VHlwZTo6Q1NTX0NBTENfUEVSQ0VOVEFHRV9XSVRIX05VTUJFUjoKKyAgICBj
YXNlIENTU1VuaXRUeXBlOjpDU1NfQ0FMQ19QRVJDRU5UQUdFX1dJVEhfTEVOR1RIOgorICAgIGNh
c2UgQ1NTVW5pdFR5cGU6OkNTU19QUk9QRVJUWV9JRDoKKyAgICBjYXNlIENTU1VuaXRUeXBlOjpD
U1NfVkFMVUVfSUQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKworfQpJbmRleDogU291cmNlL1dl
YkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaAkobm9uZXhpc3Rl
bnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjQ2F0ZWdvcnlNYXBwaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAy
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2VudW0gY2xhc3MgQ1NTVW5pdFR5cGUgOiB1aW50
OF90OworZW51bSBjbGFzcyBDYWxjdWxhdGlvbkNhdGVnb3J5IDogdWludDhfdDsKKworQ2FsY3Vs
YXRpb25DYXRlZ29yeSBjYWxjVW5pdENhdGVnb3J5KENTU1VuaXRUeXBlKTsKK0NhbGN1bGF0aW9u
Q2F0ZWdvcnkgY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKENTU1VuaXRUeXBlKTsK
K0NTU1VuaXRUeXBlIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29yeShDYWxj
dWxhdGlvbkNhdGVnb3J5KTsKK2Jvb2wgaGFzRG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpOworCit9
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9u
Tm9kZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiB0cywg
Y29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlKQoreworICAgIG5vZGUuZHVtcCh0cyk7
CisgICAgcmV0dXJuIHRzOworfQorCisjaWYgIUxPR19ESVNBQkxFRAorU3RyaW5nIHByZXR0eVBy
aW50Tm9kZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpCit7CisgICAgVGV4dFN0
cmVhbSBtdWx0aWxpbmVTdHJlYW07CisgICAgbXVsdGlsaW5lU3RyZWFtIDw8IG5vZGU7CisgICAg
cmV0dXJuIG11bHRpbGluZVN0cmVhbS5yZWxlYXNlKCk7Cit9CisKK1N0cmluZyBwcmV0dHlQcmlu
dE5vZGVzKGNvbnN0IFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4mIG5vZGVzKQor
eworICAgIFRleHRTdHJlYW0gbXVsdGlsaW5lU3RyZWFtOworICAgIG11bHRpbGluZVN0cmVhbSA8
PCBub2RlczsKKyAgICByZXR1cm4gbXVsdGlsaW5lU3RyZWFtLnJlbGVhc2UoKTsKK30KKyNlbmRp
ZgorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVzc2lvbk5v
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjRXhwcmVz
c2lvbk5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1ND
YWxjRXhwcmVzc2lvbk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGN1bGF0aW9uQ2F0ZWdv
cnkuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CisKK2VudW0gQ1NTUHJvcGVydHlJ
RCA6IHVpbnQxNl90OworCitlbnVtIGNsYXNzIENTU1VuaXRUeXBlIDogdWludDhfdDsKKworY2xh
c3MgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlIDogcHVibGljIFJlZkNvdW50ZWQ8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiB7CitwdWJsaWM6CisgICAgZW51bSBUeXBlIHsKKyAgICAgICAgQ3NzQ2FsY1By
aW1pdGl2ZVZhbHVlID0gMSwKKyAgICAgICAgQ3NzQ2FsY09wZXJhdGlvbiwKKyAgICAgICAgQ3Nz
Q2FsY05lZ2F0ZSwKKyAgICAgICAgQ3NzQ2FsY0ludmVydCwKKyAgICB9OworCisgICAgdmlydHVh
bCB+Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlKCkgPSBkZWZhdWx0OworICAgIHZpcnR1YWwgYm9vbCBp
c1plcm8oKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBjcmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgZG91YmxlIGRvdWJsZVZhbHVlKENTU1Vu
aXRUeXBlKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBi
b29sIGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX2NhdGVnb3J5ID09IG90aGVyLm1fY2F0ZWdvcnk7IH0KKyAgICB2aXJ0dWFsIFR5cGUg
dHlwZSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUo
KSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9u
YWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD4mKSBjb25zdCA9IDA7CisKKyAgICBDYWxjdWxhdGlvbkNhdGVn
b3J5IGNhdGVnb3J5KCkgY29uc3QgeyByZXR1cm4gbV9jYXRlZ29yeTsgfQorCisgICAgdmlydHVh
bCB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJvdGVjdGVkOgorICAgIENT
U0NhbGNFeHByZXNzaW9uTm9kZShDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQorICAgICAg
ICA6IG1fY2F0ZWdvcnkoY2F0ZWdvcnkpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBD
YWxjdWxhdGlvbkNhdGVnb3J5IG1fY2F0ZWdvcnk7Cit9OworCitUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mLCBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKTsKKworI2lmICFM
T0dfRElTQUJMRUQKK1N0cmluZyBwcmV0dHlQcmludE5vZGUoY29uc3QgQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlJik7CitTdHJpbmcgcHJldHR5UHJpbnROb2Rlcyhjb25zdCBWZWN0b3I8UmVmPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4+Jik7CisjZW5kaWYKKworfQorCisjZGVmaW5lIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShUb1ZhbHVlVHlwZU5hbWUsIHByZWRp
Y2F0ZSkgXAorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpUb1ZhbHVlVHlw
ZU5hbWUpIFwKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlJiBub2RlKSB7IHJldHVybiBub2RlLnByZWRpY2F0ZTsgfSBcCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0VORCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1ND
YWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIuaCIKKwor
I2luY2x1ZGUgIkNTU0NhbGNDYXRlZ29yeU1hcHBpbmcuaCIKKyNpbmNsdWRlICJDU1NDYWxjSW52
ZXJ0Tm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNOZWdhdGVOb2RlLmgiCisjaW5jbHVkZSAiQ1NT
Q2FsY09wZXJhdGlvbk5vZGUuaCIKKyNpbmNsdWRlICJDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
LmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUGFyc2VyVG9rZW4u
aCIKKyNpbmNsdWRlICJDU1NQYXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBjb25zdGV4cHIgaW50IG1heEV4cHJl
c3Npb25EZXB0aCA9IDEwMDsKKworLy8gPGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFs
dWVzLTQvI2NhbGMtc3ludGF4PjoKKy8vIDxjYWxjKCk+ICA9IGNhbGMoIDxjYWxjLXN1bT4gKQor
Ly8gPG1pbigpPiAgID0gbWluKCA8Y2FsYy1zdW0+IyApCisvLyA8bWF4KCk+ICAgPSBtYXgoIDxj
YWxjLXN1bT4jICkKKy8vIDxjbGFtcCgpPiA9IGNsYW1wKCA8Y2FsYy1zdW0+I3szfSApCisvLyA8
c2luKCk+ICAgPSBzaW4oIDxjYWxjLXN1bT4gKQorLy8gPGNvcygpPiAgID0gY29zKCA8Y2FsYy1z
dW0+ICkKKy8vIDx0YW4oKT4gICA9IHRhbiggPGNhbGMtc3VtPiApCisvLyA8YXNpbigpPiAgPSBh
c2luKCA8Y2FsYy1zdW0+ICkKKy8vIDxhY29zKCk+ICA9IGFjb3MoIDxjYWxjLXN1bT4gKQorLy8g
PGF0YW4oKT4gID0gYXRhbiggPGNhbGMtc3VtPiApCisvLyA8YXRhbjIoKT4gPSBhdGFuMiggPGNh
bGMtc3VtPiwgPGNhbGMtc3VtPiApCisvLyA8cG93KCk+ICAgPSBwb3coIDxjYWxjLXN1bT4sIDxj
YWxjLXN1bT4gKQorLy8gPHNxcnQoKT4gID0gc3FydCggPGNhbGMtc3VtPiApCisvLyA8aHlwb3Qo
KT4gPSBoeXBvdCggPGNhbGMtc3VtPiMgKQorLy8gPGNhbGMtc3VtPiA9IDxjYWxjLXByb2R1Y3Q+
IFsgWyAnKycgfCAnLScgXSA8Y2FsYy1wcm9kdWN0PiBdKgorLy8gPGNhbGMtcHJvZHVjdD4gPSA8
Y2FsYy12YWx1ZT4gWyBbICcqJyB8ICcvJyBdIDxjYWxjLXZhbHVlPiBdKgorLy8gPGNhbGMtdmFs
dWU+ID0gPG51bWJlcj4gfCA8ZGltZW5zaW9uPiB8IDxwZXJjZW50YWdlPiB8ICggPGNhbGMtc3Vt
PiApCitSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQ
YXJzZXI6OnBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlIHRva2VucywgQ1NTVmFsdWVJRCBm
dW5jdGlvbikKK3sKKyAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKworICAgIFJlZlB0
cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IHJlc3VsdDsKKyAgICBib29sIG9rID0gcGFyc2VDYWxj
RnVuY3Rpb24odG9rZW5zLCBmdW5jdGlvbiwgMCwgcmVzdWx0KTsKKyAgICBpZiAoIW9rIHx8ICF0
b2tlbnMuYXRFbmQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywg
c3RyZWFtIDw8ICJDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsYyAiIDw8IHBy
ZXR0eVByaW50Tm9kZSgqcmVzdWx0KSk7CisKKyAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9u
Tm9kZTo6c2ltcGxpZnkocmVzdWx0LnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgTE9HX1dJVEhf
U1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyOjpwYXJz
ZUNhbGMgLSBhZnRlciBzaW1wbGlmaWNhdGlvbiAiIDw8IHByZXR0eVByaW50Tm9kZSgqcmVzdWx0
KSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitjaGFyIENTU0NhbGNFeHByZXNzaW9uTm9k
ZVBhcnNlcjo6b3BlcmF0b3JWYWx1ZShjb25zdCBDU1NQYXJzZXJUb2tlbiYgdG9rZW4pCit7Cisg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBEZWxpbWl0ZXJUb2tlbikKKyAgICAgICAgcmV0dXJuIHRv
a2VuLmRlbGltaXRlcigpOworICAgIHJldHVybiAwOworfQorCitlbnVtIFBhcnNlU3RhdGUgewor
ICAgIE9LLAorICAgIFRvb0RlZXAsCisgICAgTm9Nb3JlVG9rZW5zCit9OworCitzdGF0aWMgUGFy
c2VTdGF0ZSBjaGVja0RlcHRoQW5kSW5kZXgoaW50IGRlcHRoLCBDU1NQYXJzZXJUb2tlblJhbmdl
IHRva2VucykKK3sKKyAgICBpZiAodG9rZW5zLmF0RW5kKCkpCisgICAgICAgIHJldHVybiBOb01v
cmVUb2tlbnM7CisgICAgaWYgKGRlcHRoID4gbWF4RXhwcmVzc2lvbkRlcHRoKSB7CisgICAgICAg
IExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkRlcHRoICIgPDwgZGVwdGggPDwgIiBl
eGNlZWRlZCBtYXhFeHByZXNzaW9uRGVwdGggIiA8PCBtYXhFeHByZXNzaW9uRGVwdGgpOworICAg
ICAgICByZXR1cm4gVG9vRGVlcDsKKyAgICB9CisgICAgcmV0dXJuIE9LOworfQorCitib29sIENT
U0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9r
ZW5SYW5nZSYgdG9rZW5zLCBDU1NWYWx1ZUlEIGZ1bmN0aW9uSUQsIGludCBkZXB0aCwgUmVmUHRy
PENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFu
ZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyAiYXJndW1lbnRzIiByZWZlcnMgdG8gdGhpbmdzIGJldHdlZW4gY29tbWFzLgorICAgIHVu
c2lnbmVkIG1pbkFyZ3VtZW50Q291bnQgPSAxOworICAgIE9wdGlvbmFsPHVuc2lnbmVkPiBtYXhB
cmd1bWVudENvdW50OworCisgICAgc3dpdGNoIChmdW5jdGlvbklEKSB7CisgICAgY2FzZSBDU1NW
YWx1ZU1pbjoKKyAgICBjYXNlIENTU1ZhbHVlTWF4OgorICAgICAgICBtYXhBcmd1bWVudENvdW50
ID0gc3RkOjpudWxsb3B0OworICAgICAgICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6
CisgICAgICAgIG1pbkFyZ3VtZW50Q291bnQgPSAzOworICAgICAgICBtYXhBcmd1bWVudENvdW50
ID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZUNhbGM6CisgICAgICAgIG1h
eEFyZ3VtZW50Q291bnQgPSAxOworICAgICAgICBicmVhazsKKyAgICAvLyBUT0RPOiBjbGFtcCwg
c2luLCBjb3MsIHRhbiwgYXNpbiwgYWNvcywgYXRhbiwgYXRhbjIsIHBvdywgc3FydCwgaHlwb3Qu
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgVmVjdG9yPFJlZjxD
U1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKworICAgIGJvb2wgcmVxdWlyZUNvbW1hID0g
ZmFsc2U7CisgICAgdW5zaWduZWQgYXJndW1lbnRDb3VudCA9IDA7CisgICAgd2hpbGUgKCF0b2tl
bnMuYXRFbmQoKSkgeworICAgICAgICB0b2tlbnMuY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAg
ICAgaWYgKHJlcXVpcmVDb21tYSkgeworICAgICAgICAgICAgaWYgKHRva2Vucy5jb25zdW1lKCku
dHlwZSgpICE9IENvbW1hVG9rZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIH0KKworICAgICAg
ICBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBub2RlOworICAgICAgICBpZiAoIXBhcnNl
Q2FsY1N1bSh0b2tlbnMsIGRlcHRoLCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICArK2FyZ3VtZW50Q291bnQ7CisgICAgICAgIGlmIChtYXhBcmd1bWVudENvdW50
ICYmIGFyZ3VtZW50Q291bnQgPiBtYXhBcmd1bWVudENvdW50LnZhbHVlKCkpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbm9kZXMuYXBwZW5kKG5vZGUucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgIHJlcXVpcmVDb21tYSA9IHRydWU7CisgICAgfQorICAgIAorICAgIGlm
IChhcmd1bWVudENvdW50IDwgbWluQXJndW1lbnRDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgc3dpdGNoIChmdW5jdGlvbklEKSB7CisgICAgY2FzZSBDU1NWYWx1ZU1pbjoKKyAg
ICAgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFt
cChDYWxjT3BlcmF0b3I6Ok1pbiwgV1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29y
eSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ1NTVmFsdWVNYXg6CisgICAgICAgIHJlc3Vs
dCA9IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJh
dG9yOjpNYXgsIFdURk1vdmUobm9kZXMpLCBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENTU1ZhbHVlQ2xhbXA6CisgICAgICAgIHJlc3VsdCA9IENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9yOjpDbGFt
cCwgV1RGTW92ZShub2RlcyksIG1fZGVzdGluYXRpb25DYXRlZ29yeSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRDYWxjOgorICAgIGNhc2UgQ1NTVmFsdWVDYWxjOgor
ICAgICAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlU3VtKFdURk1vdmUo
bm9kZXMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgLy8gVE9ETzogY2xhbXAsIHNpbiwgY29zLCB0
YW4sIGFzaW4sIGFjb3MsIGF0YW4sIGF0YW4yLCBwb3csIHNxcnQsIGh5cG90CisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuICEhcmVzdWx0OworfQorCiti
b29sIENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcjo6cGFyc2VWYWx1ZShDU1NQYXJzZXJUb2tl
blJhbmdlJiB0b2tlbnMsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiByZXN1bHQpCit7
CisgICAgLy8gRklYTUU6IEFkZCBjb2RlIGhlcmUgdG8gcGFyc2UgQ1NTVmFsaWRJRCBmb3IgbmFt
ZWQgY29uc3RhbnRzLgorCisgICAgQ1NTUGFyc2VyVG9rZW4gdG9rZW4gPSB0b2tlbnMuY29uc3Vt
ZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICBpZiAoISh0b2tlbi50eXBlKCkgPT0gTnVtYmVy
VG9rZW4gfHwgdG9rZW4udHlwZSgpID09IFBlcmNlbnRhZ2VUb2tlbiB8fCB0b2tlbi50eXBlKCkg
PT0gRGltZW5zaW9uVG9rZW4pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgYXV0
byB0eXBlID0gdG9rZW4udW5pdFR5cGUoKTsKKyAgICBpZiAoY2FsY1VuaXRDYXRlZ29yeSh0eXBl
KSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIAorICAgIHJlc3VsdCA9IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHRva2VuLm51bWVyaWNWYWx1ZSgpLCB0eXBlKSk7CisgICAg
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
OjpwYXJzZUNhbGNWYWx1ZShDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwg
UmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tE
ZXB0aEFuZEluZGV4KGRlcHRoLCB0b2tlbnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvIGZpbmRGdW5jdGlvbklkID0gWyZdKENTU1ZhbHVlSUQmIGZ1bmN0aW9uSWQp
IHsKKyAgICAgICAgaWYgKHRva2Vucy5wZWVrKCkudHlwZSgpID09IExlZnRQYXJlbnRoZXNpc1Rv
a2VuKSB7CisgICAgICAgICAgICBmdW5jdGlvbklkID0gQ1NTVmFsdWVDYWxjOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBmdW5jdGlvbklkID0gdG9rZW5z
LnBlZWsoKS5mdW5jdGlvbklkKCk7CisgICAgICAgIHJldHVybiBDU1NDYWxjVmFsdWU6OmlzQ2Fs
Y0Z1bmN0aW9uKGZ1bmN0aW9uSWQpOworICAgIH07CisKKyAgICBDU1NWYWx1ZUlEIGZ1bmN0aW9u
SWQ7CisgICAgaWYgKGZpbmRGdW5jdGlvbklkKGZ1bmN0aW9uSWQpKSB7CisgICAgICAgIENTU1Bh
cnNlclRva2VuUmFuZ2UgaW5uZXJSYW5nZSA9IHRva2Vucy5jb25zdW1lQmxvY2soKTsKKyAgICAg
ICAgdG9rZW5zLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CisgICAgICAgIGlubmVyUmFuZ2UuY29uc3Vt
ZVdoaXRlc3BhY2UoKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlQ2FsY0Z1bmN0aW9uKGlubmVyUmFu
Z2UsIGZ1bmN0aW9uSWQsIGRlcHRoICsgMSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
cGFyc2VWYWx1ZSh0b2tlbnMsIHJlc3VsdCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlUGFyc2VyOjpwYXJzZUNhbGNQcm9kdWN0KENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2Vucywg
aW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYgcmVzdWx0KQoreworICAg
IGlmIChjaGVja0RlcHRoQW5kSW5kZXgoZGVwdGgsIHRva2VucykgIT0gT0spCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+IGZpcnN0VmFs
dWU7CisgICAgaWYgKCFwYXJzZUNhbGNWYWx1ZSh0b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiBub2RlczsKKworICAgIHdoaWxlICghdG9rZW5zLmF0RW5kKCkpIHsKKyAgICAgICAg
Y2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9wZXJhdG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7Cisg
ICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3Bl
cmF0b3I6Ok11bHRpcGx5KSAmJiBvcGVyYXRvckNoYXJhY3RlciAhPSBzdGF0aWNfY2FzdDxjaGFy
PihDYWxjT3BlcmF0b3I6OkRpdmlkZSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgdG9r
ZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIAorICAgICAgICBSZWZQ
dHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBuZXh0VmFsdWU7CisgICAgICAgIGlmICghcGFyc2VD
YWxjVmFsdWUodG9rZW5zLCBkZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVlKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciA9PSBz
dGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkRpdmlkZSkpCisgICAgICAgICAgICBuZXh0
VmFsdWUgPSBDU1NDYWxjSW52ZXJ0Tm9kZTo6Y3JlYXRlKG5leHRWYWx1ZS5yZWxlYXNlTm9uTnVs
bCgpKTsKKworICAgICAgICBpZiAoZmlyc3RWYWx1ZSkKKyAgICAgICAgICAgIG5vZGVzLmFwcGVu
ZChmaXJzdFZhbHVlLnJlbGVhc2VOb25OdWxsKCkpOworCisgICAgICAgIG5vZGVzLmFwcGVuZChu
ZXh0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQorCisgICAgaWYgKG5vZGVzLmlzRW1w
dHkoKSkgeworICAgICAgICByZXN1bHQgPSBXVEZNb3ZlKGZpcnN0VmFsdWUpOworICAgICAgICBy
ZXR1cm4gISFyZXN1bHQ7CisgICAgfQorCisgICAgcmVzdWx0ID0gQ1NTQ2FsY09wZXJhdGlvbk5v
ZGU6OmNyZWF0ZVByb2R1Y3QoV1RGTW92ZShub2RlcykpOworICAgIHJldHVybiAhIXJlc3VsdDsK
K30KKworYm9vbCBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXI6OnBhcnNlQ2FsY1N1bShDU1NQ
YXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4mIHJlc3VsdCkKK3sKKyAgICBpZiAoY2hlY2tEZXB0aEFuZEluZGV4KGRlcHRoLCB0
b2tlbnMpICE9IE9LKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBSZWZQdHI8Q1NTQ2Fs
Y0V4cHJlc3Npb25Ob2RlPiBmaXJzdFZhbHVlOworICAgIGlmICghcGFyc2VDYWxjUHJvZHVjdCh0
b2tlbnMsIGRlcHRoLCBmaXJzdFZhbHVlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
VmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiBub2RlczsKKworICAgIHdoaWxlICgh
dG9rZW5zLmF0RW5kKCkpIHsKKyAgICAgICAgY2hhciBvcGVyYXRvckNoYXJhY3RlciA9IG9wZXJh
dG9yVmFsdWUodG9rZW5zLnBlZWsoKSk7CisgICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciAh
PSBzdGF0aWNfY2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OkFkZCkgJiYgb3BlcmF0b3JDaGFyYWN0
ZXIgIT0gc3RhdGljX2Nhc3Q8Y2hhcj4oQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdCkpCisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBpZiAoKCZ0b2tlbnMucGVlaygpIC0gMSktPnR5cGUoKSAh
PSBXaGl0ZXNwYWNlVG9rZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7IC8vIGNhbGMoMXB4
KyAycHgpIGlzIGludmFsaWQKKworICAgICAgICB0b2tlbnMuY29uc3VtZSgpOworICAgICAgICBp
ZiAodG9rZW5zLnBlZWsoKS50eXBlKCkgIT0gV2hpdGVzcGFjZVRva2VuKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOyAvLyBjYWxjKDFweCArMnB4KSBpcyBpbnZhbGlkCisKKyAgICAgICAgdG9r
ZW5zLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisKKyAgICAgICAgUmVmUHRyPENTU0Nh
bGNFeHByZXNzaW9uTm9kZT4gbmV4dFZhbHVlOworICAgICAgICBpZiAoIXBhcnNlQ2FsY1Byb2R1
Y3QodG9rZW5zLCBkZXB0aCwgbmV4dFZhbHVlKSB8fCAhbmV4dFZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChvcGVyYXRvckNoYXJhY3RlciA9PSBzdGF0aWNf
Y2FzdDxjaGFyPihDYWxjT3BlcmF0b3I6OlN1YnRyYWN0KSkKKyAgICAgICAgICAgIG5leHRWYWx1
ZSA9IENTU0NhbGNOZWdhdGVOb2RlOjpjcmVhdGUobmV4dFZhbHVlLnJlbGVhc2VOb25OdWxsKCkp
OworCisgICAgICAgIGlmIChmaXJzdFZhbHVlKQorICAgICAgICAgICAgbm9kZXMuYXBwZW5kKGZp
cnN0VmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CisKKyAgICAgICAgbm9kZXMuYXBwZW5kKG5leHRW
YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9CisKKyAgICBpZiAobm9kZXMuaXNFbXB0eSgp
KSB7CisgICAgICAgIHJlc3VsdCA9IFdURk1vdmUoZmlyc3RWYWx1ZSk7CisgICAgICAgIHJldHVy
biAhIXJlc3VsdDsKKyAgICB9CisKKyAgICByZXN1bHQgPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
Y3JlYXRlU3VtKFdURk1vdmUobm9kZXMpKTsKKyAgICByZXR1cm4gISFyZXN1bHQ7Cit9CisKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNFeHByZXNz
aW9uTm9kZVBhcnNlci5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxj
L0NTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisg
KiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICog
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1ZhbHVlS2V5
d29yZHMuaCIKKyNpbmNsdWRlICJDYWxjT3BlcmF0b3IuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlv
bkNhdGVnb3J5LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlOworY2xhc3MgQ1NTUGFyc2VyVG9rZW47CitjbGFzcyBDU1NQYXJzZXJUb2tlblJh
bmdlOworCitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGVQYXJzZXIgeworcHVibGljOgorICAg
IGV4cGxpY2l0IENTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlcihDYWxjdWxhdGlvbkNhdGVnb3J5
IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCisgICAgICAgIDogbV9kZXN0aW5hdGlvbkNhdGVnb3J5KGRl
c3RpbmF0aW9uQ2F0ZWdvcnkpCisgICAgeworICAgIH0KKworICAgIFJlZlB0cjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+IHBhcnNlQ2FsYyhDU1NQYXJzZXJUb2tlblJhbmdlLCBDU1NWYWx1ZUlEIGZ1
bmN0aW9uKTsKKyAgICAKK3ByaXZhdGU6CisgICAgY2hhciBvcGVyYXRvclZhbHVlKGNvbnN0IENT
U1BhcnNlclRva2VuJik7CisKKyAgICBib29sIHBhcnNlVmFsdWUoQ1NTUGFyc2VyVG9rZW5SYW5n
ZSYsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+Jik7CisgICAgYm9vbCBwYXJzZVZhbHVl
VGVybShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxjRnVuY3Rpb24oQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIENTU1ZhbHVlSUQsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9k
ZT4mKTsKKyAgICBib29sIHBhcnNlQ2FsY1N1bShDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRl
cHRoLCBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxj
UHJvZHVjdChDU1NQYXJzZXJUb2tlblJhbmdlJiwgaW50IGRlcHRoLCBSZWZQdHI8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPiYpOworICAgIGJvb2wgcGFyc2VDYWxjVmFsdWUoQ1NTUGFyc2VyVG9rZW5S
YW5nZSYsIGludCBkZXB0aCwgUmVmUHRyPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mKTsKKworICAg
IENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9kZXN0aW5hdGlvbkNhdGVnb3J5OworfTsKKworfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY0ludmVydE5vZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZlcnROb2RlLmNwcAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0Tm9kZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjSW52ZXJ0Tm9kZS5oIgorCisjaW5jbHVkZSAi
Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNz
aW9uTm9kZT4gQ1NTQ2FsY0ludmVydE5vZGU6OmNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdAoreworICAgIGF1
dG8gY2hpbGROb2RlID0gbV9jaGlsZC0+Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29udmVyc2lvbkRh
dGEpOworICAgIHJldHVybiBtYWtlVW5pcXVlPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihXVEZN
b3ZlKGNoaWxkTm9kZSkpOworfQorCitkb3VibGUgQ1NTQ2FsY0ludmVydE5vZGU6OmRvdWJsZVZh
bHVlKENTU1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAoreworICAgIGF1dG8gY2hpbGRWYWx1ZSA9
IG1fY2hpbGQtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICBpZiAoIWNoaWxkVmFsdWUpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCk7Cisg
ICAgcmV0dXJuIDEuMCAvIGNoaWxkVmFsdWU7Cit9CisKK2RvdWJsZSBDU1NDYWxjSW52ZXJ0Tm9k
ZTo6Y29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhKSBjb25zdAoreworICAgIGF1dG8gY2hpbGRWYWx1ZSA9IG1fY2hpbGQtPmNvbXB1
dGVMZW5ndGhQeChjb252ZXJzaW9uRGF0YSk7CisgICAgaWYgKCFjaGlsZFZhbHVlKQorICAgICAg
ICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjppbmZpbml0eSgpOworICAgIHJl
dHVybiAxLjAgLyBjaGlsZFZhbHVlOworfQorCit2b2lkIENTU0NhbGNJbnZlcnROb2RlOjpkdW1w
KFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICIxLyIgPDwgbV9jaGlsZC5nZXQo
KTsKK30KKworCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjSW52ZXJ0
Tm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNJbnZl
cnROb2RlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2Fs
Y0ludmVydE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxjSW52ZXJ0Tm9kZSBmaW5hbCA6IHB1
YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q1NT
Q2FsY0ludmVydE5vZGU+IGNyZWF0ZShSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxk
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ1NTQ2FsY0ludmVydE5vZGUo
V1RGTW92ZShjaGlsZCkpKTsKKyAgICB9CisKKyAgICBjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5v
ZGUmIGNoaWxkKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorICAgIENTU0NhbGNF
eHByZXNzaW9uTm9kZSYgY2hpbGQoKSB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9CisKKyAgICB2
b2lkIHNldENoaWxkKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpIHsgbV9jaGls
ZCA9IFdURk1vdmUoY2hpbGQpOyB9CisKK3ByaXZhdGU6CisgICAgQ1NTQ2FsY0ludmVydE5vZGUo
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKKyAgICAgICAgOiBDU1NDYWxjRXhw
cmVzc2lvbk5vZGUoY2hpbGQtPmNhdGVnb3J5KCkpCisgICAgICAgICwgbV9jaGlsZChXVEZNb3Zl
KGNoaWxkKSkKKyAgICB7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNz
aW9uTm9kZT4gY3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSYpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2NoaWxkLT5pc1plcm8oKTsgfQorICAgIGRvdWJsZSBkb3VibGVWYWx1ZShDU1NVbml0
VHlwZSkgY29uc3QgZmluYWw7CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmluYWw7CisgICAgVHlwZSB0eXBlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gVHlwZTo6Q3NzQ2FsY0ludmVydDsgfQorICAgIENTU1VuaXRUeXBl
IHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2NoaWxkLT5wcmltaXRpdmVU
eXBlKCk7IH0KKworICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNp
ZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJvcGVydGllcykgY29uc3QgZmluYWwgeyBtX2No
aWxkLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsg
fQorICAgIHZvaWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGlsZC0+
Y29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHByb3BlcnRpZXMpOyB9
CisKKyAgICB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgUmVmPENT
U0NhbGNFeHByZXNzaW9uTm9kZT4gbV9jaGlsZDsKK307CisKK30KKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19DU1NDQUxDRVhQUkVTU0lPTl9OT0RFKENTU0NhbGNJbnZlcnROb2RlLCB0eXBlKCkg
PT0gV2ViQ29yZTo6Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjSW52ZXJ0KQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVOb2RlLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjTmVnYXRlTm9kZS5oIgorCisjaW5jbHVk
ZSAiQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlQ2FsY0V4cHJlc3Npb24oY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAg
YXV0byBjaGlsZE5vZGUgPSBtX2NoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9u
RGF0YSk7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4oV1RG
TW92ZShjaGlsZE5vZGUpKTsKK30KKwordm9pZCBDU1NDYWxjTmVnYXRlTm9kZTo6ZHVtcChUZXh0
U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiLSIgPDwgbV9jaGlsZC5nZXQoKTsKK30K
KworfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY05lZ2F0ZU5vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjTmVnYXRlTm9kZS5o
CShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNOZWdhdGVO
b2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTQ2FsY05lZ2F0ZU5vZGUgZmluYWwgOiBwdWJsaWMgQ1NT
Q2FsY0V4cHJlc3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENTU0NhbGNOZWdh
dGVOb2RlPiBjcmVhdGUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBjaGlsZCkKKyAgICB7
CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNOZWdhdGVOb2RlKFdURk1vdmUo
Y2hpbGQpKSk7CisgICAgfQorCisgICAgY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBjaGls
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KKyAgICBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUmIGNoaWxkKCkgeyByZXR1cm4gbV9jaGlsZC5nZXQoKTsgfQorCisgICAgdm9pZCBzZXRD
aGlsZChSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGNoaWxkKSB7IG1fY2hpbGQgPSBXVEZN
b3ZlKGNoaWxkKTsgfQorCitwcml2YXRlOgorICAgIENTU0NhbGNOZWdhdGVOb2RlKFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+JiYgY2hpbGQpCisgICAgICAgIDogQ1NTQ2FsY0V4cHJlc3Npb25O
b2RlKGNoaWxkLT5jYXRlZ29yeSgpKQorICAgICAgICAsIG1fY2hpbGQoV1RGTW92ZShjaGlsZCkp
CisgICAgeworICAgIH0KKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+
IGNyZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBj
b25zdCBmaW5hbDsKKworICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9j
aGlsZC0+aXNaZXJvKCk7IH0KKyAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5p
dFR5cGUpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIC1tX2NoaWxkLT5kb3VibGVWYWx1ZSh1bml0VHlw
ZSk7IH0KKyAgICBkb3VibGUgY29tcHV0ZUxlbmd0aFB4KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEmIGNvbnZlcnNpb25EYXRhKSBjb25zdCBmaW5hbCB7IHJldHVybiAtbV9jaGlsZC0+
Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25EYXRhKTsgfQorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIFR5cGU6OkNzc0NhbGNOZWdhdGU7IH0KKyAgICBDU1NVbml0VHlwZSBw
cmltaXRpdmVUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9jaGlsZC0+cHJpbWl0aXZlVHlw
ZSgpOyB9CisKKyAgICB2b2lkIGNvbGxlY3REaXJlY3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVz
KEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3BlcnRpZXMpIGNvbnN0IGZpbmFsIHsgbV9jaGls
ZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMocHJvcGVydGllcyk7IH0K
KyAgICB2b2lkIGNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0aWVzKSBjb25zdCBmaW5hbCB7IG1fY2hpbGQtPmNv
bGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhwcm9wZXJ0aWVzKTsgfQor
CisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+IG1fY2hpbGQ7Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShDU1NDYWxjTmVnYXRlTm9kZSwgdHlwZSgpID09
IFdlYkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY05lZ2F0ZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNPcGVyYXRpb25Ob2RlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY09wZXJh
dGlvbk5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxMCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg
KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxjT3BlcmF0aW9uTm9kZS5o
IgorCisjaW5jbHVkZSAiQ1NTQ2FsY0NhdGVnb3J5TWFwcGluZy5oIgorI2luY2x1ZGUgIkNTU0Nh
bGNJbnZlcnROb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUuaCIKKyNpbmNsdWRl
ICJDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25P
cGVyYXRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBUaGlzIGlzIHRoZSByZXN1
bHQgb2YgdGhlICJUbyBhZGQgdHdvIHR5cGVzIHR5cGUxIGFuZCB0eXBlMiwgcGVyZm9ybSB0aGUg
Zm9sbG93aW5nIHN0ZXBzOiIgcnVsZXMuCisKK3N0YXRpYyBjb25zdCBDYWxjdWxhdGlvbkNhdGVn
b3J5IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNh
dGVnb3J5OjpBbmdsZSldW3N0YXRpY19jYXN0PHVuc2lnbmVkPihDYWxjdWxhdGlvbkNhdGVnb3J5
OjpBbmdsZSldID0geworLy8gICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyICAgICAgICAg
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciAgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aAorICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyLCAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dE51bWJlciwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfSwgLy8gICAgICAgICBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIKKyAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAg
ICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgICAgICAgIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6OlBlcmNlbnRMZW5ndGgsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAg
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGggfSwgLy8gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6TGVuZ3RoCisgICAgeyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoLCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQ
ZXJjZW50LCAgICAgICBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLCBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoIH0sIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBl
cmNlbnQKKyAgICB7IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyLCAgICAgICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRO
dW1iZXIsIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIsIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyIH0sIC8vICAgICAgICAgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51
bWJlcgorICAgIHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudExlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExl
bmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIsICAgICAgICAgQ2FsY3VsYXRpb25DYXRl
Z29yeTo6UGVyY2VudExlbmd0aCB9LCAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVu
Z3RoCit9OworCitzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXRlcm1pbmVDYXRlZ29yeShj
b25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIGxlZnRTaWRlLCBjb25zdCBDU1NDYWxjRXhwcmVz
c2lvbk5vZGUmIHJpZ2h0U2lkZSwgQ2FsY09wZXJhdG9yIG9wKQoreworICAgIENhbGN1bGF0aW9u
Q2F0ZWdvcnkgbGVmdENhdGVnb3J5ID0gbGVmdFNpZGUuY2F0ZWdvcnkoKTsKKyAgICBDYWxjdWxh
dGlvbkNhdGVnb3J5IHJpZ2h0Q2F0ZWdvcnkgPSByaWdodFNpZGUuY2F0ZWdvcnkoKTsKKyAgICBB
U1NFUlQobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworICAgIEFT
U0VSVChyaWdodENhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworCisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgY2FzZSBDYWxj
T3BlcmF0b3I6OlN1YnRyYWN0OgorICAgICAgICBpZiAobGVmdENhdGVnb3J5IDwgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6QW5nbGUgJiYgcmlnaHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OkFuZ2xlKQorICAgICAgICAgICAgcmV0dXJuIGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0
PHVuc2lnbmVkPihsZWZ0Q2F0ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocmlnaHRDYXRl
Z29yeSldOworICAgICAgICBpZiAobGVmdENhdGVnb3J5ID09IHJpZ2h0Q2F0ZWdvcnkpCisgICAg
ICAgICAgICByZXR1cm4gbGVmdENhdGVnb3J5OworICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6T3RoZXI7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OgorICAgICAg
ICBpZiAobGVmdENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciAmJiByaWdo
dENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcikKKyAgICAgICAgICAgIHJl
dHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAgICAgcmV0dXJuIGxlZnRDYXRl
Z29yeSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIgPyByaWdodENhdGVnb3J5IDogbGVm
dENhdGVnb3J5OworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIGlmIChy
aWdodENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciB8fCByaWdodFNpZGUu
aXNaZXJvKCkpCisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7
CisgICAgICAgIHJldHVybiBsZWZ0Q2F0ZWdvcnk7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1p
bjoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpD
bGFtcDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7Cit9CisKKy8vIEZJWE1F
OiBOZWVkIHRvIGltcGxlbWVudCBjb3JyZWN0IGNhdGVnb3J5IGNvbXB1dGF0aW9uIHBlcjoKKy8v
IDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9tLTEvI2Nzc251bWVy
aWN2YWx1ZS1pbnZlcnQtYS10eXBlPgorLy8gVG8gaW52ZXJ0IGEgdHlwZSB0eXBlLCBwZXJmb3Jt
IHRoZSBmb2xsb3dpbmcgc3RlcHM6CisvLyBMZXQgcmVzdWx0IGJlIGEgbmV3IHR5cGUgd2l0aCBh
biBpbml0aWFsbHkgZW1wdHkgb3JkZXJlZCBtYXAgYW5kIGFuIGluaXRpYWxseSBudWxsIHBlcmNl
bnQgaGludAorLy8gRm9yIGVhY2ggdW5pdCDihpIgZXhwb25lbnQgb2YgdHlwZSwgc2V0IHJlc3Vs
dFt1bml0XSB0byAoLTEgKiBleHBvbmVudCkuCitzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSBj
YXRlZ29yeUZvckludmVydChDYWxjdWxhdGlvbkNhdGVnb3J5IGNhdGVnb3J5KQoreworICAgIHJl
dHVybiBjYXRlZ29yeTsKK30KKworc3RhdGljIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGV0ZXJtaW5l
Q2F0ZWdvcnkoY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgbm9kZXMs
IENhbGNPcGVyYXRvciBvcCkKK3sKKyAgICBpZiAobm9kZXMuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisKKyAgICBhdXRvIGN1cnJlbnRDYXRl
Z29yeSA9IG5vZGVzWzBdLT5jYXRlZ29yeSgpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IG5vZGVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IGF1dG8mIG5vZGUgPSBub2Rl
c1tpXS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIGF1dG8gdXNlZE9wZXJhdG9yID0gb3A7Cisg
ICAgICAgIGlmIChub2RlLnR5cGUoKSA9PSBDU1NDYWxjRXhwcmVzc2lvbk5vZGU6OlR5cGU6OkNz
c0NhbGNJbnZlcnQpCisgICAgICAgICAgICB1c2VkT3BlcmF0b3IgPSBDYWxjT3BlcmF0b3I6OkRp
dmlkZTsKKworICAgICAgICBhdXRvIG5leHRDYXRlZ29yeSA9IG5vZGUuY2F0ZWdvcnkoKTsKKwor
ICAgICAgICBzd2l0Y2ggKHVzZWRPcGVyYXRvcikgeworICAgICAgICBjYXNlIENhbGNPcGVyYXRv
cjo6QWRkOgorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6CisgICAgICAgICAg
ICAvLyA8aHR0cHM6Ly9kcmFmdHMuY3NzLWhvdWRpbmkub3JnL2Nzcy10eXBlZC1vbS0xLyNjc3Nu
dW1lcmljdmFsdWUtYWRkLXR3by10eXBlcz4KKyAgICAgICAgICAgIC8vIEF0IGEgKyBvciAtIHN1
Yi1leHByZXNzaW9uLCBhdHRlbXB0IHRvIGFkZCB0aGUgdHlwZXMgb2YgdGhlIGxlZnQgYW5kIHJp
Z2h0IGFyZ3VtZW50cy4KKyAgICAgICAgICAgIC8vIElmIHRoaXMgcmV0dXJucyBmYWlsdXJlLCB0
aGUgZW50aXJlIGNhbGN1bGF0aW9u4oCZcyB0eXBlIGlzIGZhaWx1cmUuIE90aGVyd2lzZSwgdGhl
IHN1Yi1leHByZXNzaW9u4oCZcyB0eXBlIGlzIHRoZSByZXR1cm5lZCB0eXBlLgorICAgICAgICAg
ICAgaWYgKGN1cnJlbnRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlICYmIG5l
eHRDYXRlZ29yeSA8IENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlKQorICAgICAgICAgICAgICAg
IGN1cnJlbnRDYXRlZ29yeSA9IGFkZFN1YnRyYWN0UmVzdWx0W3N0YXRpY19jYXN0PHVuc2lnbmVk
PihjdXJyZW50Q2F0ZWdvcnkpXVtzdGF0aWNfY2FzdDx1bnNpZ25lZD4obmV4dENhdGVnb3J5KV07
CisgICAgICAgICAgICBlbHNlIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gbmV4dENhdGVnb3J5KQor
ICAgICAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpPdGhlcjsKKyAgICAg
ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToKKyAg
ICAgICAgICAgIC8vIDxodHRwczovL2RyYWZ0cy5jc3MtaG91ZGluaS5vcmcvY3NzLXR5cGVkLW9t
LTEvI2Nzc251bWVyaWN2YWx1ZS1tdWx0aXBseS10d28tdHlwZXM+CisgICAgICAgICAgICAvLyBB
dCBhICogc3ViLWV4cHJlc3Npb24sIG11bHRpcGx5IHRoZSB0eXBlcyBvZiB0aGUgbGVmdCBhbmQg
cmlnaHQgYXJndW1lbnRzLiBUaGUgc3ViLWV4cHJlc3Npb27igJlzIHR5cGUgaXMgdGhlIHJldHVy
bmVkIHJlc3VsdC4KKyAgICAgICAgICAgIGlmIChjdXJyZW50Q2F0ZWdvcnkgIT0gQ2FsY3VsYXRp
b25DYXRlZ29yeTo6TnVtYmVyICYmIG5leHRDYXRlZ29yeSAhPSBDYWxjdWxhdGlvbkNhdGVnb3J5
OjpOdW1iZXIpCisgICAgICAgICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyOworCisgICAgICAgICAgICBjdXJyZW50Q2F0ZWdvcnkgPSBjdXJyZW50Q2F0ZWdvcnkgPT0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyID8gbmV4dENhdGVnb3J5IDogY3VycmVudENhdGVn
b3J5OworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRp
dmlkZTogeworICAgICAgICAgICAgYXV0byBpbnZlcnRDYXRlZ29yeSA9IGNhdGVnb3J5Rm9ySW52
ZXJ0KG5leHRDYXRlZ29yeSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEF0IGEgLyBz
dWItZXhwcmVzc2lvbiwgbGV0IGxlZnQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGZpbmRpbmcgdGhl
IHR5cGVzIG9mIGl0cyBsZWZ0IGFyZ3VtZW50LAorICAgICAgICAgICAgLy8gYW5kIHJpZ2h0IHR5
cGUgYmUgdGhlIHJlc3VsdCBvZiBmaW5kaW5nIHRoZSB0eXBlcyBvZiBpdHMgcmlnaHQgYXJndW1l
bnQgYW5kIHRoZW4gaW52ZXJ0aW5nIGl0LgorICAgICAgICAgICAgLy8gVGhlIHN1Yi1leHByZXNz
aW9u4oCZcyB0eXBlIGlzIHRoZSByZXN1bHQgb2YgbXVsdGlwbHlpbmcgdGhlIGxlZnQgdHlwZSBh
bmQgcmlnaHQgdHlwZS4KKyAgICAgICAgICAgIGlmIChpbnZlcnRDYXRlZ29yeSAhPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXIgfHwgbm9kZS5pc1plcm8oKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46CisgICAgICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpNYXg6CisgICAgICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAg
ICAgICAgICAgIC8vIFRoZSB0eXBlIG9mIGEgbWluKCksIG1heCgpLCBvciBjbGFtcCgpIGV4cHJl
c3Npb24gaXMgdGhlIHJlc3VsdCBvZiBhZGRpbmcgdGhlIHR5cGVzIG9mIGl0cyBjb21tYS1zZXBh
cmF0ZWQgY2FsY3VsYXRpb25zCisgICAgICAgICAgICByZXR1cm4gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6T3RoZXI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY3VycmVudENhdGVnb3J5
OworfQorCitzdGF0aWMgQ2FsY3VsYXRpb25DYXRlZ29yeSByZXNvbHZlZFR5cGVGb3JNaW5Pck1h
eE9yQ2xhbXAoQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSwgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXN0aW5hdGlvbkNhdGVnb3J5KQoreworICAgIHN3aXRjaCAoY2F0ZWdvcnkpIHsKKyAgICBj
YXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Okxlbmd0aDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1i
ZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAgIGNh
c2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5nbGU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgorICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXI6CisgICAgICAgIHJldHVybiBjYXRlZ29y
eTsKKworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICAgICAgaWYg
KGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TGVuZ3RoKQorICAg
ICAgICAgICAgcmV0dXJuIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg7CisgICAg
ICAgIGlmIChkZXN0aW5hdGlvbkNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJl
cikKKyAgICAgICAgICAgIHJldHVybiBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVy
OworICAgICAgICByZXR1cm4gY2F0ZWdvcnk7CisgICAgfQorCisgICAgcmV0dXJuIENhbGN1bGF0
aW9uQ2F0ZWdvcnk6Ok90aGVyOworfQorCitzdGF0aWMgYm9vbCBpc1NhbWVQYWlyKENhbGN1bGF0
aW9uQ2F0ZWdvcnkgYSwgQ2FsY3VsYXRpb25DYXRlZ29yeSBiLCBDYWxjdWxhdGlvbkNhdGVnb3J5
IHgsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgeSkKK3sKKyAgICByZXR1cm4gKGEgPT0geCAmJiBiID09
IHkpIHx8IChhID09IHkgJiYgYiA9PSB4KTsKK30KKworZW51bSBjbGFzcyBTb3J0aW5nQ2F0ZWdv
cnkgeworICAgIE51bWJlciwKKyAgICBQZXJjZW50LAorICAgIERpbWVuc2lvbiwKKyAgICBPdGhl
cgorfTsKKworc3RhdGljIFNvcnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnlGb3JUeXBlKENT
U1VuaXRUeXBlIHVuaXRUeXBlKQoreworICAgIHN0YXRpYyBjb25zdGV4cHIgU29ydGluZ0NhdGVn
b3J5IHNvcnRPcmRlcltdID0geworICAgICAgICBTb3J0aW5nQ2F0ZWdvcnk6Ok51bWJlciwgICAg
ICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlciwKKyAgICAgICAgU29ydGluZ0NhdGVn
b3J5OjpEaW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGgsCisgICAg
ICAgIFNvcnRpbmdDYXRlZ29yeTo6UGVyY2VudCwgICAgICAgLy8gQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudCwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpOdW1iZXIsICAgICAgICAvLyBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyLAorICAgICAgICBTb3J0aW5nQ2F0ZWdv
cnk6OkRpbWVuc2lvbiwgICAgIC8vIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGgs
CisgICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAgLy8gQ2FsY3VsYXRpb25D
YXRlZ29yeTo6QW5nbGUsCisgICAgICAgIFNvcnRpbmdDYXRlZ29yeTo6RGltZW5zaW9uLCAgICAg
Ly8gQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGltZSwKKyAgICAgICAgU29ydGluZ0NhdGVnb3J5OjpE
aW1lbnNpb24sICAgICAvLyBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3ksCisgICAgICAg
IFNvcnRpbmdDYXRlZ29yeTo6T3RoZXIsICAgICAgICAgLy8gVU90aGVyCisgICAgfTsKKworICAg
IENPTVBJTEVfQVNTRVJUKEFSUkFZX1NJWkUoc29ydE9yZGVyKSA9PSBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpICsgMSwgc29ydE9yZGVyX3NpemVfc2hv
dWxkX21hdGNoX1VuaXRDYXRlZ29yeSk7CisgICAgcmV0dXJuIHNvcnRPcmRlcltzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oY2FsY1VuaXRDYXRlZ29yeSh1bml0VHlwZSkpXTsKK30KKworc3RhdGljIFNv
cnRpbmdDYXRlZ29yeSBzb3J0aW5nQ2F0ZWdvcnkoY29uc3QgQ1NTQ2FsY0V4cHJlc3Npb25Ob2Rl
JiBub2RlKQoreworICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihub2RlKSkK
KyAgICAgICAgcmV0dXJuIHNvcnRpbmdDYXRlZ29yeUZvclR5cGUobm9kZS5wcmltaXRpdmVUeXBl
KCkpOworCisgICAgcmV0dXJuIFNvcnRpbmdDYXRlZ29yeTo6T3RoZXI7Cit9CisKK3N0YXRpYyBD
U1NVbml0VHlwZSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24oY29uc3QgQ1NTQ2FsY0V4cHJl
c3Npb25Ob2RlJiBub2RlKQoreworICAgIGlmIChpczxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
Pihub2RlKSkKKyAgICAgICAgcmV0dXJuIG5vZGUucHJpbWl0aXZlVHlwZSgpOworICAgIAorICAg
IHJldHVybiBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV047Cit9CisKK3N0YXRpYyBDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbiBjb252ZXJzaW9uVG9BZGRWYWx1ZXNXaXRo
VHlwZXMoQ1NTVW5pdFR5cGUgZmlyc3RUeXBlLCBDU1NVbml0VHlwZSBzZWNvbmRUeXBlKQorewor
ICAgIGlmIChmaXJzdFR5cGUgPT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOIHx8IHNlY29uZFR5
cGUgPT0gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOKQorICAgICAgICByZXR1cm4gQ1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7CisKKyAgICBhdXRvIGZp
cnN0Q2F0ZWdvcnkgPSBjYWxjdWxhdGlvbkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oZmlyc3RUeXBl
KTsKKworICAgIC8vIENvbXBhdGlibGUgdHlwZXMuCisgICAgaWYgKGZpcnN0Q2F0ZWdvcnkgIT0g
Q2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgJiYgZmlyc3RDYXRlZ29yeSA9PSBjYWxjdWxhdGlv
bkNhdGVnb3J5Rm9yQ29tYmluYXRpb24oc2Vjb25kVHlwZSkpCisgICAgICAgIHJldHVybiBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6Q2Fub25pY2FsaXplOworCisg
ICAgLy8gTWF0Y2hpbmcgdHlwZXMuCisgICAgaWYgKGZpcnN0VHlwZSA9PSBzZWNvbmRUeXBlICYm
IGhhc0RvdWJsZVZhbHVlKGZpcnN0VHlwZSkpCisgICAgICAgIHJldHVybiBDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlOjpVbml0Q29udmVyc2lvbjo6UHJlc2VydmU7CisKKyAgICByZXR1cm4gQ1NT
Q2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6VW5pdENvbnZlcnNpb246OkludmFsaWQ7Cit9CisKKwor
c3RhdGljIENTU1ZhbHVlSUQgZnVuY3Rpb25Gcm9tT3BlcmF0b3IoQ2FsY09wZXJhdG9yIG9wKQor
eworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRkOgorICAgIGNh
c2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TXVsdGlw
bHk6CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZToKKyAgICAgICAgcmV0dXJuIENTU1Zh
bHVlQ2FsYzsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgorICAgICAgICByZXR1cm4gQ1NT
VmFsdWVNaW47CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDoKKyAgICAgICAgcmV0dXJuIENT
U1ZhbHVlTWF4OworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDoKKyAgICAgICAgcmV0dXJu
IENTU1ZhbHVlQ2xhbXA7CisgICAgfQorICAgIHJldHVybiBDU1NWYWx1ZUNhbGM7Cit9CisKK1Jl
ZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShD
YWxjT3BlcmF0b3Igb3AsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUs
IFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYgcmlnaHRTaWRlKQoreworICAgIGlmICgh
bGVmdFNpZGUgfHwgIXJpZ2h0U2lkZSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBB
U1NFUlQob3AgPT0gQ2FsY09wZXJhdG9yOjpBZGQgfHwgb3AgPT0gQ2FsY09wZXJhdG9yOjpNdWx0
aXBseSk7CisKKyAgICBBU1NFUlQobGVmdFNpZGUtPmNhdGVnb3J5KCkgPCBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcik7CisgICAgQVNTRVJUKHJpZ2h0U2lkZS0+Y2F0ZWdvcnkoKSA8IENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKTsKKworICAgIGF1dG8gbmV3Q2F0ZWdvcnkgPSBkZXRlcm1p
bmVDYXRlZ29yeSgqbGVmdFNpZGUsICpyaWdodFNpZGUsIG9wKTsKKyAgICBpZiAobmV3Q2F0ZWdv
cnkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKENhbGMsIHN0cmVhbSA8PCAiRmFpbGVkIHRvIGNyZWF0ZSBDU1NDYWxjT3BlcmF0aW9uTm9k
ZSAiIDw8IG9wIDw8ICIgbm9kZSBiZWNhdXNlIHVuYWJsZSB0byBkZXRlcm1pbmUgY2F0ZWdvcnkg
ZnJvbSAiIDw8IHByZXR0eVByaW50Tm9kZSgqbGVmdFNpZGUpIDw8ICIgYW5kICIgPDwgKnJpZ2h0
U2lkZSk7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBhZG9w
dFJlZihuZXcgQ1NTQ2FsY09wZXJhdGlvbk5vZGUobmV3Q2F0ZWdvcnksIG9wLCBsZWZ0U2lkZS5y
ZWxlYXNlTm9uTnVsbCgpLCByaWdodFNpZGUucmVsZWFzZU5vbk51bGwoKSkpOworfQorCitSZWZQ
dHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVTdW0o
VmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykKK3sKKyAgICBpZiAo
dmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIG5l
d0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3BlcmF0b3I6OkFkZCk7
CisgICAgaWYgKG5ld0NhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKSB7Cisg
ICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUg
c3VtIG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZyb20gIiA8PCBw
cmV0dHlQcmludE5vZGVzKHZhbHVlcykpOworICAgICAgICBuZXdDYXRlZ29yeSA9IGRldGVybWlu
ZUNhdGVnb3J5KHZhbHVlcywgQ2FsY09wZXJhdG9yOjpBZGQpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25O
b2RlKG5ld0NhdGVnb3J5LCBDYWxjT3BlcmF0b3I6OkFkZCwgV1RGTW92ZSh2YWx1ZXMpKSk7Cit9
CisKK1JlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNy
ZWF0ZVByb2R1Y3QoVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcykK
K3sKKyAgICBpZiAodmFsdWVzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisK
KyAgICBhdXRvIG5ld0NhdGVnb3J5ID0gZGV0ZXJtaW5lQ2F0ZWdvcnkodmFsdWVzLCBDYWxjT3Bl
cmF0b3I6Ok11bHRpcGx5KTsKKyAgICBpZiAobmV3Q2F0ZWdvcnkgPT0gQ2FsY3VsYXRpb25DYXRl
Z29yeTo6T3RoZXIpIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAi
RmFpbGVkIHRvIGNyZWF0ZSBwcm9kdWN0IG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5l
IGNhdGVnb3J5IGZyb20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNP
cGVyYXRpb25Ob2RlKG5ld0NhdGVnb3J5LCBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5LCBXVEZNb3Zl
KHZhbHVlcykpKTsKK30KKworUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6Y3JlYXRlTWluT3JNYXhPckNsYW1wKENhbGNPcGVyYXRvciBvcCwgVmVjdG9y
PFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcywgQ2FsY3VsYXRpb25DYXRlZ29y
eSBkZXN0aW5hdGlvbkNhdGVnb3J5KQoreworICAgIEFTU0VSVChvcCA9PSBDYWxjT3BlcmF0b3I6
Ok1pbiB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6Ok1heCB8fCBvcCA9PSBDYWxjT3BlcmF0b3I6OkNs
YW1wKTsKKyAgICBBU1NFUlRfSU1QTElFUyhvcCA9PSBDYWxjT3BlcmF0b3I6OkNsYW1wLCB2YWx1
ZXMuc2l6ZSgpID09IDMpOworCisgICAgT3B0aW9uYWw8Q2FsY3VsYXRpb25DYXRlZ29yeT4gY2F0
ZWdvcnkgPSBzdGQ6Om51bGxvcHQ7CisgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHZhbHVlcykgewor
ICAgICAgICBhdXRvIHZhbHVlQ2F0ZWdvcnkgPSByZXNvbHZlZFR5cGVGb3JNaW5Pck1heE9yQ2xh
bXAodmFsdWUtPmNhdGVnb3J5KCksIGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworCisgICAgICAgIEFT
U0VSVCh2YWx1ZUNhdGVnb3J5IDwgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOworICAgICAg
ICBpZiAoIWNhdGVnb3J5KSB7CisgICAgICAgICAgICBpZiAodmFsdWVDYXRlZ29yeSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlcikgeworICAgICAgICAgICAgICAgIExPR19XSVRIX1NUUkVB
TShDYWxjLCBzdHJlYW0gPDwgIkZhaWxlZCB0byBjcmVhdGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGUg
IiA8PCBvcCA8PCAiIG5vZGUgYmVjYXVzZSB1bmFibGUgdG8gZGV0ZXJtaW5lIGNhdGVnb3J5IGZy
b20gIiA8PCBwcmV0dHlQcmludE5vZGVzKHZhbHVlcykpOworICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2F0ZWdvcnkgPSB2YWx1ZUNh
dGVnb3J5OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGNhdGVnb3J5ICE9IHZhbHVlQ2F0ZWdv
cnkpIHsKKyAgICAgICAgICAgIGlmIChpc1NhbWVQYWlyKGNhdGVnb3J5LnZhbHVlKCksIHZhbHVl
Q2F0ZWdvcnksIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aCwgQ2FsY3VsYXRpb25DYXRlZ29y
eTo6UGVyY2VudExlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICBjYXRlZ29yeSA9IENhbGN1bGF0
aW9uQ2F0ZWdvcnk6OlBlcmNlbnRMZW5ndGg7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNTYW1lUGFpcihjYXRlZ29yeS52YWx1ZSgp
LCB2YWx1ZUNhdGVnb3J5LCBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIsIENhbGN1bGF0aW9u
Q2F0ZWdvcnk6OlBlcmNlbnROdW1iZXIpKSB7CisgICAgICAgICAgICAgICAgY2F0ZWdvcnkgPSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TnVtYmVyOworICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU0NhbGNPcGVyYXRpb25Ob2Rl
KGNhdGVnb3J5LnZhbHVlKCksIG9wLCBXVEZNb3ZlKHZhbHVlcykpKTsKK30KKwordm9pZCBDU1ND
YWxjT3BlcmF0aW9uTm9kZTo6aG9pc3RDaGlsZHJlbldpdGhPcGVyYXRvcihDYWxjT3BlcmF0b3Ig
b3ApCit7CisgICAgQVNTRVJUKG9wID09IENhbGNPcGVyYXRvcjo6QWRkIHx8IG9wID09IENhbGNP
cGVyYXRvcjo6TXVsdGlwbHkpOworCisgICAgYXV0byBoYXNDaGlsZFdpdGhPcGVyYXRvciA9IFsm
XSAoQ2FsY09wZXJhdG9yIG9wKSB7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxk
cmVuKSB7CisgICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdl
dCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNP
cGVyYXRvcigpID09IG9wKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisgICAgaWYgKCFoYXNDaGlsZFdpdGhP
cGVyYXRvcihvcCkpCisgICAgICAgIHJldHVybjsKKworICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47CisgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hp
bGRyZW4pIHsKKyAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihjaGlsZC5nZXQo
KSkgJiYgZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KGNoaWxkLmdldCgpKS5jYWxjT3Bl
cmF0b3IoKSA9PSBvcCkgeworICAgICAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNoaWxkcmVuKCk7CisgICAgICAgICAg
ICBmb3IgKGF1dG8mIGNoaWxkVG9Nb3ZlIDogY2hpbGRyZW4pCisgICAgICAgICAgICAgICAgbmV3
Q2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGRUb01vdmUpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoV1RGTW92ZShjaGlsZCkpOworICAgIH0KKyAg
ICAKKyAgICBuZXdDaGlsZHJlbi5zaHJpbmtUb0ZpdCgpOworICAgIG1fY2hpbGRyZW4gPSBXVEZN
b3ZlKG5ld0NoaWxkcmVuKTsKK30KKworYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y2FuQ29t
YmluZUFsbENoaWxkcmVuKCkgY29uc3QKK3sKKyAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPCAy
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KG1fY2hpbGRyZW5bMF0pKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvIGZpcnN0VW5pdFR5cGUgPSBtX2NoaWxkcmVuWzBdLT5wcmltaXRpdmVUeXBlKCk7CisgICAg
YXV0byBmaXJzdENhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29yeUZvckNvbWJpbmF0aW9uKG1f
Y2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAx
OyBpIDwgbV9jaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICBhdXRvJiBub2RlID0gbV9j
aGlsZHJlbltpXTsKKworICAgICAgICBpZiAoIWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+
KG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8gbm9kZVVu
aXRUeXBlID0gbm9kZS0+cHJpbWl0aXZlVHlwZSgpOworICAgICAgICBhdXRvIG5vZGVDYXRlZ29y
eSA9IGNhbGN1bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihub2RlVW5pdFR5cGUpOworCisg
ICAgICAgIGlmIChub2RlQ2F0ZWdvcnkgIT0gZmlyc3RDYXRlZ29yeSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAobm9kZUNhdGVnb3J5ID09IENhbGN1bGF0aW9uQ2F0
ZWdvcnk6Ok90aGVyICYmIG5vZGVVbml0VHlwZSAhPSBmaXJzdFVuaXRUeXBlKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgaWYgKCFoYXNEb3VibGVWYWx1ZShu
b2RlVW5pdFR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjb21iaW5lQ2hpbGRy
ZW4oKQoreworICAgIGlmIChtX2NoaWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChzaG91bGRTb3J0Q2hpbGRyZW4oKSkgeworICAgICAgICAvLyA8aHR0cHM6Ly9k
cmFmdHMuY3Nzd2cub3JnL2Nzcy12YWx1ZXMtNC8jc29ydC1hLWNhbGN1bGF0aW9ucy1jaGlsZHJl
bj4KKyAgICAgICAgc3RkOjpzdGFibGVfc29ydChtX2NoaWxkcmVuLmJlZ2luKCksIG1fY2hpbGRy
ZW4uZW5kKCksIFtdKGNvbnN0IGF1dG8mIGZpcnN0LCBjb25zdCBhdXRvJiBzZWNvbmQpIHsKKyAg
ICAgICAgICAgIC8vIFNvcnQgb3JkZXI6IG51bWJlciwgcGVyY2VudGFnZSwgZGltZW5zaW9uLCBv
dGhlci4KKyAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBmaXJzdENhdGVnb3J5ID0gc29ydGlu
Z0NhdGVnb3J5KGZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgIFNvcnRpbmdDYXRlZ29yeSBzZWNv
bmRDYXRlZ29yeSA9IHNvcnRpbmdDYXRlZ29yeShzZWNvbmQuZ2V0KCkpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoZmlyc3RDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVu
c2lvbiAmJiBzZWNvbmRDYXRlZ29yeSA9PSBTb3J0aW5nQ2F0ZWdvcnk6OkRpbWVuc2lvbikgewor
ICAgICAgICAgICAgICAgIC8vIElmIG5vZGVzIGNvbnRhaW5zIGFueSBkaW1lbnNpb25zLCByZW1v
dmUgdGhlbSBmcm9tIG5vZGVzLCBzb3J0IHRoZW0gYnkgdGhlaXIgdW5pdHMsIGFuZCBhcHBlbmQg
dGhlbSB0byByZXQuCisgICAgICAgICAgICAgICAgYXV0byBmaXJzdFVuaXRTdHJpbmcgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6dW5pdFR5cGVTdHJpbmcoZmlyc3QtPnByaW1pdGl2ZVR5cGUoKSk7Cisg
ICAgICAgICAgICAgICAgYXV0byBzZWNvbmRVbml0U3RyaW5nID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OnVuaXRUeXBlU3RyaW5nKHNlY29uZC0+cHJpbWl0aXZlVHlwZSgpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY29kZVBvaW50Q29tcGFyZUxlc3NUaGFuKGZpcnN0VW5pdFN0cmluZywgc2Vjb25k
VW5pdFN0cmluZyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oZmlyc3RDYXRlZ29yeSkgPCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc2Vj
b25kQ2F0ZWdvcnkpOworICAgICAgICB9KTsKKworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQ2Fs
Yywgc3RyZWFtIDw8ICJwb3N0LXNvcnQ6ICIgPDwgKnRoaXMpOworICAgIH0KKworICAgIGlmIChj
YWxjT3BlcmF0b3IoKSA9PSBDYWxjT3BlcmF0b3I6OkFkZCkgeworICAgICAgICAvLyBGb3IgZWFj
aCBzZXQgb2Ygcm9vdOKAmXMgY2hpbGRyZW4gdGhhdCBhcmUgbnVtZXJpYyB2YWx1ZXMgd2l0aCBp
ZGVudGljYWwgdW5pdHMsCisgICAgICAgIC8vIHJlbW92ZSB0aG9zZSBjaGlsZHJlbiBhbmQgcmVw
bGFjZSB0aGVtIHdpdGggYSBzaW5nbGUgbnVtZXJpYyB2YWx1ZSBjb250YWluaW5nCisgICAgICAg
IC8vIHRoZSBzdW0gb2YgdGhlIHJlbW92ZWQgbm9kZXMsIGFuZCB3aXRoIHRoZSBzYW1lIHVuaXQu
CisgICAgICAgIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPj4gbmV3Q2hpbGRyZW47
CisgICAgICAgIG5ld0NoaWxkcmVuLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobV9jaGlsZHJlbi5z
aXplKCkpOworICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQobV9jaGlsZHJlblsw
XS5jb3B5UmVmKCkpOworCisgICAgICAgIENTU1VuaXRUeXBlIHByZXZpb3VzVHlwZSA9IHByaW1p
dGl2ZVR5cGVGb3JDb21iaW5hdGlvbihuZXdDaGlsZHJlblswXS5nZXQoKSk7CisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IG1fY2hpbGRyZW4uc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgICAgIGF1dG8mIGN1cnJlbnROb2RlID0gbV9jaGlsZHJlbltpXTsKKyAgICAgICAgICAgIENT
U1VuaXRUeXBlIGN1cnJlbnRUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNvbWJpbmF0aW9uKGN1cnJl
bnROb2RlLmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBjb252ZXJzaW9uVHlwZSA9IGNvbnZl
cnNpb25Ub0FkZFZhbHVlc1dpdGhUeXBlcyhwcmV2aW91c1R5cGUsIGN1cnJlbnRUeXBlKTsKKyAg
ICAgICAgICAgIGlmIChjb252ZXJzaW9uVHlwZSAhPSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2Rl
OjpVbml0Q29udmVyc2lvbjo6SW52YWxpZCkgeworICAgICAgICAgICAgICAgIGRvd25jYXN0PENT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0NoaWxkcmVuLmxhc3QoKS5nZXQoKSkuYWRkKGRv
d25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGN1cnJlbnROb2RlLmdldCgpKSwgY29u
dmVyc2lvblR5cGUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBwcmV2aW91c1R5cGUgPSBwcmltaXRpdmVUeXBlRm9yQ29tYmluYXRpb24o
Y3VycmVudE5vZGUpOworICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKGN1
cnJlbnROb2RlLmNvcHlSZWYoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG5ld0No
aWxkcmVuLnNocmlua1RvRml0KCk7CisgICAgICAgIG1fY2hpbGRyZW4gPSBXVEZNb3ZlKG5ld0No
aWxkcmVuKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChjYWxjT3BlcmF0b3Io
KSA9PSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KSB7CisgICAgICAgIC8vIElmIHJvb3QgaGFzIG11
bHRpcGxlIGNoaWxkcmVuIHRoYXQgYXJlIG51bWJlcnMgKG5vdCBwZXJjZW50YWdlcyBvciBkaW1l
bnNpb25zKSwKKyAgICAgICAgLy8gcmVtb3ZlIHRoZW0gYW5kIHJlcGxhY2UgdGhlbSB3aXRoIGEg
c2luZ2xlIG51bWJlciBjb250YWluaW5nIHRoZSBwcm9kdWN0IG9mIHRoZSByZW1vdmVkIG5vZGVz
LgorICAgICAgICBkb3VibGUgbXVsdGlwbGllciA9IDE7CisKKyAgICAgICAgLy8gU29ydGluZyB3
aWxsIGhhdmUgcHV0IHRoZSBudW1iZXIgbm9kZXMgZmlyc3QuCisgICAgICAgIHVuc2lnbmVkIGxl
YWRpbmdOdW1iZXJOb2RlQ291bnQgPSAwOworICAgICAgICBmb3IgKGF1dG8mIG5vZGUgOiBtX2No
aWxkcmVuKSB7CisgICAgICAgICAgICBhdXRvIG5vZGVUeXBlID0gcHJpbWl0aXZlVHlwZUZvckNv
bWJpbmF0aW9uKG5vZGUuZ2V0KCkpOworICAgICAgICAgICAgaWYgKG5vZGVUeXBlICE9IENTU1Vu
aXRUeXBlOjpDU1NfTlVNQkVSKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
CisgICAgICAgICAgICBtdWx0aXBsaWVyICo9IG5vZGUtPmRvdWJsZVZhbHVlKENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKKyAgICAgICAgICAgICsrbGVhZGluZ051bWJlck5vZGVDb3VudDsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5v
ZGU+PiBuZXdDaGlsZHJlbjsKKyAgICAgICAgbmV3Q2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eShtX2NoaWxkcmVuLnNpemUoKSk7CisgICAgICAgIAorICAgICAgICAvLyBJZiByb290IGNv
bnRhaW5zIG9ubHkgdHdvIGNoaWxkcmVuLCBvbmUgb2Ygd2hpY2ggaXMgYSBudW1iZXIgKG5vdCBh
IHBlcmNlbnRhZ2Ugb3IgZGltZW5zaW9uKSBhbmQgdGhlIG90aGVyIG9mCisgICAgICAgIC8vIHdo
aWNoIGlzIGEgU3VtIHdob3NlIGNoaWxkcmVuIGFyZSBhbGwgbnVtZXJpYyB2YWx1ZXMsIG11bHRp
cGx5IGFsbCBvZiB0aGUgU3Vt4oCZcyBjaGlsZHJlbiBieSB0aGUgbnVtYmVyLCB0aGVuCisgICAg
ICAgIC8vIHJldHVybiB0aGUgU3VtLgorICAgICAgICAvLyBUaGUgU3VtJ3MgY2hpbGRyZW4gc2lt
cGxpZmljYXRpb24gd2lsbCBoYXZlIGhhcHBlbmVkIGFscmVhZHkuCisgICAgICAgIGJvb2wgZGlk
TXVsdGlwbHkgPSBmYWxzZTsKKyAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQgJiYg
bV9jaGlsZHJlbi5zaXplKCkgLSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50ID09IDEpIHsKKyAgICAg
ICAgICAgIGF1dG8gbXVsdGlwbGljYW5kQ2F0ZWdvcnkgPSBjYWxjVW5pdENhdGVnb3J5KHByaW1p
dGl2ZVR5cGVGb3JDb21iaW5hdGlvbihtX2NoaWxkcmVuLmxhc3QoKS5nZXQoKSkpOworICAgICAg
ICAgICAgaWYgKG11bHRpcGxpY2FuZENhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90
aGVyKSB7CisgICAgICAgICAgICAgICAgbmV3Q2hpbGRyZW4udW5jaGVja2VkQXBwZW5kKG1fY2hp
bGRyZW4ubGFzdCgpLmNvcHlSZWYoKSk7CisgICAgICAgICAgICAgICAgZG93bmNhc3Q8Q1NTQ2Fs
Y1ByaW1pdGl2ZVZhbHVlTm9kZT4obmV3Q2hpbGRyZW5bMF0uZ2V0KCkpLm11bHRpcGx5KG11bHRp
cGxpZXIpOworICAgICAgICAgICAgICAgIGRpZE11bHRpcGx5ID0gdHJ1ZTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdl
dCgpKSAmJiBkb3duY2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4obV9jaGlsZHJlbi5sYXN0KCku
Z2V0KCkpLmNhbGNPcGVyYXRvcigpID09IENhbGNPcGVyYXRvcjo6QWRkKSB7CisgICAgICAgICAg
ICAgICAgLy8gSWYgd2UncmUgbXVsdGlwbHlpbmcgd2l0aCBhbm90aGVyIG9wZXJhdGlvbiB0aGF0
IGlzIGFuIGFkZGl0aW9uIGFuZCBhbGwgdGhlIGFkZGVkIGNoaWxkcmVuCisgICAgICAgICAgICAg
ICAgLy8gYXJlIHBlcmNlbnRhZ2VzIG9yIGRpbWVuc2lvbnMsIHdlIHNob3VsZCBtdWx0aXBseSBl
YWNoIGNoaWxkIGFuZCBtYWtlIHRoaXMgZXhwcmVzc2lvbiBhbgorICAgICAgICAgICAgICAgIC8v
IGFkZGl0aW9uLgorICAgICAgICAgICAgICAgIGF1dG8gYWxsQ2hpbGRyZW5BcmVQcmltaXRpdmVW
YWx1ZXMgPSBbXShjb25zdCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiBjaGls
ZHJlbikgLT4gYm9vbAorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgZm9y
IChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IWlzPENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkLmdldCgpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfTsKKworICAg
ICAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5v
ZGU+KG1fY2hpbGRyZW4ubGFzdCgpLmdldCgpKS5jaGlsZHJlbigpOworICAgICAgICAgICAgICAg
IGlmIChhbGxDaGlsZHJlbkFyZVByaW1pdGl2ZVZhbHVlcyhjaGlsZHJlbikpIHsKKyAgICAgICAg
ICAgICAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICBuZXdDaGlsZHJlbi5hcHBlbmQoY2hpbGQuY29weVJlZigpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KG5ld0No
aWxkcmVuLmxhc3QoKS5nZXQoKSkubXVsdGlwbHkobXVsdGlwbGllcik7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbV9vcGVyYXRvciA9IENhbGNPcGVyYXRvcjo6
QWRkOworICAgICAgICAgICAgICAgICAgICBkaWRNdWx0aXBseSA9IHRydWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKCFkaWRNdWx0
aXBseSkgeworICAgICAgICAgICAgaWYgKGxlYWRpbmdOdW1iZXJOb2RlQ291bnQpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIG11bHRpcGxpZXJOb2RlID0gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZTo6Y3JlYXRlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobXVsdGlwbGllciwgQ1NTVW5pdFR5
cGU6OkNTU19OVU1CRVIpKTsKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShtdWx0aXBsaWVyTm9kZSkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBsZWFkaW5nTnVtYmVyTm9kZUNvdW50OyBpIDwgbV9jaGls
ZHJlbi5zaXplKCk7ICsraSkKKyAgICAgICAgICAgICAgICBuZXdDaGlsZHJlbi51bmNoZWNrZWRB
cHBlbmQobV9jaGlsZHJlbltpXS5jb3B5UmVmKCkpOworICAgICAgICB9CisKKyAgICAgICAgbmV3
Q2hpbGRyZW4uc2hyaW5rVG9GaXQoKTsKKyAgICAgICAgbV9jaGlsZHJlbiA9IFdURk1vdmUobmV3
Q2hpbGRyZW4pOworICAgIH0KKworICAgIGlmIChpc01pbk9yTWF4Tm9kZSgpICYmIGNhbkNvbWJp
bmVBbGxDaGlsZHJlbigpKSB7CisgICAgICAgIGF1dG8gY29tYmluZWRVbml0VHlwZSA9IG1fY2hp
bGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsKKyAgICAgICAgYXV0byBjYXRlZ29yeSA9IGNhbGN1
bGF0aW9uQ2F0ZWdvcnlGb3JDb21iaW5hdGlvbihjb21iaW5lZFVuaXRUeXBlKTsKKyAgICAgICAg
aWYgKGNhdGVnb3J5ICE9IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQorICAgICAgICAgICAg
Y29tYmluZWRVbml0VHlwZSA9IGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRlZ29y
eShjYXRlZ29yeSk7CisKKyAgICAgICAgZG91YmxlIHJlc29sdmVkVmFsdWUgPSBkb3VibGVWYWx1
ZShjb21iaW5lZFVuaXRUeXBlKTsKKyAgICAgICAgYXV0byBuZXdDaGlsZCA9IENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc29sdmVk
VmFsdWUsIGNvbWJpbmVkVW5pdFR5cGUpKTsKKworICAgICAgICBtX2NoaWxkcmVuLmNsZWFyKCk7
CisgICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUobmV3Q2hpbGQpKTsKKyAgICB9Cit9
CisKKy8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3MtdmFsdWVzLTQvI3NpbXBsaWZ5LWEt
Y2FsY3VsYXRpb24tdHJlZQorCitSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3Bl
cmF0aW9uTm9kZTo6c2ltcGxpZnkoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9k
ZSkKK3sKKyAgICByZXR1cm4gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShyb290Tm9kZSksIDAp
OworfQorCitSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6
c2ltcGxpZnlSZWN1cnNpdmUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiByb290Tm9kZSwg
aW50IGRlcHRoKQoreworICAgIGlmIChpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUp
KSB7CisgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDU1NDYWxjT3BlcmF0
aW9uTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICAKKyAgICAgICAgYXV0byYgY2hpbGRy
ZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgYXV0byBjaGlsZCA9
IGNoaWxkcmVuW2ldLmNvcHlSZWYoKTsKKyAgICAgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBs
aWZ5UmVjdXJzaXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOworICAgICAgICAgICAgaWYg
KG5ld05vZGUucHRyKCkgIT0gY2hpbGRyZW5baV0ucHRyKCkpCisgICAgICAgICAgICAgICAgY2hp
bGRyZW5baV0gPSBXVEZNb3ZlKG5ld05vZGUpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChp
czxDU1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUpKSB7CisgICAgICAgIGF1dG8mIG5lZ2F0ZU5v
ZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRlTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAg
ICBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjaGlsZCA9IG5lZ2F0ZU5vZGUuY2hpbGQoKTsK
KyAgICAgICAgYXV0byBuZXdOb2RlID0gc2ltcGxpZnlSZWN1cnNpdmUoV1RGTW92ZShjaGlsZCks
IGRlcHRoICsgMSk7CisgICAgICAgIGlmIChuZXdOb2RlLnB0cigpICE9ICZuZWdhdGVOb2RlLmNo
aWxkKCkpCisgICAgICAgICAgICBuZWdhdGVOb2RlLnNldENoaWxkKFdURk1vdmUobmV3Tm9kZSkp
OworICAgIH0gZWxzZSBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3ROb2RlKSkgeworICAg
ICAgICBhdXRvJiBpbnZlcnROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3RO
b2RlLmdldCgpKTsKKyAgICAgICAgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gY2hpbGQgPSBp
bnZlcnROb2RlLmNoaWxkKCk7CisgICAgICAgIGF1dG8gbmV3Tm9kZSA9IHNpbXBsaWZ5UmVjdXJz
aXZlKFdURk1vdmUoY2hpbGQpLCBkZXB0aCArIDEpOworICAgICAgICBpZiAobmV3Tm9kZS5wdHIo
KSAhPSAmaW52ZXJ0Tm9kZS5jaGlsZCgpKQorICAgICAgICAgICAgaW52ZXJ0Tm9kZS5zZXRDaGls
ZChXVEZNb3ZlKG5ld05vZGUpKTsKKyAgICB9CisKKyAgICByZXR1cm4gc2ltcGxpZnlOb2RlKFdU
Rk1vdmUocm9vdE5vZGUpLCBkZXB0aCk7Cit9CisKK1JlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
IENTU0NhbGNPcGVyYXRpb25Ob2RlOjpzaW1wbGlmeU5vZGUoUmVmPENTU0NhbGNFeHByZXNzaW9u
Tm9kZT4mJiByb290Tm9kZSwgaW50IGRlcHRoKQoreworICAgIGlmIChpczxDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhIHBlcmNl
bnRhZ2UgdGhhdCB3aWxsIGJlIHJlc29sdmVkIGFnYWluc3QgYW5vdGhlciB2YWx1ZSwgYW5kIHRo
ZXJlIGlzIGVub3VnaCBpbmZvcm1hdGlvbgorICAgICAgICAvLyBhdmFpbGFibGUgdG8gcmVzb2x2
ZSBpdCwgZG8gc28sIGFuZCBleHByZXNzIHRoZSByZXN1bHRpbmcgbnVtZXJpYyB2YWx1ZSBpbiB0
aGUgYXBwcm9wcmlhdGUgY2Fub25pY2FsCisgICAgICAgIC8vIHVuaXQuIFJldHVybiB0aGUgdmFs
dWUuCisKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhIGRpbWVuc2lvbiB0aGF0IGlzIG5vdCBleHBy
ZXNzZWQgaW4gaXRzIGNhbm9uaWNhbCB1bml0LCBhbmQgdGhlcmUgaXMgZW5vdWdoIGluZm9ybWF0
aW9uCisgICAgICAgIC8vIGF2YWlsYWJsZSB0byBjb252ZXJ0IGl0IHRvIHRoZSBjYW5vbmljYWwg
dW5pdCwgZG8gc28sIGFuZCByZXR1cm4gdGhlIHZhbHVlLgorICAgICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlPihyb290Tm9k
ZS5nZXQoKSk7CisgICAgICAgIHByaW1pdGl2ZVZhbHVlTm9kZS5jYW5vbmljYWxpemVVbml0KCk7
CisgICAgICAgIHJldHVybiBXVEZNb3ZlKHJvb3ROb2RlKTsKKyAgICB9CisKKyAgICAvLyBJZiBy
b290IGlzIGFuIG9wZXJhdG9yIG5vZGUgdGhhdOKAmXMgbm90IG9uZSBvZiB0aGUgY2FsYy1vcGVy
YXRvciBub2RlcywgYW5kIGFsbCBvZiBpdHMgY2hpbGRyZW4gYXJlIG51bWVyaWMgdmFsdWVzCisg
ICAgLy8gd2l0aCBlbm91Z2ggaW5mb3JtYXRpb24gdG8gY29tcHV0ZWQgdGhlIG9wZXJhdGlvbiBy
b290IHJlcHJlc2VudHMsIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgcm9vdOKAmXMgb3Bl
cmF0aW9uCisgICAgLy8gdXNpbmcgaXRzIGNoaWxkcmVuLCBleHByZXNzZWQgaW4gdGhlIHJlc3Vs
dOKAmXMgY2Fub25pY2FsIHVuaXQuCisgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25Ob2RlPihy
b290Tm9kZSkpIHsKKyAgICAgICAgYXV0byYgY2FsY09wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxD
U1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUuZ2V0KCkpOworICAgICAgICAvLyBEb24ndCBz
aW1wbGlmeSBhdCB0aGUgcm9vdCwgb3RoZXJ3aXNlIHdlIGxvc2UgdHJhY2sgb2YgdGhlIG9wZXJh
dGlvbiBmb3Igc2VyaWFsaXphdGlvbi4KKyAgICAgICAgaWYgKGNhbGNPcGVyYXRpb25Ob2RlLmNo
aWxkcmVuKCkuc2l6ZSgpID09IDEgJiYgZGVwdGgpCisgICAgICAgICAgICByZXR1cm4gV1RGTW92
ZShjYWxjT3BlcmF0aW9uTm9kZS5jaGlsZHJlbigpWzBdKTsKKyAgICAgICAgCisgICAgICAgIGlm
IChjYWxjT3BlcmF0aW9uTm9kZS5pc0NhbGNTdW1Ob2RlKCkpIHsKKyAgICAgICAgICAgIGNhbGNP
cGVyYXRpb25Ob2RlLmhvaXN0Q2hpbGRyZW5XaXRoT3BlcmF0b3IoQ2FsY09wZXJhdG9yOjpBZGQp
OworICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuY29tYmluZUNoaWxkcmVuKCk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoY2FsY09wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUo
KSkgeworICAgICAgICAgICAgY2FsY09wZXJhdGlvbk5vZGUuaG9pc3RDaGlsZHJlbldpdGhPcGVy
YXRvcihDYWxjT3BlcmF0b3I6Ok11bHRpcGx5KTsKKyAgICAgICAgICAgIGNhbGNPcGVyYXRpb25O
b2RlLmNvbWJpbmVDaGlsZHJlbigpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAo
Y2FsY09wZXJhdGlvbk5vZGUuaXNNaW5Pck1heE5vZGUoKSkKKyAgICAgICAgICAgIGNhbGNPcGVy
YXRpb25Ob2RlLmNvbWJpbmVDaGlsZHJlbigpOworCisgICAgICAgIC8vIElmIG9ubHkgb25lIGNo
aWxkIHJlbWFpbnMsIHJldHVybiB0aGUgY2hpbGQgKGV4Y2VwdCBhdCB0aGUgcm9vdCkuCisgICAg
ICAgIGF1dG8gc2hvdWxkQ29tYmluZVBhcmVudFdpdGhPbmx5Q2hpbGQgPSBbXShjb25zdCBDU1ND
YWxjT3BlcmF0aW9uTm9kZSYgcGFyZW50LCBpbnQgZGVwdGgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChwYXJlbnQuY2hpbGRyZW4oKS5zaXplKCkgIT0gMSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIC8vIEFsd2F5cyBzaW1wbGlmeSBiZWxvdyB0aGUg
cm9vdC4KKyAgICAgICAgICAgIGlmIChkZXB0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgICAgICAgICAgLy8gQXQgdGhlIHJvb3QsIHByZXNlcnZlIHRoZSByb290IGZ1bmN0
aW9uIGJ5IG9ubHkgbWVyZ2luZyBub2RlcyB3aXRoIHRoZSBzYW1lIGZ1bmN0aW9uLgorICAgICAg
ICAgICAgYXV0byYgY2hpbGQgPSBwYXJlbnQuY2hpbGRyZW4oKS5maXJzdCgpOworICAgICAgICAg
ICAgaWYgKCFpczxDU1NDYWxjT3BlcmF0aW9uTm9kZT4oY2hpbGQpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgYXV0byBwYXJlbnRGdW5jdGlvbiA9IGZ1bmN0
aW9uRnJvbU9wZXJhdG9yKHBhcmVudC5jYWxjT3BlcmF0b3IoKSk7CisgICAgICAgICAgICBhdXRv
IGNoaWxkRnVuY3Rpb24gPSBmdW5jdGlvbkZyb21PcGVyYXRvcihkb3duY2FzdDxDU1NDYWxjT3Bl
cmF0aW9uTm9kZT4oY2hpbGQuZ2V0KCkpLmNhbGNPcGVyYXRvcigpKTsKKyAgICAgICAgICAgIHJl
dHVybiBjaGlsZEZ1bmN0aW9uID09IHBhcmVudEZ1bmN0aW9uOworICAgICAgICB9OworCisgICAg
ICAgIGlmIChzaG91bGRDb21iaW5lUGFyZW50V2l0aE9ubHlDaGlsZChjYWxjT3BlcmF0aW9uTm9k
ZSwgZGVwdGgpKQorICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2FsY09wZXJhdGlvbk5vZGUu
Y2hpbGRyZW4oKS5maXJzdCgpKTsKKworICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7
CisgICAgfQorCisgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihyb290Tm9kZSkpIHsKKyAg
ICAgICAgYXV0byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY05lZ2F0ZU5vZGU+KHJvb3RO
b2RlLmdldCgpKS5jaGlsZCgpOworICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51
bWVyaWMgdmFsdWUsIHJldHVybiBhbiBlcXVpdmFsZW50IG51bWVyaWMgdmFsdWUsIGJ1dCB3aXRo
IHRoZSB2YWx1ZSBuZWdhdGVkICgwIC0gdmFsdWUpLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY1By
aW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlPihjaGlsZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIGRv
d25jYXN0PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkubmVnYXRlKCk7Cisg
ICAgICAgICAgICByZXR1cm4gY2hpbGROb2RlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIE5lZ2F0ZSBub2RlLCByZXR1cm4gdGhlIGNoaWxk
4oCZcyBjaGlsZC4KKyAgICAgICAgaWYgKGlzPENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5vZGUp
KQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZE5v
ZGUpLmNoaWxkKCk7CisgICAgICAgIAorICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7
CisgICAgfQorCisgICAgaWYgKGlzPENTU0NhbGNJbnZlcnROb2RlPihyb290Tm9kZSkpIHsKKyAg
ICAgICAgYXV0byYgY2hpbGROb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KHJvb3RO
b2RlLmdldCgpKS5jaGlsZCgpOworICAgICAgICAvLyBJZiByb2904oCZcyBjaGlsZCBpcyBhIG51
bWJlciAobm90IGEgcGVyY2VudGFnZSBvciBkaW1lbnNpb24pIHJldHVybiB0aGUgcmVjaXByb2Nh
bCBvZiB0aGUgY2hpbGTigJlzIHZhbHVlLgorICAgICAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2
ZVZhbHVlTm9kZT4oY2hpbGROb2RlKSAmJiBkb3duY2FzdDxDU1NDYWxjUHJpbWl0aXZlVmFsdWVO
b2RlPihjaGlsZE5vZGUpLmlzTnVtZXJpY1ZhbHVlKCkpIHsKKyAgICAgICAgICAgIGRvd25jYXN0
PENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU+KGNoaWxkTm9kZSkuaW52ZXJ0KCk7CisgICAgICAg
ICAgICByZXR1cm4gY2hpbGROb2RlOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgcm9vdOKA
mXMgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUsIHJldHVybiB0aGUgY2hpbGTigJlzIGNoaWxkLgor
ICAgICAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkpCisgICAgICAgICAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkTm9kZSkuY2hpbGQoKTsK
KworICAgICAgICByZXR1cm4gV1RGTW92ZShyb290Tm9kZSk7CisgICAgfQorCisgICAgcmV0dXJu
IFdURk1vdmUocm9vdE5vZGUpOworfQorCitDU1NVbml0VHlwZSBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6cHJpbWl0aXZlVHlwZSgpIGNvbnN0Cit7CisgICAgYXV0byB1bml0Q2F0ZWdvcnkgPSBjYXRl
Z29yeSgpOworICAgIHN3aXRjaCAodW5pdENhdGVnb3J5KSB7CisgICAgY2FzZSBDYWxjdWxhdGlv
bkNhdGVnb3J5OjpOdW1iZXI6CisjaWYgQVNTRVJUX0VOQUJMRUQKKyAgICAgICAgZm9yIChhdXRv
JiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAgICBBU1NFUlQoY2hpbGQtPmNhdGVnb3J5
KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKTsKKyNlbmRpZgorICAgICAgICByZXR1
cm4gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVI7CisKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnQ6IHsKKyAgICAgICAgaWYgKG1fY2hpbGRyZW4uaXNFbXB0eSgpKQorICAgICAg
ICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKKworICAgICAgICBpZiAobV9j
aGlsZHJlbi5zaXplKCkgPT0gMikgeworICAgICAgICAgICAgaWYgKG1fY2hpbGRyZW5bMF0tPmNh
dGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6TnVtYmVyKQorICAgICAgICAgICAgICAg
IHJldHVybiBtX2NoaWxkcmVuWzFdLT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgICAgICBpZiAo
bV9jaGlsZHJlblsxXS0+Y2F0ZWdvcnkoKSA9PSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY2hpbGRyZW5bMF0tPnByaW1pdGl2ZVR5cGUoKTsK
KyAgICAgICAgfQorICAgICAgICBDU1NVbml0VHlwZSBmaXJzdFR5cGUgPSBtX2NoaWxkcmVuWzBd
LT5wcmltaXRpdmVUeXBlKCk7CisgICAgICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVu
KSB7CisgICAgICAgICAgICBpZiAoZmlyc3RUeXBlICE9IGNoaWxkLT5wcmltaXRpdmVUeXBlKCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1VuaXRUeXBlOjpDU1NfVU5LTk9XTjsKKyAgICAg
ICAgfQorICAgICAgICByZXR1cm4gZmlyc3RUeXBlOworICAgIH0KKworICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6QW5n
bGU6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOgorICAgIGNhc2UgQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OgorICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkg
PT0gMSkKKyAgICAgICAgICAgIHJldHVybiBtX2NoaWxkcmVuLmZpcnN0KCktPnByaW1pdGl2ZVR5
cGUoKTsKKyAgICAgICAgcmV0dXJuIGNhbm9uaWNhbFVuaXRUeXBlRm9yQ2FsY3VsYXRpb25DYXRl
Z29yeSh1bml0Q2F0ZWdvcnkpOworCisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJj
ZW50TGVuZ3RoOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoK
KyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgICAgICByZXR1cm4gQ1NT
VW5pdFR5cGU6OkNTU19VTktOT1dOOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gQ1NTVW5pdFR5cGU6OkNTU19VTktOT1dOOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlQ2FsY0V4
cHJlc3Npb24oY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEp
IGNvbnN0Cit7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+
PiBub2RlczsKKyAgICBub2Rlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fY2hpbGRyZW4uc2l6
ZSgpKTsKKworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKSB7CisgICAgICAgIGF1
dG8gbm9kZSA9IGNoaWxkLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSk7Cisg
ICAgICAgIGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBu
b2Rlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShub2RlKSk7CisgICAgfQorCisgICAgLy8gUmV2
ZXJzZSB0aGUgb3BlcmF0aW9uIHdlIGRpZCB3aGVuIGNyZWF0aW5nIHRoaXMgbm9kZSwgcmVjb3Zl
cmluZyBhIHN1aXRhYmxlIGRlc3RpbmF0aW9uIGNhdGVnb3J5IGZvciBvdGhlcndpc2UtYW1iaWd1
b3VzIG1pbi9tYXgvY2xhbXAgbm9kZXMuCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgY2F0ZWdvcnkg
aXMgcmVhbGx5IG9ubHkgZ29vZCBlbm91Z2ggZm9yIHRoYXQgcHVycG9zZSBhbmQgaXMgbm90IGFj
Y3VyYXRlIGZvciBvdGhlciBub2RlIHR5cGVzOyB3ZSBjb3VsZCB1c2UgYSBib29sZWFuIGluc3Rl
YWQuCisgICAgYXV0byBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
T3RoZXI7CisgICAgaWYgKGNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dExlbmd0aCkKKyAgICAgICAgZGVzdGluYXRpb25DYXRlZ29yeSA9IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6Okxlbmd0aDsKKyAgICBlbHNlIGlmIChjYXRlZ29yeSgpID09IENhbGN1bGF0aW9uQ2F0ZWdv
cnk6OlBlcmNlbnROdW1iZXIpCisgICAgICAgIGRlc3RpbmF0aW9uQ2F0ZWdvcnkgPSBDYWxjdWxh
dGlvbkNhdGVnb3J5OjpOdW1iZXI7CisKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxDYWxjRXhwcmVz
c2lvbk9wZXJhdGlvbj4oV1RGTW92ZShub2RlcyksIG1fb3BlcmF0b3IsIGRlc3RpbmF0aW9uQ2F0
ZWdvcnkpOworfQorCitkb3VibGUgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmRvdWJsZVZhbHVlKENT
U1VuaXRUeXBlIHVuaXRUeXBlKSBjb25zdAoreworICAgIGJvb2wgYWxsb3dOdW1iZXJzID0gY2Fs
Y09wZXJhdG9yKCkgPT0gQ2FsY09wZXJhdG9yOjpNdWx0aXBseTsKKworICAgIHJldHVybiBldmFs
dWF0ZShtX2NoaWxkcmVuLm1hcChbJl0gKGF1dG8mIGNoaWxkKSB7CisgICAgICAgIENTU1VuaXRU
eXBlIGNoaWxkVHlwZSA9IHVuaXRUeXBlOworICAgICAgICBpZiAoYWxsb3dOdW1iZXJzICYmIHVu
aXRUeXBlICE9IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSICYmIGNoaWxkLT5wcmltaXRpdmVUeXBl
KCkgPT0gQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpCisgICAgICAgICAgICBjaGlsZFR5cGUgPSBD
U1NVbml0VHlwZTo6Q1NTX05VTUJFUjsKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5kb3VibGVWYWx1
ZShjaGlsZFR5cGUpOworICAgIH0pKTsKK30KKworZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2Rl
Ojpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhdGEpIGNvbnN0Cit7CisgICAgcmV0dXJuIGV2YWx1YXRlKG1fY2hpbGRyZW4ubWFwKFsm
XSAoYXV0byYgY2hpbGQpIHsKKyAgICAgICAgcmV0dXJuIGNoaWxkLT5jb21wdXRlTGVuZ3RoUHgo
Y29udmVyc2lvbkRhdGEpOworICAgIH0pKTsKK30KKwordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9k
ZTo6Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiYgdmFsdWVzKSBjb25zdAoreworICAgIGZvciAoYXV0byYgY2hpbGQgOiBtX2NoaWxk
cmVuKQorICAgICAgICBjaGlsZC0+Y29sbGVjdERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNp
ZXModmFsdWVzKTsKK30KKwordm9pZCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y29sbGVjdERpcmVj
dFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZh
bHVlcykgY29uc3QKK3sKKyAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9jaGlsZHJlbikKKyAgICAg
ICAgY2hpbGQtPmNvbGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyh2YWx1
ZXMpOworfQorCit2b2lkIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQoY29uc3Qg
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBub2RlLCBTdHJpbmdCdWlsZGVyJiBidWlsZGVyKQorewor
ICAgIGF1dG8gc2hvdWxkT3V0cHV0RW5jbG9zaW5nQ2FsYyA9IFtdKGNvbnN0IENTU0NhbGNFeHBy
ZXNzaW9uTm9kZSYgcm9vdE5vZGUpIHsKKyAgICAgICAgaWYgKGlzPENTU0NhbGNPcGVyYXRpb25O
b2RlPihyb290Tm9kZSkpIHsKKyAgICAgICAgICAgIGF1dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3du
Y2FzdDxDU1NDYWxjT3BlcmF0aW9uTm9kZT4ocm9vdE5vZGUpOworICAgICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbk5vZGUuaXNDYWxjU3VtTm9kZSgpIHx8IG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJv
ZHVjdE5vZGUoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gIWlzPENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU+KHJvb3ROb2RlKTsKKyAgICB9OworICAgIAorICAgIGJvb2wgb3V0cHV0Q2Fs
YyA9IHNob3VsZE91dHB1dEVuY2xvc2luZ0NhbGMobm9kZSk7CisgICAgaWYgKG91dHB1dENhbGMp
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCJjYWxjKCIpOworCisgICAgYnVpbGRDU1NUZXh0UmVj
dXJzaXZlKG5vZGUsIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsKKworICAgIGlmIChv
dXRwdXRDYWxjKQorICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOworfQorCitzdGF0aWMgY29u
c3QgY2hhciogZnVuY3Rpb25QcmVmaXhGb3JPcGVyYXRvcihDYWxjT3BlcmF0b3Igb3ApCit7Cisg
ICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6CisgICAgY2FzZSBD
YWxjT3BlcmF0b3I6OlN1YnRyYWN0OgorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNdWx0aXBseToK
KyAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuICIiOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHJl
dHVybiAibWluKCI7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogcmV0dXJuICJtYXgoIjsK
KyAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHJldHVybiAiY2xhbXAoIjsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuICIiOworfQorCisvLyA8aHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nz
cy12YWx1ZXMtNC8jc2VyaWFsaXplLWEtY2FsY3VsYXRpb24tdHJlZT4KK3ZvaWQgQ1NTQ2FsY09w
ZXJhdGlvbk5vZGU6OmJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lv
bk5vZGUmIG5vZGUsIFN0cmluZ0J1aWxkZXImIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zIHBhcmVu
cykKK3sKKyAgICAvLyBJZiByb290IGlzIGEgbnVtZXJpYyB2YWx1ZSwgb3IgYSBub24tbWF0aCBm
dW5jdGlvbiwgc2VyaWFsaXplIHJvb3QgcGVyIHRoZSBub3JtYWwgcnVsZXMgZm9yIGl0IGFuZCBy
ZXR1cm4gdGhlIHJlc3VsdC4KKyAgICBpZiAoaXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4o
bm9kZSkpIHsKKyAgICAgICAgYXV0byYgdmFsdWVOb2RlID0gZG93bmNhc3Q8Q1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZT4obm9kZSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHZhbHVlTm9kZS5j
dXN0b21DU1NUZXh0KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzPENT
U0NhbGNPcGVyYXRpb25Ob2RlPihub2RlKSkgeworICAgICAgICBhdXRvJiBvcGVyYXRpb25Ob2Rl
ID0gZG93bmNhc3Q8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+KG5vZGUpOworCisgICAgICAgIGlmIChv
cGVyYXRpb25Ob2RlLmlzQ2FsY1N1bU5vZGUoKSkgeworICAgICAgICAgICAgLy8gSWYgcm9vdCBp
cyBhIFN1bSBub2RlLCBsZXQgcyBiZSBhIHN0cmluZyBpbml0aWFsbHkgY29udGFpbmluZyAiKCIu
CisgICAgICAgICAgICBpZiAocGFyZW5zID09IEdyb3VwaW5nUGFyZW5zOjpJbmNsdWRlKQorICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCcoJyk7CisKKyAgICAgICAgICAgIC8vIFNpbXBs
aWZpY2F0aW9uIGFscmVhZHkgc29ydGVkIGNoaWxkcmVuLgorICAgICAgICAgICAgYXV0byYgY2hp
bGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAgICAgICAgICBBU1NFUlQoY2hp
bGRyZW4uc2l6ZSgpKTsKKyAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSByb2904oCZcyBmaXJzdCBj
aGlsZCwgYW5kIGFwcGVuZCBpdCB0byBzLgorICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJz
aXZlKGNoaWxkcmVuLmZpcnN0KCksIGJ1aWxkZXIpOworCisgICAgICAgICAgICAvLyBGb3IgZWFj
aCBjaGlsZCBvZiByb290IGJleW9uZCB0aGUgZmlyc3Q6CisgICAgICAgICAgICAvLyBJZiBjaGls
ZCBpcyBhIE5lZ2F0ZSBub2RlLCBhcHBlbmQgIiAtICIgdG8gcywgdGhlbiBzZXJpYWxpemUgdGhl
IE5lZ2F0ZeKAmXMgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRvIHMuCisgICAgICAgICAg
ICAvLyBJZiBjaGlsZCBpcyBhIG5lZ2F0aXZlIG51bWVyaWMgdmFsdWUsIGFwcGVuZCAiIC0gIiB0
byBzLCB0aGVuIHNlcmlhbGl6ZSB0aGUgbmVnYXRpb24gb2YgY2hpbGQgYXMgbm9ybWFsIGFuZCBh
cHBlbmQgdGhlIHJlc3VsdCB0byBzLgorICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBhcHBlbmQg
IiArICIgdG8gcywgdGhlbiBzZXJpYWxpemUgY2hpbGQgYW5kIGFwcGVuZCB0aGUgcmVzdWx0IHRv
IHMuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgY2hpbGRyZW4uc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvJiBjaGlsZCA9IGNoaWxkcmVuW2ldOworICAg
ICAgICAgICAgICAgIGlmIChpczxDU1NDYWxjTmVnYXRlTm9kZT4oY2hpbGQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgLSAiKTsKKyAgICAgICAgICAgICAgICAgICAg
YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGRvd25jYXN0PENTU0NhbGNOZWdhdGVOb2RlPihjaGlsZC5n
ZXQoKSkuY2hpbGQoKSwgYnVpbGRlcik7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAo
aXM8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4oY2hpbGQpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlTm9kZSA9IGRvd25jYXN0PENTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGU+KGNoaWxkLmdldCgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlTm9kZS5pc05lZ2F0aXZlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCIgLSAiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNlcmlhbGl6ZSB0
aGUgbmVnYXRpb24gb2YgY2hpbGQuCisgICAgICAgICAgICAgICAgICAgICAgICBhdXRvIHVuaXRU
eXBlID0gcHJpbWl0aXZlVmFsdWVOb2RlLnZhbHVlKCkucHJpbWl0aXZlVHlwZSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoMCAtIHByaW1pdGl2ZVZhbHVlTm9kZS52
YWx1ZSgpLmRvdWJsZVZhbHVlKCksIENTU1ByaW1pdGl2ZVZhbHVlOjp1bml0VHlwZVN0cmluZyh1
bml0VHlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiArICIpOworICAgICAgICAgICAgICAgIGJ1aWxkQ1NT
VGV4dFJlY3Vyc2l2ZShjaGlsZCwgYnVpbGRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChwYXJlbnMgPT0gR3JvdXBpbmdQYXJlbnM6OkluY2x1ZGUpCisgICAgICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJyknKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKG9wZXJhdGlvbk5vZGUuaXNDYWxjUHJvZHVjdE5vZGUoKSkg
eworICAgICAgICAgICAgLy8gSWYgcm9vdCBpcyBhIFByb2R1Y3Qgbm9kZSwgbGV0IHMgYmUgYSBz
dHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigiLgorICAgICAgICAgICAgaWYgKHBhcmVucyA9
PSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVu
ZCgnKCcpOworCisgICAgICAgICAgICAvLyBTaW1wbGlmaWNhdGlvbiBhbHJlYWR5IHNvcnRlZCBj
aGlsZHJlbi4KKyAgICAgICAgICAgIGF1dG8mIGNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGls
ZHJlbigpOworICAgICAgICAgICAgQVNTRVJUKGNoaWxkcmVuLnNpemUoKSk7CisgICAgICAgICAg
ICAvLyBTZXJpYWxpemUgcm9vdOKAmXMgZmlyc3QgY2hpbGQsIGFuZCBhcHBlbmQgaXQgdG8gcy4K
KyAgICAgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjaGlsZHJlbi5maXJzdCgpLCBidWls
ZGVyKTsKKworICAgICAgICAgICAgLy8gRm9yIGVhY2ggY2hpbGQgb2Ygcm9vdCBiZXlvbmQgdGhl
IGZpcnN0OgorICAgICAgICAgICAgLy8gSWYgY2hpbGQgaXMgYW4gSW52ZXJ0IG5vZGUsIGFwcGVu
ZCAiIC8gIiB0byBzLCB0aGVuIHNlcmlhbGl6ZSB0aGUgSW52ZXJ04oCZcyBjaGlsZCBhbmQgYXBw
ZW5kIHRoZSByZXN1bHQgdG8gcy4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSwgYXBwZW5kICIg
KiAiIHRvIHMsIHRoZW4gc2VyaWFsaXplIGNoaWxkIGFuZCBhcHBlbmQgdGhlIHJlc3VsdCB0byBz
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGNoaWxkcmVuLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgYXV0byYgY2hpbGQgPSBjaGlsZHJlbltpXTsKKyAgICAg
ICAgICAgICAgICBpZiAoaXM8Q1NTQ2FsY0ludmVydE5vZGU+KGNoaWxkKSkgeworICAgICAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiIC8gIik7CisgICAgICAgICAgICAgICAgICAgIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShkb3duY2FzdDxDU1NDYWxjSW52ZXJ0Tm9kZT4oY2hpbGQuZ2V0
KCkpLmNoaWxkKCksIGJ1aWxkZXIpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgiICogIik7
CisgICAgICAgICAgICAgICAgYnVpbGRDU1NUZXh0UmVjdXJzaXZlKGNoaWxkLCBidWlsZGVyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHBhcmVucyA9PSBHcm91cGluZ1BhcmVu
czo6SW5jbHVkZSkKKyAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnKScpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gSWYgcm9vdCBpcyBhbnl0aGlu
ZyBidXQgYSBTdW0sIE5lZ2F0ZSwgUHJvZHVjdCwgb3IgSW52ZXJ0IG5vZGUsIHNlcmlhbGl6ZSBh
IG1hdGggZnVuY3Rpb24gZm9yIHRoZQorICAgICAgICAvLyBmdW5jdGlvbiBjb3JyZXNwb25kaW5n
IHRvIHRoZSBub2RlIHR5cGUsIHRyZWF0aW5nIHRoZSBub2Rl4oCZcyBjaGlsZHJlbiBhcyB0aGUg
ZnVuY3Rpb27igJlzCisgICAgICAgIC8vIGNvbW1hLXNlcGFyYXRlZCBjYWxjdWxhdGlvbiBhcmd1
bWVudHMsIGFuZCByZXR1cm4gdGhlIHJlc3VsdC4KKyAgICAgICAgYnVpbGRlci5hcHBlbmQoZnVu
Y3Rpb25QcmVmaXhGb3JPcGVyYXRvcihvcGVyYXRpb25Ob2RlLmNhbGNPcGVyYXRvcigpKSk7CisK
KyAgICAgICAgYXV0byYgY2hpbGRyZW4gPSBvcGVyYXRpb25Ob2RlLmNoaWxkcmVuKCk7CisgICAg
ICAgIEFTU0VSVChjaGlsZHJlbi5zaXplKCkpOworICAgICAgICBidWlsZENTU1RleHRSZWN1cnNp
dmUoY2hpbGRyZW4uZmlyc3QoKSwgYnVpbGRlciwgR3JvdXBpbmdQYXJlbnM6Ok9taXQpOworCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBjaGlsZHJlbi5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoIiwgIik7CisgICAgICAgICAgICBidWlsZENTU1Rl
eHRSZWN1cnNpdmUoY2hpbGRyZW5baV0sIGJ1aWxkZXIsIEdyb3VwaW5nUGFyZW5zOjpPbWl0KTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoJyknKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoaXM8Q1NTQ2FsY05lZ2F0ZU5vZGU+KG5v
ZGUpKSB7CisgICAgICAgIGF1dG8mIG5lZ2F0ZU5vZGUgPSBkb3duY2FzdDxDU1NDYWxjTmVnYXRl
Tm9kZT4obm9kZSk7CisgICAgICAgIC8vIElmIHJvb3QgaXMgYSBOZWdhdGUgbm9kZSwgbGV0IHMg
YmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRhaW5pbmcgIigtMSAqICIuCisgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCItMSAqIik7CisgICAgICAgIGJ1aWxkQ1NTVGV4dFJlY3Vyc2l2ZShuZWdhdGVO
b2RlLmNoaWxkKCksIGJ1aWxkZXIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAg
IGlmIChpczxDU1NDYWxjSW52ZXJ0Tm9kZT4obm9kZSkpIHsKKyAgICAgICAgYXV0byYgaW52ZXJ0
Tm9kZSA9IGRvd25jYXN0PENTU0NhbGNJbnZlcnROb2RlPihub2RlKTsKKyAgICAgICAgLy8gSWYg
cm9vdCBpcyBhbiBJbnZlcnQgbm9kZSwgbGV0IHMgYmUgYSBzdHJpbmcgaW5pdGlhbGx5IGNvbnRh
aW5pbmcgIigxIC8gIi4KKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIjEgLyAiKTsKKyAgICAgICAg
YnVpbGRDU1NUZXh0UmVjdXJzaXZlKGludmVydE5vZGUuY2hpbGQoKSwgYnVpbGRlcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9Cit9CisKK3ZvaWQgQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmR1bXAo
VGV4dFN0cmVhbSYgdHMpIGNvbnN0Cit7CisgICAgdHMgPDwgImNhbGMgb3BlcmF0aW9uICIgPDwg
bV9vcGVyYXRvciA8PCAiIChjYXRlZ29yeTogIiA8PCBjYXRlZ29yeSgpIDw8ICIsIHR5cGUgIiA8
PCBwcmltaXRpdmVUeXBlKCkgPDwgIikiOworCisgICAgVGV4dFN0cmVhbTo6R3JvdXBTY29wZSBz
Y29wZSh0cyk7CisgICAgdHMgPDwgbV9jaGlsZHJlbi5zaXplKCkgPDwgIiBjaGlsZHJlbiI7Cisg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgIHRzLmR1bXBQcm9wZXJ0
eSgibm9kZSIsIGNoaWxkKTsKK30KKworYm9vbCBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6ZXF1YWxz
KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgZXhwKSBjb25zdAoreworICAgIGlmICh0eXBl
KCkgIT0gZXhwLnR5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgQ1NT
Q2FsY09wZXJhdGlvbk5vZGUmIG90aGVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY09wZXJh
dGlvbk5vZGUmPihleHApOworCisgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpICE9IG90aGVyLm1f
Y2hpbGRyZW4uc2l6ZSgpIHx8IG1fb3BlcmF0b3IgIT0gb3RoZXIubV9vcGVyYXRvcikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2NoaWxkcmVu
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghY29tcGFyZUNTU1ZhbHVlKG1fY2hpbGRyZW5b
aV0sIG90aGVyLm1fY2hpbGRyZW5baV0pKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZG91YmxlIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpl
dmFsdWF0ZU9wZXJhdG9yKENhbGNPcGVyYXRvciBvcCwgY29uc3QgVmVjdG9yPGRvdWJsZT4mIGNo
aWxkcmVuKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6QWRk
OiB7CisgICAgICAgIGRvdWJsZSBzdW0gPSAwOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDog
Y2hpbGRyZW4pCisgICAgICAgICAgICBzdW0gKz0gY2hpbGQ7CisgICAgICAgIHJldHVybiBzdW07
CisgICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpTdWJ0cmFjdDoKKyAgICAgICAgQVNTRVJU
KGNoaWxkcmVuLnNpemUoKSA9PSAyKTsKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzBdIC0gY2hp
bGRyZW5bMV07CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB7CisgICAgICAgIGRv
dWJsZSBwcm9kdWN0ID0gMTsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IGNoaWxkcmVuKQor
ICAgICAgICAgICAgcHJvZHVjdCAqPSBjaGlsZDsKKyAgICAgICAgcmV0dXJuIHByb2R1Y3Q7Cisg
ICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpEaXZpZGU6CisgICAgICAgIEFTU0VSVChjaGls
ZHJlbi5zaXplKCkgPT0gMSB8fCBjaGlsZHJlbi5zaXplKCkgPT0gMik7CisgICAgICAgIGlmIChj
aGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGlt
aXRzPGRvdWJsZT46OnF1aWV0X05hTigpOworICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0gLyBj
aGlsZHJlblsxXTsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7CisgICAgICAgIGlmIChj
aGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgZG91YmxlIG1pbmltdW0gPSBjaGlsZHJl
blswXTsKKyAgICAgICAgZm9yIChhdXRvIGNoaWxkIDogY2hpbGRyZW4pCisgICAgICAgICAgICBt
aW5pbXVtID0gc3RkOjptaW4obWluaW11bSwgY2hpbGQpOworICAgICAgICByZXR1cm4gbWluaW11
bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogeworICAgICAgICBpZiAoY2hp
bGRyZW4uaXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8
ZG91YmxlPjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGRvdWJsZSBtYXhpbXVtID0gY2hpbGRyZW5b
MF07CisgICAgICAgIGZvciAoYXV0byBjaGlsZCA6IGNoaWxkcmVuKQorICAgICAgICAgICAgbWF4
aW11bSA9IHN0ZDo6bWF4KG1heGltdW0sIGNoaWxkKTsKKyAgICAgICAgcmV0dXJuIG1heGltdW07
CisgICAgfQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogeworICAgICAgICBpZiAoY2hp
bGRyZW4uc2l6ZSgpICE9IDMpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxkb3VibGU+OjpxdWlldF9OYU4oKTsKKyAgICAgICAgZG91YmxlIG1pbiA9IGNoaWxkcmVuWzBd
OworICAgICAgICBkb3VibGUgdmFsdWUgPSBjaGlsZHJlblsxXTsKKyAgICAgICAgZG91YmxlIG1h
eCA9IGNoaWxkcmVuWzJdOworICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2
YWx1ZSwgbWF4KSk7CisgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworCisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNPcGVyYXRpb25Ob2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL2Nh
bGMvQ1NTQ2FsY09wZXJhdGlvbk5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvY2FsYy9DU1NDYWxjT3BlcmF0aW9uTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NDYWxj
RXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxj
T3BlcmF0aW9uTm9kZSBmaW5hbCA6IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Q1NT
Q2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZShDYWxjT3BlcmF0b3IsIFJlZlB0cjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+JiYgbGVmdFNpZGUsIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYg
cmlnaHRTaWRlKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVh
dGVTdW0oVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYmIHZhbHVlcyk7CisgICAg
c3RhdGljIFJlZlB0cjxDU1NDYWxjT3BlcmF0aW9uTm9kZT4gY3JlYXRlUHJvZHVjdChWZWN0b3I8
UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzKTsKKyAgICBzdGF0aWMgUmVmUHRy
PENTU0NhbGNPcGVyYXRpb25Ob2RlPiBjcmVhdGVNaW5Pck1heE9yQ2xhbXAoQ2FsY09wZXJhdG9y
LCBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4+JiYgdmFsdWVzLCBDYWxjdWxhdGlv
bkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdvcnkpOworCisgICAgc3RhdGljIFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+IHNpbXBsaWZ5KFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+JiYpOwor
CisgICAgc3RhdGljIHZvaWQgYnVpbGRDU1NUZXh0KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9k
ZSYsIFN0cmluZ0J1aWxkZXImKTsKKworICAgIENhbGNPcGVyYXRvciBjYWxjT3BlcmF0b3IoKSBj
b25zdCB7IHJldHVybiBtX29wZXJhdG9yOyB9CisgICAgYm9vbCBpc0NhbGNTdW1Ob2RlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6OkFkZDsgfQorICAgIGJvb2wg
aXNDYWxjUHJvZHVjdE5vZGUoKSBjb25zdCB7IHJldHVybiBtX29wZXJhdG9yID09IENhbGNPcGVy
YXRvcjo6TXVsdGlwbHk7IH0KKyAgICBib29sIGlzTWluT3JNYXhOb2RlKCkgY29uc3QgeyByZXR1
cm4gbV9vcGVyYXRvciA9PSBDYWxjT3BlcmF0b3I6Ok1pbiB8fCBtX29wZXJhdG9yID09IENhbGNP
cGVyYXRvcjo6TWF4OyB9CisgICAgYm9vbCBzaG91bGRTb3J0Q2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiBpc0NhbGNTdW1Ob2RlKCkgfHwgaXNDYWxjUHJvZHVjdE5vZGUoKTsgfQorCisgICAgdm9p
ZCBob2lzdENoaWxkcmVuV2l0aE9wZXJhdG9yKENhbGNPcGVyYXRvcik7CisgICAgdm9pZCBjb21i
aW5lQ2hpbGRyZW4oKTsKKyAgICAKKyAgICBib29sIGNhbkNvbWJpbmVBbGxDaGlsZHJlbigpIGNv
bnN0OworCisgICAgY29uc3QgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisgICAgVmVjdG9yPFJlZjxDU1ND
YWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisK
K3ByaXZhdGU6CisgICAgQ1NTQ2FsY09wZXJhdGlvbk5vZGUoQ2FsY3VsYXRpb25DYXRlZ29yeSBj
YXRlZ29yeSwgQ2FsY09wZXJhdG9yIG9wLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIGxl
ZnRTaWRlLCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiYmIHJpZ2h0U2lkZSkKKyAgICAgICAg
OiBDU1NDYWxjRXhwcmVzc2lvbk5vZGUoY2F0ZWdvcnkpCisgICAgICAgICwgbV9vcGVyYXRvcihv
cCkKKyAgICB7CisgICAgICAgIG1fY2hpbGRyZW4ucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsK
KyAgICAgICAgbV9jaGlsZHJlbi51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShsZWZ0U2lkZSkpOwor
ICAgICAgICBtX2NoaWxkcmVuLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKHJpZ2h0U2lkZSkpOwor
ICAgIH0KKworICAgIENTU0NhbGNPcGVyYXRpb25Ob2RlKENhbGN1bGF0aW9uQ2F0ZWdvcnkgY2F0
ZWdvcnksIENhbGNPcGVyYXRvciBvcCwgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
PiYmIGNoaWxkcmVuKQorICAgICAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYXRlZ29yeSkK
KyAgICAgICAgLCBtX29wZXJhdG9yKG9wKQorICAgICAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShj
aGlsZHJlbikpCisgICAgeworICAgIH0KKworICAgIFR5cGUgdHlwZSgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIENzc0NhbGNPcGVyYXRpb247IH0KKworICAgIGJvb2wgaXNaZXJvKCkgY29uc3QgZmlu
YWwKKyAgICB7CisgICAgICAgIHJldHVybiAhZG91YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKTsK
KyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmKSBj
b25zdCBmaW5hbDsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNy
ZWF0ZUNhbGNFeHByZXNzaW9uKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25z
dCBmaW5hbDsKKworICAgIENTU1VuaXRUeXBlIHByaW1pdGl2ZVR5cGUoKSBjb25zdCBmaW5hbDsK
KyAgICBkb3VibGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOworICAgIGRv
dWJsZSBjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNv
bnN0IGZpbmFsOworCisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVu
Y2llcyhIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xs
ZWN0RGlyZWN0Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0
eUlEPiYpIGNvbnN0IGZpbmFsOworCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBm
aW5hbDsKKworICAgIHN0YXRpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUqIGdldE51bWJlclNpZGUo
Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBsZWZ0U2lkZSwgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlJiBy
aWdodFNpZGUpCisgICAgeworICAgICAgICBpZiAobGVmdFNpZGUuY2F0ZWdvcnkoKSA9PSBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpOdW1iZXIpCisgICAgICAgICAgICByZXR1cm4gJmxlZnRTaWRlOwor
ICAgICAgICBpZiAocmlnaHRTaWRlLmNhdGVnb3J5KCkgPT0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
TnVtYmVyKQorICAgICAgICAgICAgcmV0dXJuICZyaWdodFNpZGU7CisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIH0KKworICAgIGRvdWJsZSBldmFsdWF0ZShjb25zdCBWZWN0b3I8ZG91Ymxl
PiYgY2hpbGRyZW4pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZXZhbHVhdGVPcGVyYXRv
cihtX29wZXJhdG9yLCBjaGlsZHJlbik7CisgICAgfQorCisgICAgc3RhdGljIGRvdWJsZSBldmFs
dWF0ZU9wZXJhdG9yKENhbGNPcGVyYXRvciwgY29uc3QgVmVjdG9yPGRvdWJsZT4mKTsKKyAgICBz
dGF0aWMgUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4gc2ltcGxpZnlOb2RlKFJlZjxDU1NDYWxj
RXhwcmVzc2lvbk5vZGU+JiYsIGludCBkZXB0aCk7CisgICAgc3RhdGljIFJlZjxDU1NDYWxjRXhw
cmVzc2lvbk5vZGU+IHNpbXBsaWZ5UmVjdXJzaXZlKFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+
JiYsIGludCBkZXB0aCk7CisgICAgCisgICAgZW51bSBjbGFzcyBHcm91cGluZ1BhcmVucyB7Cisg
ICAgICAgIE9taXQsCisgICAgICAgIEluY2x1ZGUKKyAgICB9OworICAgIHN0YXRpYyB2b2lkIGJ1
aWxkQ1NTVGV4dFJlY3Vyc2l2ZShjb25zdCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmLCBTdHJpbmdC
dWlsZGVyJiwgR3JvdXBpbmdQYXJlbnMgPSBHcm91cGluZ1BhcmVuczo6SW5jbHVkZSk7CisKKyAg
ICBDYWxjT3BlcmF0b3IgbV9vcGVyYXRvcjsKKyAgICBWZWN0b3I8UmVmPENTU0NhbGNFeHByZXNz
aW9uTm9kZT4+IG1fY2hpbGRyZW47Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q1NTQ0FMQ0VYUFJFU1NJT05fTk9ERShDU1NDYWxjT3BlcmF0aW9uTm9kZSwgdHlwZSgpID09IFdl
YkNvcmU6OkNTU0NhbGNFeHByZXNzaW9uTm9kZTo6VHlwZTo6Q3NzQ2FsY09wZXJhdGlvbikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRpdmVW
YWx1ZU5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NT
U0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICog
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGUuaCIKKworI2luY2x1ZGUgIkNTU0NhbGNDYXRlZ29yeU1hcHBpbmcu
aCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1ByaW1pdGl2
ZVZhbHVlTWFwcGluZ3MuaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2lu
Y2x1ZGUgIkNhbGNFeHByZXNzaW9uTnVtYmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlZjxDU1NDYWxjUHJpbWl0aXZlVmFs
dWVOb2RlPiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjcmVhdGUoUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbHVlKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGUoV1RGTW92ZSh2YWx1ZSkpKTsKK30KKworUmVmUHRyPENTU0NhbGNQcmlt
aXRpdmVWYWx1ZU5vZGU+IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShkb3VibGUg
dmFsdWUsIENTU1VuaXRUeXBlIHR5cGUpCit7CisgICAgaWYgKCFzdGQ6OmlzZmluaXRlKHZhbHVl
KSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIHR5
cGUpKSk7Cit9CisKK1N0cmluZyBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjdXN0b21DU1NU
ZXh0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZS0+Y3NzVGV4dCgpOworfQorCitDU1NV
bml0VHlwZSBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpwcmltaXRpdmVUeXBlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV92YWx1ZS0+cHJpbWl0aXZlVHlwZSgpOworfQorCitDU1NDYWxjUHJp
bWl0aXZlVmFsdWVOb2RlOjpDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFJlZjxDU1NQcmltaXRp
dmVWYWx1ZT4mJiB2YWx1ZSkKKyAgICA6IENTU0NhbGNFeHByZXNzaW9uTm9kZShjYWxjVW5pdENh
dGVnb3J5KHZhbHVlLT5wcmltaXRpdmVUeXBlKCkpKQorICAgICwgbV92YWx1ZShXVEZNb3ZlKHZh
bHVlKSkKK3sKK30KKworLy8gRklYTUU6IFVzZSBjYWxjVW5pdENhdGVnb3J5PworYm9vbCBDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlOjppc051bWVyaWNWYWx1ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fdmFsdWUtPmlzTGVuZ3RoKCkgfHwgbV92YWx1ZS0+aXNOdW1iZXIoKSB8fCBtX3ZhbHVl
LT5pc1BlcmNlbnRhZ2UoKSB8fCBtX3ZhbHVlLT5pc0FuZ2xlKCkKKyAgICAgICAgfHwgbV92YWx1
ZS0+aXNUaW1lKCkgfHwgbV92YWx1ZS0+aXNSZXNvbHV0aW9uKCkgfHwgbV92YWx1ZS0+aXNGbGV4
KCkgfHwgbV92YWx1ZS0+aXNGcmVxdWVuY3koKTsKK30KKworYm9vbCBDU1NDYWxjUHJpbWl0aXZl
VmFsdWVOb2RlOjppc05lZ2F0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gaXNOdW1lcmljVmFs
dWUoKSAmJiBtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpIDwgMC4wOworfQorCit2b2lkIENTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGU6Om5lZ2F0ZSgpCit7CisgICAgQVNTRVJUKGlzTnVtZXJpY1ZhbHVl
KCkpOworICAgIG1fdmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAuMCAtIG1fdmFs
dWUtPmRvdWJsZVZhbHVlKCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7Cit9CisKK3ZvaWQg
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6aW52ZXJ0KCkKK3sKKyAgICBBU1NFUlQoaXNOdW1l
cmljVmFsdWUoKSk7CisgICAgaWYgKCFtX3ZhbHVlLT5kb3VibGVWYWx1ZSgpKQorICAgICAgICBt
X3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShzdGQ6Om51bWVyaWNfbGltaXRzPGRv
dWJsZT46OmluZmluaXR5KCksIG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7CisKKyAgICBtX3Zh
bHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZSgxLjAgLyBtX3ZhbHVlLT5kb3VibGVWYWx1
ZSgpLCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGU6OmFkZChjb25zdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlJiBub2RlLCBV
bml0Q29udmVyc2lvbiB1bml0Q29udmVyc2lvbikKK3sKKyAgICBhdXRvIHZhbHVlVHlwZSA9IG1f
dmFsdWUtPnByaW1pdGl2ZVR5cGUoKTsKKworICAgIHN3aXRjaCAodW5pdENvbnZlcnNpb24pIHsK
KyAgICBjYXNlIFVuaXRDb252ZXJzaW9uOjpJbnZhbGlkOgorICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVbml0Q29udmVyc2lvbjo6UHJlc2Vy
dmU6CisgICAgICAgIEFTU0VSVChub2RlLnByaW1pdGl2ZVR5cGUoKSA9PSB2YWx1ZVR5cGUpOwor
ICAgICAgICBtX3ZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlLT5kb3Vi
bGVWYWx1ZSgpICsgbm9kZS5kb3VibGVWYWx1ZSh2YWx1ZVR5cGUpLCB2YWx1ZVR5cGUpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFVuaXRDb252ZXJzaW9uOjpDYW5vbmljYWxpemU6IHsKKyAg
ICAgICAgYXV0byB2YWx1ZUNhdGVnb3J5ID0gdW5pdENhdGVnb3J5KHZhbHVlVHlwZSk7CisgICAg
ICAgIC8vIEZJWE1FOiBJdCdzIGF3a3dhcmQgdGhhdCBjYW5vbmljYWxVbml0VHlwZUZvckNhdGVn
b3J5KCkgaGFzIHNwZWNpYWwgaGFuZGxpbmcgZm9yIENTU1VuaXRDYXRlZ29yeTo6UGVyY2VudC4K
KyAgICAgICAgYXV0byBjYW5vbmljYWxUeXBlID0gdmFsdWVDYXRlZ29yeSA9PSBDU1NVbml0Q2F0
ZWdvcnk6OlBlcmNlbnQgPyBDU1NVbml0VHlwZTo6Q1NTX1BFUkNFTlRBR0UgOiBjYW5vbmljYWxV
bml0VHlwZUZvckNhdGVnb3J5KHZhbHVlQ2F0ZWdvcnkpOworICAgICAgICBBU1NFUlQoY2Fub25p
Y2FsVHlwZSAhPSBDU1NVbml0VHlwZTo6Q1NTX1VOS05PV04pOworICAgICAgICBkb3VibGUgbGVm
dFZhbHVlID0gbV92YWx1ZS0+ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7CisgICAgICAgIGRv
dWJsZSByaWdodFZhbHVlID0gbm9kZS5kb3VibGVWYWx1ZShjYW5vbmljYWxUeXBlKTsKKyAgICAg
ICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobGVmdFZhbHVlICsgcmlnaHRW
YWx1ZSwgY2Fub25pY2FsVHlwZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6bXVsdGlwbHkoZG91YmxlIG11bHRpcGxp
ZXIpCit7CisgICAgYXV0byB2YWx1ZVR5cGUgPSBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCk7Cisg
ICAgQVNTRVJUKGhhc0RvdWJsZVZhbHVlKHZhbHVlVHlwZSkpOworICAgIG1fdmFsdWUgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG1fdmFsdWUtPmRvdWJsZVZhbHVlKHZhbHVlVHlwZSkgKiBt
dWx0aXBsaWVyLCB2YWx1ZVR5cGUpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5v
ZGU6OmNvbnZlcnRUb1VuaXRUeXBlKENTU1VuaXRUeXBlIHVuaXRUeXBlKQoreworICAgIEFTU0VS
VCh1bml0Q2F0ZWdvcnkodW5pdFR5cGUpID09IHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRp
dmVUeXBlKCkpKTsKKyAgICBkb3VibGUgbmV3VmFsdWUgPSBtX3ZhbHVlLT5kb3VibGVWYWx1ZSh1
bml0VHlwZSk7CisgICAgbV92YWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUobmV3VmFs
dWUsIHVuaXRUeXBlKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjYW5v
bmljYWxpemVVbml0KCkKK3sKKyAgICBhdXRvIGNhdGVnb3J5ID0gY2FsY3VsYXRpb25DYXRlZ29y
eUZvckNvbWJpbmF0aW9uKG1fdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSk7CisgICAgaWYgKGNhdGVn
b3J5ID09IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyKQorICAgICAgICByZXR1cm47CisKKyAg
ICBhdXRvIGNhbm9uaWNhbFR5cGUgPSBjYW5vbmljYWxVbml0VHlwZUZvckNhbGN1bGF0aW9uQ2F0
ZWdvcnkoY2F0ZWdvcnkpOworICAgIGlmIChjYW5vbmljYWxUeXBlID09IG1fdmFsdWUtPnByaW1p
dGl2ZVR5cGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG91YmxlIG5ld1ZhbHVlID0gbV92
YWx1ZS0+ZG91YmxlVmFsdWUoY2Fub25pY2FsVHlwZSk7CisgICAgbV92YWx1ZSA9IENTU1ByaW1p
dGl2ZVZhbHVlOjpjcmVhdGUobmV3VmFsdWUsIGNhbm9uaWNhbFR5cGUpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpj
cmVhdGVDYWxjRXhwcmVzc2lvbihjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252
ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGNhdGVnb3J5KCkpIHsKKyAgICBjYXNl
IENhbGN1bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8
Q2FsY0V4cHJlc3Npb25OdW1iZXI+KG1fdmFsdWUtPmZsb2F0VmFsdWUoKSk7CisgICAgY2FzZSBD
YWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPENh
bGNFeHByZXNzaW9uTGVuZ3RoPihMZW5ndGgobV92YWx1ZS0+Y29tcHV0ZUxlbmd0aDxmbG9hdD4o
Y29udmVyc2lvbkRhdGEpLCBMZW5ndGhUeXBlOjpGaXhlZCkpOworICAgIGNhc2UgQ2FsY3VsYXRp
b25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlBlcmNl
bnRMZW5ndGg6IHsKKyAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8Q2FsY0V4cHJlc3Npb25MZW5n
dGg+KG1fdmFsdWUtPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEZsb2F0Q29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSkpOworICAgIH0KKyAgICAvLyBPbmx5IHR5cGVz
IHRoYXQgY291bGQgYmUgcGFydCBvZiBhIExlbmd0aCBleHByZXNzaW9uIGNhbiBiZSBjb252ZXJ0
ZWQKKyAgICAvLyB0byBhIENhbGNFeHByZXNzaW9uTm9kZS4gQ2FsY3VsYXRpb25DYXRlZ29yeTo6
UGVyY2VudE51bWJlciBtYWtlcyBubyBzZW5zZSBhcyBhIExlbmd0aC4KKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OlBlcmNlbnROdW1iZXI6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVn
b3J5OjpBbmdsZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OlRpbWU6CisgICAgY2Fz
ZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpGcmVxdWVuY3k6CisgICAgY2FzZSBDYWxjdWxhdGlvbkNh
dGVnb3J5OjpPdGhlcjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBudWxscHRyOworfQorCitkb3VibGUg
Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUgdW5pdFR5
cGUpIGNvbnN0Cit7CisgICAgaWYgKGhhc0RvdWJsZVZhbHVlKHVuaXRUeXBlKSkgeworICAgICAg
ICAvLyBGSVhNRTogVGhpcyBzaG91bGQgQVNTRVJUKHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmlt
aXRpdmVUeXBlKCkpID09IHVuaXRDYXRlZ29yeSh1bml0VHlwZSkpLCBidXQgb25seSB3aGVuIGFs
bCBjYWxsZXJzIGFyZSBmaXhlZCAoZS5nLiB3ZWJraXQub3JnL2IvMjA0ODI2KS4KKyAgICAgICAg
aWYgKHVuaXRDYXRlZ29yeShtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkpICE9IHVuaXRDYXRlZ29y
eSh1bml0VHlwZSkpIHsKKyAgICAgICAgICAgIExPR19XSVRIX1NUUkVBTShDYWxjLCBzdHJlYW0g
PDwgIkNhbGxpbmcgZG91YmxlVmFsdWUoKSB3aXRoIHVuaXQgIiA8PCB1bml0VHlwZSA8PCAiIG9u
IGEgbm9kZSBvZiB1bml0IHR5cGUgIiA8PCBtX3ZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPDwgIiB3
aGljaCBpcyBpbmNvbXBhdGlibGUiKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZhbHVlKHVuaXRUeXBlKTsKKyAgICB9
CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2RvdWJsZSBD
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlOjpjb21wdXRlTGVuZ3RoUHgoY29uc3QgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lvbkRhdGEpIGNvbnN0Cit7CisgICAgc3dpdGNoIChj
YXRlZ29yeSgpKSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpMZW5ndGg6CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlLT5jb21wdXRlTGVuZ3RoPGRvdWJsZT4oY29udmVyc2lvbkRhdGEp
OworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudDoKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6Ok51bWJlcjoKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUtPmRvdWJsZVZh
bHVlKCk7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpQZXJjZW50TGVuZ3RoOgorICAg
IGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudE51bWJlcjoKKyAgICBjYXNlIENhbGN1
bGF0aW9uQ2F0ZWdvcnk6OkFuZ2xlOgorICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6VGlt
ZToKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6OkZyZXF1ZW5jeToKKyAgICBjYXNlIENh
bGN1bGF0aW9uQ2F0ZWdvcnk6Ok90aGVyOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNvbGxlY3REaXJl
Y3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHZhbHVl
cykgY29uc3QKK3sKKyAgICBtX3ZhbHVlLT5jb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVu
ZGVuY2llcyh2YWx1ZXMpOworfQorCit2b2lkIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNv
bGxlY3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3Bl
cnR5SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgbV92YWx1ZS0+Y29sbGVjdERpcmVjdFJvb3RD
b21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKHZhbHVlcyk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZTo6aXNaZXJvKCkgY29uc3QKK3sKKyAgICByZXR1cm4gIW1fdmFsdWUtPmRv
dWJsZVZhbHVlKCk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6ZXF1YWxz
KGNvbnN0IENTU0NhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKHR5
cGUoKSAhPSBvdGhlci50eXBlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBjb21wYXJlQ1NTVmFsdWUobV92YWx1ZSwgc3RhdGljX2Nhc3Q8Y29uc3QgQ1NTQ2FsY1ByaW1p
dGl2ZVZhbHVlTm9kZSY+KG90aGVyKS5tX3ZhbHVlKTsKK30KKwordm9pZCBDU1NDYWxjUHJpbWl0
aXZlVmFsdWVOb2RlOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8ICJ2
YWx1ZSAiIDw8IG1fdmFsdWUtPmN1c3RvbUNTU1RleHQoKSA8PCAiIChjYXRlZ29yeTogIiA8PCBj
YXRlZ29yeSgpIDw8ICIsIHR5cGU6ICIgPDwgcHJpbWl0aXZlVHlwZSgpIDw8ICIpIjsKK30KKwor
fQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNQcmltaXRp
dmVWYWx1ZU5vZGUuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvY2FsYy9D
U1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTQ2FsY0V4cHJlc3Np
b25Ob2RlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJpbWl0aXZlVmFs
dWU7CitjbGFzcyBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhOworCitlbnVtIENTU1Byb3BlcnR5
SUQgOiB1aW50MTZfdDsKKworY2xhc3MgQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZSBmaW5hbCA6
IHB1YmxpYyBDU1NDYWxjRXhwcmVzc2lvbk5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Q1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZT4g
Y3JlYXRlKFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJik7CisgICAgc3RhdGljIFJlZlB0cjxDU1ND
YWxjUHJpbWl0aXZlVmFsdWVOb2RlPiBjcmVhdGUoZG91YmxlIHZhbHVlLCBDU1NVbml0VHlwZSk7
CisKKyAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OworCisgICAgQ1NTVW5pdFR5cGUg
cHJpbWl0aXZlVHlwZSgpIGNvbnN0IGZpbmFsOworCisgICAgYm9vbCBpc051bWVyaWNWYWx1ZSgp
IGNvbnN0OworICAgIGJvb2wgaXNOZWdhdGl2ZSgpIGNvbnN0OworCisgICAgdm9pZCBuZWdhdGUo
KTsKKyAgICB2b2lkIGludmVydCgpOworCisgICAgZW51bSBjbGFzcyBVbml0Q29udmVyc2lvbiB7
CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFByZXNlcnZlLAorICAgICAgICBDYW5vbmljYWxp
emUKKyAgICB9OworICAgIHZvaWQgYWRkKGNvbnN0IENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGUm
LCBVbml0Q29udmVyc2lvbiA9IFVuaXRDb252ZXJzaW9uOjpQcmVzZXJ2ZSk7CisgICAgdm9pZCBt
dWx0aXBseShkb3VibGUpOworCisgICAgdm9pZCBjb252ZXJ0VG9Vbml0VHlwZShDU1NVbml0VHlw
ZSk7CisgICAgdm9pZCBjYW5vbmljYWxpemVVbml0KCk7CisKKyAgICBjb25zdCBDU1NQcmltaXRp
dmVWYWx1ZSYgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmdldCgpOyB9CisKK3ByaXZh
dGU6CisgICAgYm9vbCBpc1plcm8oKSBjb25zdCBmaW5hbDsKKyAgICBib29sIGVxdWFscyhjb25z
dCBDU1NDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdCBmaW5hbDsKKyAgICBUeXBlIHR5
cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBDc3NDYWxjUHJpbWl0aXZlVmFsdWU7IH0KKworICAg
IHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+IGNyZWF0ZUNhbGNFeHByZXNzaW9u
KGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmKSBjb25zdCBmaW5hbDsKKyAgICBkb3Vi
bGUgZG91YmxlVmFsdWUoQ1NTVW5pdFR5cGUpIGNvbnN0IGZpbmFsOworCisgICAgZG91YmxlIGNv
bXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJikgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+JikgY29uc3QgZmluYWw7CisgICAgdm9pZCBjb2xsZWN0RGlyZWN0
Um9vdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNv
bnN0IGZpbmFsOworCisgICAgdm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKwor
cHJpdmF0ZToKKyAgICBleHBsaWNpdCBDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlKFJlZjxDU1NQ
cmltaXRpdmVWYWx1ZT4mJik7CisKKyAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IG1fdmFsdWU7
Cit9OworCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTQ0FMQ0VYUFJFU1NJT05fTk9E
RShDU1NDYWxjUHJpbWl0aXZlVmFsdWVOb2RlLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q1NTQ2FsY0V4
cHJlc3Npb25Ob2RlOjpUeXBlOjpDc3NDYWxjUHJpbWl0aXZlVmFsdWUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvY2FsYy9DU1NDYWxjVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL2NhbGMvQ1NTQ2FsY1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDMzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFy
ZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5
cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv
bQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQg
SE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisg
KiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
VEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NDYWxj
VmFsdWUuaCIKKworI2luY2x1ZGUgIkNTU0NhbGNFeHByZXNzaW9uTm9kZVBhcnNlci5oIgorI2lu
Y2x1ZGUgIkNTU0NhbGNJbnZlcnROb2RlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY05lZ2F0ZU5vZGUu
aCIKKyNpbmNsdWRlICJDU1NDYWxjT3BlcmF0aW9uTm9kZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNQ
cmltaXRpdmVWYWx1ZU5vZGUuaCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKKyNpbmNsdWRlICJD
U1NQYXJzZXJUb2tlblJhbmdlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5n
cy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguaCIKKyNpbmNsdWRlICJD
YWxjRXhwcmVzc2lvbkxlbmd0aC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJT
dHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Np
b25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiwgY29uc3QgUmVuZGVy
U3R5bGUmKTsKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBjcmVhdGVDU1Mo
Y29uc3QgTGVuZ3RoJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKKworc3RhdGljIGlubGluZSBSZWZQ
dHI8Q1NTQ2FsY09wZXJhdGlvbk5vZGU+IGNyZWF0ZUJsZW5kSGFsZihjb25zdCBMZW5ndGgmIGxl
bmd0aCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBmbG9hdCBwcm9ncmVzcykKK3sKKyAgICBy
ZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZShDYWxjT3BlcmF0b3I6Ok11bHRpcGx5
LCBjcmVhdGVDU1MobGVuZ3RoLCBzdHlsZSksCisgICAgICAgIENTU0NhbGNQcmltaXRpdmVWYWx1
ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByb2dyZXNzLCBDU1NVbml0
VHlwZTo6Q1NTX05VTUJFUikpKTsKK30KKworc3RhdGljIFZlY3RvcjxSZWY8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPj4gY3JlYXRlQ1NTKGNvbnN0IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPj4mIG5vZGVzLCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCit7CisgICAg
VmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CisgICAgdmFsdWVzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkobm9kZXMuc2l6ZSgpKTsKKyAgICBmb3IgKGF1dG8mIG5vZGUg
OiBub2RlcykgeworICAgICAgICBhdXRvIGNzc05vZGUgPSBjcmVhdGVDU1MoKm5vZGUsIHN0eWxl
KTsKKyAgICAgICAgaWYgKCFjc3NOb2RlKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IHZhbHVlcy51bmNoZWNrZWRBcHBlbmQoY3NzTm9kZS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9
CisgICAgcmV0dXJuIHZhbHVlczsKK30KKworc3RhdGljIFJlZlB0cjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+IGNyZWF0ZUNTUyhjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUsIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBzd2l0Y2ggKG5vZGUudHlwZSgpKSB7CisgICAgY2Fz
ZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOdW1iZXI6IHsKKyAgICAgICAgZmxvYXQgdmFsdWUg
PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk51bWJlcj4obm9kZSkudmFsdWUoKTsgLy8gZG91Ymxl
PworICAgICAgICByZXR1cm4gQ1NTQ2FsY1ByaW1pdGl2ZVZhbHVlTm9kZTo6Y3JlYXRlKENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUodmFsdWUsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKSk7Cisg
ICAgfQorICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVuZ3RoOiB7CisgICAgICAg
IGF1dG8mIGxlbmd0aCA9IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTGVuZ3RoPihub2RlKS5sZW5n
dGgoKTsKKyAgICAgICAgaWYgKCFsZW5ndGguaXNQZXJjZW50KCkgJiYgbGVuZ3RoLmlzWmVybygp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBjcmVhdGVDU1Mo
bGVuZ3RoLCBzdHlsZSk7CisgICAgfQorCisgICAgY2FzZSBDYWxjRXhwcmVzc2lvbk5vZGVUeXBl
OjpOZWdhdGlvbjogeworICAgICAgICBhdXRvIGNoaWxkTm9kZSA9IGNyZWF0ZUNTUygqZG93bmNh
c3Q8Q2FsY0V4cHJlc3Npb25OZWdhdGlvbj4obm9kZSkuY2hpbGQoKSwgc3R5bGUpOworICAgICAg
ICBpZiAoIWNoaWxkTm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gQ1NTQ2FsY05lZ2F0ZU5vZGU6OmNyZWF0ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwo
KSk7CisgICAgfQorICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6SW52ZXJzaW9uOiB7
CisgICAgICAgIGF1dG8gY2hpbGROb2RlID0gY3JlYXRlQ1NTKCpkb3duY2FzdDxDYWxjRXhwcmVz
c2lvbkludmVyc2lvbj4obm9kZSkuY2hpbGQoKSwgc3R5bGUpOworICAgICAgICBpZiAoIWNoaWxk
Tm9kZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ1NTQ2Fs
Y0ludmVydE5vZGU6OmNyZWF0ZShjaGlsZE5vZGUucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfQor
ICAgIGNhc2UgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uOiB7CisgICAgICAgIGF1
dG8mIG9wZXJhdGlvbk5vZGUgPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbj4obm9k
ZSk7CisgICAgICAgIGF1dG8mIG9wZXJhdGlvbkNoaWxkcmVuID0gb3BlcmF0aW9uTm9kZS5jaGls
ZHJlbigpOworICAgICAgICBDYWxjT3BlcmF0b3Igb3AgPSBvcGVyYXRpb25Ob2RlLmdldE9wZXJh
dG9yKCk7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAgICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpBZGQ6IHsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mo
b3BlcmF0aW9uQ2hpbGRyZW4sIHN0eWxlKTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0Vt
cHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBpZiAo
Y2hpbGRyZW4uc2l6ZSgpID09IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIFdURk1vdmUoY2hp
bGRyZW5bMF0pOworICAgICAgICAgICAgcmV0dXJuIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpjcmVh
dGVTdW0oV1RGTW92ZShjaGlsZHJlbikpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2FsY09w
ZXJhdG9yOjpTdWJ0cmFjdDogeworICAgICAgICAgICAgQVNTRVJUKG9wZXJhdGlvbkNoaWxkcmVu
LnNpemUoKSA9PSAyKTsKKworICAgICAgICAgICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lv
bk5vZGU+PiB2YWx1ZXM7CisgICAgICAgICAgICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBh
dXRvIGZpcnN0Q2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzBdLCBzdHlsZSk7
CisgICAgICAgICAgICBhdXRvIHNlY29uZENoaWxkID0gY3JlYXRlQ1NTKCpvcGVyYXRpb25DaGls
ZHJlblsxXSwgc3R5bGUpOworCisgICAgICAgICAgICBpZiAoIXNlY29uZENoaWxkKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkOworCisgICAgICAgICAgICBhdXRvIG5lZ2F0ZU5v
ZGUgPSBDU1NDYWxjTmVnYXRlTm9kZTo6Y3JlYXRlKHNlY29uZENoaWxkLnJlbGVhc2VOb25OdWxs
KCkpOworICAgICAgICAgICAgaWYgKCFmaXJzdENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVy
biBuZWdhdGVOb2RlOworCisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKGZpcnN0Q2hpbGQucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICB2YWx1ZXMuYXBwZW5kKFdURk1vdmUobmVnYXRl
Tm9kZSkpOworCisgICAgICAgICAgICByZXR1cm4gQ1NTQ2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0
ZVN1bShXVEZNb3ZlKHZhbHVlcykpOworICAgICAgICB9CisgICAgICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpNdWx0aXBseTogeworICAgICAgICAgICAgYXV0byBjaGlsZHJlbiA9IGNyZWF0ZUNTUyhv
cGVyYXRpb25DaGlsZHJlbiwgc3R5bGUpOworICAgICAgICAgICAgaWYgKGNoaWxkcmVuLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHJldHVy
biBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6Y3JlYXRlUHJvZHVjdChXVEZNb3ZlKGNoaWxkcmVuKSk7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkRpdmlkZTogeworICAgICAg
ICAgICAgQVNTRVJUKG9wZXJhdGlvbkNoaWxkcmVuLnNpemUoKSA9PSAyKTsKKworICAgICAgICAg
ICAgVmVjdG9yPFJlZjxDU1NDYWxjRXhwcmVzc2lvbk5vZGU+PiB2YWx1ZXM7CisgICAgICAgICAg
ICB2YWx1ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShvcGVyYXRpb25DaGlsZHJlbi5zaXplKCkp
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIGZpcnN0Q2hpbGQgPSBjcmVhdGVDU1Mo
Km9wZXJhdGlvbkNoaWxkcmVuWzBdLCBzdHlsZSk7CisgICAgICAgICAgICBpZiAoIWZpcnN0Q2hp
bGQpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgICAgIGF1dG8g
c2Vjb25kQ2hpbGQgPSBjcmVhdGVDU1MoKm9wZXJhdGlvbkNoaWxkcmVuWzFdLCBzdHlsZSk7Cisg
ICAgICAgICAgICBpZiAoIXNlY29uZENoaWxkKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgICAgICAgICAgYXV0byBpbnZlcnROb2RlID0gQ1NTQ2FsY0ludmVydE5vZGU6OmNy
ZWF0ZShzZWNvbmRDaGlsZC5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgICAgICAgICAgdmFsdWVz
LmFwcGVuZChmaXJzdENoaWxkLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgdmFsdWVz
LmFwcGVuZChXVEZNb3ZlKGludmVydE5vZGUpKTsKKworICAgICAgICAgICAgcmV0dXJuIENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpjcmVhdGVQcm9kdWN0KGNyZWF0ZUNTUyhvcGVyYXRpb25DaGlsZHJl
biwgc3R5bGUpKTsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOgor
ICAgICAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OgorICAgICAgICBjYXNlIENhbGNPcGVyYXRv
cjo6Q2xhbXA6IHsKKyAgICAgICAgICAgIGF1dG8gY2hpbGRyZW4gPSBjcmVhdGVDU1Mob3BlcmF0
aW9uQ2hpbGRyZW4sIHN0eWxlKTsKKyAgICAgICAgICAgIGlmIChjaGlsZHJlbi5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICByZXR1cm4gQ1NT
Q2FsY09wZXJhdGlvbk5vZGU6OmNyZWF0ZU1pbk9yTWF4T3JDbGFtcChvcCwgV1RGTW92ZShjaGls
ZHJlbiksIG9wZXJhdGlvbk5vZGUuZGVzdGluYXRpb25DYXRlZ29yeSgpKTsKKyAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBjYXNlIENhbGNF
eHByZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoOiB7CisgICAgICAgIC8vIEZJWE1FOiAoaHR0
cDovL3dlYmtpdC5vcmcvYi8xMjIwMzYpIENyZWF0ZSBhIENTU0NhbGNFeHByZXNzaW9uTm9kZSBl
cXVpdmFsZW50IG9mIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGguCisgICAgICAgIGF1dG8mIGJs
ZW5kID0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4obm9kZSk7CisgICAgICAg
IGZsb2F0IHByb2dyZXNzID0gYmxlbmQucHJvZ3Jlc3MoKTsKKyAgICAgICAgcmV0dXJuIENTU0Nh
bGNPcGVyYXRpb25Ob2RlOjpjcmVhdGUoQ2FsY09wZXJhdG9yOjpBZGQsIGNyZWF0ZUJsZW5kSGFs
ZihibGVuZC5mcm9tKCksIHN0eWxlLCAxIC0gcHJvZ3Jlc3MpLCBjcmVhdGVCbGVuZEhhbGYoYmxl
bmQudG8oKSwgc3R5bGUsIHByb2dyZXNzKSk7CisgICAgfQorICAgIGNhc2UgQ2FsY0V4cHJlc3Np
b25Ob2RlVHlwZTo6VW5kZWZpbmVkOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3N0YXRpYyBSZWZQdHI8Q1NTQ2FsY0V4cHJl
c3Npb25Ob2RlPiBjcmVhdGVDU1MoY29uc3QgTGVuZ3RoJiBsZW5ndGgsIGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkKK3sKKyAgICBzd2l0Y2ggKGxlbmd0aC50eXBlKCkpIHsKKyAgICBjYXNlIExl
bmd0aFR5cGU6OlBlcmNlbnQ6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpGaXhlZDoKKyAgICAgICAg
cmV0dXJuIENTU0NhbGNQcmltaXRpdmVWYWx1ZU5vZGU6OmNyZWF0ZShDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlKGxlbmd0aCwgc3R5bGUpKTsKKyAgICBjYXNlIExlbmd0aFR5cGU6OkNhbGN1bGF0
ZWQ6CisgICAgICAgIHJldHVybiBjcmVhdGVDU1MobGVuZ3RoLmNhbGN1bGF0aW9uVmFsdWUoKS5l
eHByZXNzaW9uKCksIHN0eWxlKTsKKyAgICBjYXNlIExlbmd0aFR5cGU6OkF1dG86CisgICAgY2Fz
ZSBMZW5ndGhUeXBlOjpJbnRyaW5zaWM6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpNaW5JbnRyaW5z
aWM6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpNaW5Db250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlw
ZTo6TWF4Q29udGVudDoKKyAgICBjYXNlIExlbmd0aFR5cGU6OkZpbGxBdmFpbGFibGU6CisgICAg
Y2FzZSBMZW5ndGhUeXBlOjpGaXRDb250ZW50OgorICAgIGNhc2UgTGVuZ3RoVHlwZTo6UmVsYXRp
dmU6CisgICAgY2FzZSBMZW5ndGhUeXBlOjpVbmRlZmluZWQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQ1NTQ2FsY1ZhbHVl
OjpDU1NDYWxjVmFsdWUoUmVmPENTU0NhbGNFeHByZXNzaW9uTm9kZT4mJiBleHByZXNzaW9uLCBi
b29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSkKKyAgICA6IENTU1ZhbHVlKENhbGN1bGF0aW9u
Q2xhc3MpCisgICAgLCBtX2V4cHJlc3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKKyAgICAsIG1f
c2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSkKK3sKK30K
KworQ1NTQ2FsY1ZhbHVlOjp+Q1NTQ2FsY1ZhbHVlKCkgPSBkZWZhdWx0OworCitDYWxjdWxhdGlv
bkNhdGVnb3J5IENTU0NhbGNWYWx1ZTo6Y2F0ZWdvcnkoKSBjb25zdAoreworICAgIHJldHVybiBt
X2V4cHJlc3Npb24tPmNhdGVnb3J5KCk7Cit9CisKK0NTU1VuaXRUeXBlIENTU0NhbGNWYWx1ZTo6
cHJpbWl0aXZlVHlwZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXhwcmVzc2lvbi0+cHJpbWl0
aXZlVHlwZSgpOworfQorCitSZWY8Q2FsY3VsYXRpb25WYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVh
dGVDYWxjdWxhdGlvblZhbHVlKGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNvbnZl
cnNpb25EYXRhKSBjb25zdAoreworICAgIHJldHVybiBDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUo
bV9leHByZXNzaW9uLT5jcmVhdGVDYWxjRXhwcmVzc2lvbihjb252ZXJzaW9uRGF0YSksIG1fc2hv
dWxkQ2xhbXBUb05vbk5lZ2F0aXZlID8gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUgOiBWYWx1ZVJh
bmdlOjpBbGwpOworfQorCit2b2lkIENTU0NhbGNWYWx1ZTo6c2V0UGVybWl0dGVkVmFsdWVSYW5n
ZShWYWx1ZVJhbmdlIHJhbmdlKQoreworICAgIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlID0g
cmFuZ2UgIT0gVmFsdWVSYW5nZTo6QWxsOworfQorCit2b2lkIENTU0NhbGNWYWx1ZTo6Y29sbGVj
dERpcmVjdENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYg
dmFsdWVzKSBjb25zdAoreworICAgIG1fZXhwcmVzc2lvbi0+Y29sbGVjdERpcmVjdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKwordm9pZCBDU1NDYWxjVmFsdWU6OmNvbGxl
Y3REaXJlY3RSb290Q29tcHV0YXRpb25hbERlcGVuZGVuY2llcyhIYXNoU2V0PENTU1Byb3BlcnR5
SUQ+JiB2YWx1ZXMpIGNvbnN0Cit7CisgICAgbV9leHByZXNzaW9uLT5jb2xsZWN0RGlyZWN0Um9v
dENvbXB1dGF0aW9uYWxEZXBlbmRlbmNpZXModmFsdWVzKTsKK30KKworU3RyaW5nIENTU0NhbGNW
YWx1ZTo6Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0Cit7CisgICAgU3RyaW5nQnVpbGRlciBidWlsZGVy
OworICAgIENTU0NhbGNPcGVyYXRpb25Ob2RlOjpidWlsZENTU1RleHQobV9leHByZXNzaW9uLmdl
dCgpLCBidWlsZGVyKTsKKyAgICByZXR1cm4gYnVpbGRlci50b1N0cmluZygpOworfQorCitib29s
IENTU0NhbGNWYWx1ZTo6ZXF1YWxzKGNvbnN0IENTU0NhbGNWYWx1ZSYgb3RoZXIpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvbXBhcmVDU1NWYWx1ZShtX2V4cHJlc3Npb24sIG90aGVyLm1fZXhwcmVz
c2lvbik7Cit9CisKK2lubGluZSBkb3VibGUgQ1NTQ2FsY1ZhbHVlOjpjbGFtcFRvUGVybWl0dGVk
UmFuZ2UoZG91YmxlIHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBtX3Nob3VsZENsYW1wVG9O
b25OZWdhdGl2ZSAmJiB2YWx1ZSA8IDAgPyAwIDogdmFsdWU7Cit9CisKK2RvdWJsZSBDU1NDYWxj
VmFsdWU6OmRvdWJsZVZhbHVlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBUb1Blcm1pdHRl
ZFJhbmdlKG1fZXhwcmVzc2lvbi0+ZG91YmxlVmFsdWUocHJpbWl0aXZlVHlwZSgpKSk7Cit9CisK
K2RvdWJsZSBDU1NDYWxjVmFsdWU6OmNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENv
bnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGF0YSkgY29uc3QKK3sKKyAgICByZXR1cm4gY2xhbXBU
b1Blcm1pdHRlZFJhbmdlKG1fZXhwcmVzc2lvbi0+Y29tcHV0ZUxlbmd0aFB4KGNvbnZlcnNpb25E
YXRhKSk7Cit9CisKK2Jvb2wgQ1NTQ2FsY1ZhbHVlOjppc0NhbGNGdW5jdGlvbihDU1NWYWx1ZUlE
IGZ1bmN0aW9uSWQpCit7CisgICAgc3dpdGNoIChmdW5jdGlvbklkKSB7CisgICAgY2FzZSBDU1NW
YWx1ZUNhbGM6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENhbGM6CisgICAgY2FzZSBDU1NWYWx1
ZU1pbjoKKyAgICBjYXNlIENTU1ZhbHVlTWF4OgorICAgIGNhc2UgQ1NTVmFsdWVDbGFtcDoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ1NTQ2FsY1ZhbHVlOjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8IGluZGVudCA8PCAiKCIgPDwgIkNTU0Nh
bGNWYWx1ZSI7CisKKyAgICBUZXh0U3RyZWFtIG11bHRpbGluZVN0cmVhbTsKKyAgICBtdWx0aWxp
bmVTdHJlYW0uc2V0SW5kZW50KHRzLmluZGVudCgpICsgMik7CisKKyAgICBtdWx0aWxpbmVTdHJl
YW0uZHVtcFByb3BlcnR5KCJzaG91bGQgY2xhbXAgbm9uLW5lZ2F0aXZlIiwgbV9zaG91bGRDbGFt
cFRvTm9uTmVnYXRpdmUpOworICAgIG11bHRpbGluZVN0cmVhbS5kdW1wUHJvcGVydHkoImV4cHJl
c3Npb24iLCBtX2V4cHJlc3Npb24uZ2V0KCkpOworCisgICAgdHMgPDwgbXVsdGlsaW5lU3RyZWFt
LnJlbGVhc2UoKTsKKyAgICB0cyA8PCAiKVxuIjsKK30KKworUmVmUHRyPENTU0NhbGNWYWx1ZT4g
Q1NTQ2FsY1ZhbHVlOjpjcmVhdGUoQ1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2Vy
VG9rZW5SYW5nZSYgdG9rZW5zLCBDYWxjdWxhdGlvbkNhdGVnb3J5IGRlc3RpbmF0aW9uQ2F0ZWdv
cnksIFZhbHVlUmFuZ2UgcmFuZ2UpCit7CisgICAgQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2Vy
IHBhcnNlcihkZXN0aW5hdGlvbkNhdGVnb3J5KTsKKyAgICBhdXRvIGV4cHJlc3Npb24gPSBwYXJz
ZXIucGFyc2VDYWxjKHRva2VucywgZnVuY3Rpb24pOworICAgIGlmICghZXhwcmVzc2lvbikKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgYXV0byByZXN1bHQgPSBhZG9wdFJlZihuZXcgQ1NT
Q2FsY1ZhbHVlKGV4cHJlc3Npb24ucmVsZWFzZU5vbk51bGwoKSwgcmFuZ2UgIT0gVmFsdWVSYW5n
ZTo6QWxsKSk7CisgICAgTE9HX1dJVEhfU1RSRUFNKENhbGMsIHN0cmVhbSA8PCAiQ1NTQ2FsY1Zh
bHVlOjpjcmVhdGUgIiA8PCAqcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorICAgIAor
UmVmUHRyPENTU0NhbGNWYWx1ZT4gQ1NTQ2FsY1ZhbHVlOjpjcmVhdGUoY29uc3QgQ2FsY3VsYXRp
b25WYWx1ZSYgdmFsdWUsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKK3sKKyAgICBhdXRvIGV4
cHJlc3Npb24gPSBjcmVhdGVDU1ModmFsdWUuZXhwcmVzc2lvbigpLCBzdHlsZSk7CisgICAgaWYg
KCFleHByZXNzaW9uKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gc2ltcGxp
ZmllZEV4cHJlc3Npb24gPSBDU1NDYWxjT3BlcmF0aW9uTm9kZTo6c2ltcGxpZnkoZXhwcmVzc2lv
bi5yZWxlYXNlTm9uTnVsbCgpKTsKKworICAgIGF1dG8gcmVzdWx0ID0gYWRvcHRSZWYobmV3IENT
U0NhbGNWYWx1ZShXVEZNb3ZlKHNpbXBsaWZpZWRFeHByZXNzaW9uKSwgdmFsdWUuc2hvdWxkQ2xh
bXBUb05vbk5lZ2F0aXZlKCkpKTsKKyAgICBMT0dfV0lUSF9TVFJFQU0oQ2FsYywgc3RyZWFtIDw8
ICJDU1NDYWxjVmFsdWU6OmNyZWF0ZSBmcm9tIENhbGN1bGF0aW9uVmFsdWU6ICIgPDwgKnJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgY29uc3QgQ1NTQ2FsY1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICB2YWx1ZS5kdW1w
KHRzKTsKKyAgICByZXR1cm4gdHM7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5oCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9jYWxjL0NTU0NhbGNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTIgR29vZ2xlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUK
KyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJp
Z2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3Jz
IG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20K
KyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhP
TERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICog
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRI
RSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
CisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1ZhbHVlLmgiCisj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUu
aCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NDYWxjRXhwcmVzc2lvbk5vZGU7CitjbGFzcyBD
U1NQYXJzZXJUb2tlblJhbmdlOworY2xhc3MgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKK2Ns
YXNzIFJlbmRlclN0eWxlOworCitlbnVtIGNsYXNzIENTU1VuaXRUeXBlIDogdWludDhfdDsKK2Vu
dW0gY2xhc3MgQ2FsY3VsYXRpb25DYXRlZ29yeSA6IHVpbnQ4X3Q7CitlbnVtIGNsYXNzIFZhbHVl
UmFuZ2UgOiB1aW50OF90OworCitjbGFzcyBDU1NDYWxjVmFsdWUgZmluYWwgOiBwdWJsaWMgQ1NT
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ2FsY1ZhbHVlPiBjcmVhdGUo
Q1NTVmFsdWVJRCBmdW5jdGlvbiwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIENhbGN1bGF0
aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSwgVmFsdWVSYW5nZSk7CisgICAgc3RhdGlj
IFJlZlB0cjxDU1NDYWxjVmFsdWU+IGNyZWF0ZShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiwgY29u
c3QgUmVuZGVyU3R5bGUmKTsKKyAgICB+Q1NTQ2FsY1ZhbHVlKCk7CisKKyAgICBDYWxjdWxhdGlv
bkNhdGVnb3J5IGNhdGVnb3J5KCkgY29uc3Q7CisgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29u
c3Q7CisgICAgZG91YmxlIGNvbXB1dGVMZW5ndGhQeChjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJikgY29uc3Q7CisgICAgQ1NTVW5pdFR5cGUgcHJpbWl0aXZlVHlwZSgpIGNvbnN0Owor
CisgICAgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZUNhbGN1bGF0aW9uVmFsdWUoY29uc3Qg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYpIGNvbnN0OworICAgIHZvaWQgc2V0UGVybWl0dGVk
VmFsdWVSYW5nZShWYWx1ZVJhbmdlKTsKKworICAgIHZvaWQgY29sbGVjdERpcmVjdENvbXB1dGF0
aW9uYWxEZXBlbmRlbmNpZXMoSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYpIGNvbnN0OworICAgIHZv
aWQgY29sbGVjdERpcmVjdFJvb3RDb21wdXRhdGlvbmFsRGVwZW5kZW5jaWVzKEhhc2hTZXQ8Q1NT
UHJvcGVydHlJRD4mKSBjb25zdDsKKworICAgIFN0cmluZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7
CisgICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTQ2FsY1ZhbHVlJikgY29uc3Q7CisgICAgCisgICAg
c3RhdGljIGJvb2wgaXNDYWxjRnVuY3Rpb24oQ1NTVmFsdWVJRCk7CisKKyAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIENTU0NhbGNWYWx1ZShSZWY8Q1NT
Q2FsY0V4cHJlc3Npb25Ob2RlPiYmLCBib29sIHNob3VsZENsYW1wVG9Ob25OZWdhdGl2ZSk7CisK
KyAgICBkb3VibGUgY2xhbXBUb1Blcm1pdHRlZFJhbmdlKGRvdWJsZSkgY29uc3Q7CisKKyAgICBj
b25zdCBSZWY8Q1NTQ2FsY0V4cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247CisgICAgYm9vbCBt
X3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsKK307CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwo
VGV4dFN0cmVhbSYsIGNvbnN0IENTU0NhbGNWYWx1ZSYpOworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX1ZBTFVFKENTU0NhbGNWYWx1ZSwgaXND
YWxjVmFsdWUoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQ
YXJzZXJIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2Vy
L0NTU1Byb3BlcnR5UGFyc2VySGVscGVycy5jcHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXJIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzAsNyArMzAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkNTU1Byb3BlcnR5UGFyc2VySGVscGVycy5oIgogCi0jaW5jbHVkZSAiQ1NTQ2FsY3VsYXRpb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0NhbGNWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0NhbnZhc1Zh
bHVlLmgiCiAjaW5jbHVkZSAiQ1NTQ3Jvc3NmYWRlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NGaWx0
ZXJJbWFnZVZhbHVlLmgiCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSAiQ1NTUGFpbnRJbWFn
ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2VySWRpb21zLmgiCiAjaW5jbHVkZSAiQ1NTVmFs
dWVQb29sLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgogI2luY2x1ZGUgIkNv
bG9yQ29udmVyc2lvbi5oIgogI2luY2x1ZGUgIkNvbG9yTHVtaW5hbmNlLmgiCiAjaW5jbHVkZSAi
UGFpci5oIgpAQCAtOTQsNyArOTUsNyBAQCBzdGF0aWMgT3B0aW9uYWw8ZG91YmxlPiBjb25zdW1l
TnVtYmVyT3JQCiAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKIH0KIAotLy8gRklYTUU6IGNvbnNp
ZGVyIHB1bGxpbmcgaW4gdGhlIHBhcnNpbmcgbG9naWMgZnJvbSBDU1NDYWxjdWxhdGlvblZhbHVl
LmNwcC4KKy8vIEZJWE1FOiBjb25zaWRlciBwdWxsaW5nIGluIHRoZSBwYXJzaW5nIGxvZ2ljIGZy
b20gQ1NTQ2FsY0V4cHJlc3Npb25Ob2RlUGFyc2VyLgogY2xhc3MgQ2FsY1BhcnNlciB7CiBwdWJs
aWM6CiAgICAgZXhwbGljaXQgQ2FsY1BhcnNlcihDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSwg
Q2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5LCBWYWx1ZVJhbmdlIHZhbHVl
UmFuZ2UgPSBWYWx1ZVJhbmdlOjpBbGwsIENTU1ZhbHVlUG9vbCYgY3NzVmFsdWVQb29sID0gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0Nh
bGN1bGF0aW9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0NhbGN1bGF0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmNwcAkobm9uZXhpc3RlbnQpCkBAIC0xLDI4MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0K
LSNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIKLSNpbmNsdWRlIDxsaW1pdHM+Ci0jaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLVJlZjxD
YWxjdWxhdGlvblZhbHVlPiBDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoc3RkOjp1bmlxdWVfcHRy
PENhbGNFeHByZXNzaW9uTm9kZT4gdmFsdWUsIFZhbHVlUmFuZ2UgcmFuZ2UpCi17Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgQ2FsY3VsYXRpb25WYWx1ZShXVEZNb3ZlKHZhbHVlKSwgcmFuZ2Up
KTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Npb25OdW1iZXI6OmV2YWx1YXRlKGZsb2F0KSBjb25z
dAotewotICAgIHJldHVybiBtX3ZhbHVlOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9uTnVtYmVy
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2VycyhtX3ZhbHVlKTsKLX0KLQotYm9vbCBDYWxjRXhw
cmVzc2lvbk51bWJlcjo6b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmIG90aGVy
KSBjb25zdAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVzc2lvbk51bWJlcj4ob3RoZXIpICYm
ICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTnVtYmVyPihvdGhlcik7Ci19Ci0KLWZs
b2F0IENhbGN1bGF0aW9uVmFsdWU6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewot
ICAgIGZsb2F0IHJlc3VsdCA9IG1fZXhwcmVzc2lvbi0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAg
IC8vIEZJWE1FOiBUaGlzIHRlc3Qgd2FzIG9yaWdpbmFsbHkgbmVlZGVkIHdoZW4gd2UgZGlkIG5v
dCBkZXRlY3QgZGl2aXNpb24gYnkgemVybyBhdCBwYXJzZSB0aW1lLgotICAgIC8vIEl0J3MgcG9z
c2libGUgdGhhdCB0aGlzIGlzIG5vdyB1bm5lZWRlZCBjb2RlIGFuZCBjYW4gYmUgcmVtb3ZlZC4K
LSAgICBpZiAoc3RkOjppc25hbihyZXN1bHQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmUgJiYgcmVzdWx0IDwgMCA/IDAgOiByZXN1bHQ7
Ci19Ci0KLWZsb2F0IENhbGNFeHByZXNzaW9uTmVnYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZh
bHVlKSBjb25zdAotewotICAgIHJldHVybiAtbV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOwot
fQotCi1ib29sIENhbGNFeHByZXNzaW9uTmVnYXRpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4
cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Np
b25OZWdhdGlvbj4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVn
YXRpb24+KG90aGVyKTsKLX0KLQotdm9pZCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8ICItKCI7Ci0gICAgdHMgPDwgKm1fY2hp
bGQ7Ci0gICAgdHMgPDwgIikiOwotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJl
c3Npb25OZWdhdGlvbiYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYikKLXsKLSAg
ICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgpOwotfQotCi1mbG9hdCBDYWxjRXhwcmVz
c2lvbkludmVyc2lvbjo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIDEuMGYgLyBtX2NoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci19Ci0KLXZvaWQgQ2FsY0V4
cHJlc3Npb25JbnZlcnNpb246OmR1bXAoVGV4dFN0cmVhbSYgdHMpIGNvbnN0Ci17Ci0gICAgdHMg
PDwgIjEuMCAvICIgPDwgIigiOwotICAgIHRzIDw8ICptX2NoaWxkOwotICAgIHRzIDw8ICIpIjsK
LX0KLQotYm9vbCBDYWxjRXhwcmVzc2lvbkludmVyc2lvbjo6b3BlcmF0b3I9PShjb25zdCBDYWxj
RXhwcmVzc2lvbk5vZGUmIG90aGVyKSBjb25zdAotewotICAgIHJldHVybiBpczxDYWxjRXhwcmVz
c2lvbkludmVyc2lvbj4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9u
SW52ZXJzaW9uPihvdGhlcik7Ci19Ci0KLWJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVz
c2lvbkludmVyc2lvbiYgYSwgY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mIGIpCi17Ci0g
ICAgcmV0dXJuICphLmNoaWxkKCkgPT0gKmIuY2hpbGQoKTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJl
c3Npb25PcGVyYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAgIHN3
aXRjaCAobV9vcGVyYXRvcikgewotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsKLSAgICAg
ICAgZmxvYXQgc3VtID0gMDsKLSAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4p
Ci0gICAgICAgICAgICBzdW0gKz0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKLSAgICAgICAg
cmV0dXJuIHN1bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0OiB7Ci0g
ICAgICAgIC8vIEZJWE1FCi0gICAgICAgIEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9PSAyKTsK
LSAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZhbHVlKTsK
LSAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7
Ci0gICAgICAgIHJldHVybiBsZWZ0IC0gcmlnaHQ7Ci0gICAgfQotICAgIGNhc2UgQ2FsY09wZXJh
dG9yOjpNdWx0aXBseTogewotICAgICAgICBmbG9hdCBwcm9kdWN0ID0gMTsKLSAgICAgICAgZm9y
IChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCi0gICAgICAgICAgICBwcm9kdWN0ICo9IGNoaWxk
LT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIHJldHVybiBwcm9kdWN0OwotICAgIH0KLSAg
ICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7Ci0gICAgICAgIC8vIEZJWE1FCi0gICAgICAg
IEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9PSAxIHx8IG1fY2hpbGRyZW4uc2l6ZSgpID09IDIp
OwotICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKLSAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0
IGxlZnQgPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZsb2F0
IHJpZ2h0ID0gbV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICByZXR1
cm4gbGVmdCAvIHJpZ2h0OwotICAgIH0KLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWluOiB7Ci0g
ICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7Ci0gICAgICAgIGZsb2F0IG1pbmlt
dW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7Ci0gICAgICAgIGZvciAoYXV0
byYgY2hpbGQgOiBtX2NoaWxkcmVuKQotICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6bWluKG1p
bmltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkpOwotICAgICAgICByZXR1cm4gbWluaW11
bTsKLSAgICB9Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogewotICAgICAgICBpZiAobV9j
aGlsZHJlbi5pc0VtcHR5KCkpCi0gICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0
czxmbG9hdD46OnF1aWV0X05hTigpOwotICAgICAgICBmbG9hdCBtYXhpbXVtID0gbV9jaGlsZHJl
blswXS0+ZXZhbHVhdGUobWF4VmFsdWUpOwotICAgICAgICBmb3IgKGF1dG8mIGNoaWxkIDogbV9j
aGlsZHJlbikKLSAgICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBjaGlsZC0+
ZXZhbHVhdGUobWF4VmFsdWUpKTsKLSAgICAgICAgcmV0dXJuIG1heGltdW07Ci0gICAgfQotICAg
IGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogewotICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXpl
KCkgIT0gMykKLSAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
cXVpZXRfTmFOKCk7Ci0KLSAgICAgICAgZmxvYXQgbWluID0gbV9jaGlsZHJlblswXS0+ZXZhbHVh
dGUobWF4VmFsdWUpOwotICAgICAgICBmbG9hdCB2YWx1ZSA9IG1fY2hpbGRyZW5bMV0tPmV2YWx1
YXRlKG1heFZhbHVlKTsKLSAgICAgICAgZmxvYXQgbWF4ID0gbV9jaGlsZHJlblsyXS0+ZXZhbHVh
dGUobWF4VmFsdWUpOwotICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1pbih2YWx1
ZSwgbWF4KSk7Ci0gICAgfQotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICBy
ZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOwotfQotCi1ib29s
IENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9u
Tm9kZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uT3BlcmF0
aW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVyYXRpb24+
KG90aGVyKTsKLX0KLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uT3BlcmF0
aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYgYikKLXsKLSAgICBpZiAoYS5n
ZXRPcGVyYXRvcigpICE9IGIuZ2V0T3BlcmF0b3IoKSB8fCBhLmRlc3RpbmF0aW9uQ2F0ZWdvcnko
KSAhPSBiLmRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IC8vIEZJWE1FOiBXb3VsZCBiZSBuaWNlIHRvIGhhdmUgYSBoZWxwZXIgZnVuY3Rpb24gZm9yIGRv
aW5nIGEgZGVlcCBjb21wYXJlIG9uIGEgdmVjdG9yIG9mIHBvaW50ZXJzLgotICAgIGlmIChhLmNo
aWxkcmVuKCkuc2l6ZSgpICE9IGIuY2hpbGRyZW4oKS5zaXplKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYS5jaGlsZHJlbigpLnNpemUoKTsg
KytpKSB7Ci0gICAgICAgIGlmICghKCphLmNoaWxkcmVuKClbaV0gPT0gKmIuY2hpbGRyZW4oKVtp
XSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpkdW1wKFRleHRTdHJlYW0mIHRzKSBj
b25zdAotewotICAgIGlmIChtX29wZXJhdG9yID09IENhbGNPcGVyYXRvcjo6TWluIHx8IG1fb3Bl
cmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXgpIHsKLSAgICAgICAgdHMgPDwgbV9vcGVyYXRvciA8
PCAiKCI7Ci0gICAgICAgIHNpemVfdCBjaGlsZHJlbkNvdW50ID0gbV9jaGlsZHJlbi5zaXplKCk7
Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW5Db3VudDsgaSsrKSB7Ci0g
ICAgICAgICAgICB0cyA8PCBtX2NoaWxkcmVuW2ldLmdldCgpOwotICAgICAgICAgICAgaWYgKGkg
PCBjaGlsZHJlbkNvdW50IC0gMSkKLSAgICAgICAgICAgICAgICB0cyA8PCAiLCAiOwotICAgICAg
ICB9Ci0gICAgICAgIHRzIDw8ICIpIjsKLSAgICB9IGVsc2UKLSAgICAgICAgdHMgPDwgbV9jaGls
ZHJlblswXS5nZXQoKSA8PCAiICIgPDwgbV9vcGVyYXRvciA8PCAiICIgPDwgbV9jaGlsZHJlblsx
XS5nZXQoKTsKLX0KLQotZmxvYXQgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OmV2YWx1YXRlKGZsb2F0
IG1heFZhbHVlKSBjb25zdAotewotICAgIHJldHVybiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fbGVu
Z3RoLCBtYXhWYWx1ZSk7Ci19Ci0KLWJvb2wgQ2FsY0V4cHJlc3Npb25MZW5ndGg6Om9wZXJhdG9y
PT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKLXsKLSAgICByZXR1cm4g
aXM8Q2FsY0V4cHJlc3Npb25MZW5ndGg+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxj
RXhwcmVzc2lvbkxlbmd0aD4ob3RoZXIpOwotfQotCi12b2lkIENhbGNFeHByZXNzaW9uTGVuZ3Ro
OjpkdW1wKFRleHRTdHJlYW0mIHRzKSBjb25zdAotewotICAgIHRzIDw8IG1fbGVuZ3RoOwotfQot
Ci1DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoKExl
bmd0aCBmcm9tLCBMZW5ndGggdG8sIGZsb2F0IHByb2dyZXNzKQotICAgIDogQ2FsY0V4cHJlc3Np
b25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQotICAgICwgbV9mcm9t
KGZyb20pCi0gICAgLCBtX3RvKHRvKQotICAgICwgbV9wcm9ncmVzcyhwcm9ncmVzcykKLXsKLSAg
ICAvLyBGbGF0dGVuIG5lc3Rpbmcgb2YgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCBhcyBhIHNw
ZWN1bGF0aXZlIGZpeCBmb3IgcmRhcjovL3Byb2JsZW0vMzA1MzMwMDUuCi0gICAgLy8gQ2FsY0V4
cHJlc3Npb25CbGVuZExlbmd0aCBpcyBvbmx5IHVzZWQgYXMgYSByZXN1bHQgb2YgYW5pbWF0aW9u
IGFuZCB0aGV5IGRvbid0IG5lc3QgaW4gbm9ybWFsIGNhc2VzLgotICAgIGlmIChtX2Zyb20uaXND
YWxjdWxhdGVkKCkgJiYgbV9mcm9tLmNhbGN1bGF0aW9uVmFsdWUoKS5leHByZXNzaW9uKCkudHlw
ZSgpID09IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQotICAgICAgICBtX2Zy
b20gPSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihtX2Zyb20uY2FsY3VsYXRp
b25WYWx1ZSgpLmV4cHJlc3Npb24oKSkuZnJvbSgpOwotICAgIGlmIChtX3RvLmlzQ2FsY3VsYXRl
ZCgpICYmIG1fdG8uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGgpCi0gICAgICAgIG1fdG8gPSBkb3duY2Fz
dDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoPihtX3RvLmNhbGN1bGF0aW9uVmFsdWUoKS5leHBy
ZXNzaW9uKCkpLnRvKCk7Ci19Ci0KLWZsb2F0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg6OmV2
YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAotewotICAgIHJldHVybiAoMS4wZiAtIG1fcHJv
Z3Jlc3MpICogZmxvYXRWYWx1ZUZvckxlbmd0aChtX2Zyb20sIG1heFZhbHVlKSArIG1fcHJvZ3Jl
c3MgKiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fdG8sIG1heFZhbHVlKTsKLX0KLQotYm9vbCBDYWxj
RXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9k
ZSYgb3RoZXIpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uQmxlbmRMZW5n
dGg+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
PihvdGhlcik7Ci19Ci0KLXZvaWQgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZHVtcChUZXh0
U3RyZWFtJiB0cykgY29uc3QKLXsKLSAgICB0cyA8PCAiYmxlbmQoIiA8PCBtX2Zyb20gPDwgIiwg
IiA8PCBtX3RvIDw8ICIsICIgPDwgbV9wcm9ncmVzcyA8PCAiKSI7Ci19Ci0KLVRleHRTdHJlYW0m
IG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIENhbGNPcGVyYXRvciBvcCkKLXsKLSAgICBzd2l0
Y2ggKG9wKSB7Ci0gICAgY2FzZSBDYWxjT3BlcmF0b3I6OkFkZDogdHMgPDwgIisiOyBicmVhazsK
LSAgICBjYXNlIENhbGNPcGVyYXRvcjo6U3VidHJhY3Q6IHRzIDw8ICItIjsgYnJlYWs7Ci0gICAg
Y2FzZSBDYWxjT3BlcmF0b3I6Ok11bHRpcGx5OiB0cyA8PCAiKiI7IGJyZWFrOwotICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpEaXZpZGU6IHRzIDw8ICIvIjsgYnJlYWs7Ci0gICAgY2FzZSBDYWxjT3Bl
cmF0b3I6Ok1pbjogdHMgPDwgIm1pbiI7IGJyZWFrOwotICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpN
YXg6IHRzIDw8ICJtYXgiOyBicmVhazsKLSAgICBjYXNlIENhbGNPcGVyYXRvcjo6Q2xhbXA6IHRz
IDw8ICJjbGFtcCI7IGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJl
YW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIHZh
bHVlKQotewotICAgIHRzIDw8ICJjYWxjKCI7Ci0gICAgdHMgPDwgdmFsdWUuZXhwcmVzc2lvbigp
OwotICAgIHRzIDw8ICIpIjsKLSAgICByZXR1cm4gdHM7Ci19Ci0KLVRleHRTdHJlYW0mIG9wZXJh
dG9yPDwoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lv
bk5vZGUpCi17Ci0gICAgZXhwcmVzc2lvbk5vZGUuZHVtcCh0cyk7Ci0gICAgcmV0dXJuIHRzOwot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9DYWxjdWxhdGlvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vQ2FsY3VsYXRpb25WYWx1ZS5oCShyZXZpc2lvbiAyNzgyMzkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9DYWxjdWxhdGlvblZhbHVlLmgJKG5vbmV4aXN0ZW50KQpAQCAtMSwyODYgKzAs
MCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoK
LSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBp
biB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2ds
ZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09O
VFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAot
ICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiTGVuZ3RoLmgiCi0jaW5jbHVkZSA8bWVtb3J5
PgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdURiB7Ci1jbGFzcyBUZXh0U3RyZWFt
OwotfQotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHVu
aWZ5IHRoaXMgd2l0aCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5PwotZW51bSBjbGFz
cyBDYWxjdWxhdGlvbkNhdGVnb3J5IDogdWludDhfdCB7Ci0gICAgTnVtYmVyLAotICAgIExlbmd0
aCwKLSAgICBQZXJjZW50LAotICAgIFBlcmNlbnROdW1iZXIsCi0gICAgUGVyY2VudExlbmd0aCwK
LSAgICBBbmdsZSwKLSAgICBUaW1lLAotICAgIEZyZXF1ZW5jeSwKLSAgICBPdGhlcgotfTsKLQot
Ly8gRG9uJ3QgY2hhbmdlIHRoZXNlIHZhbHVlczsgcGFyc2luZyB1c2VzIHRoZW0uCi1lbnVtIGNs
YXNzIENhbGNPcGVyYXRvciA6IHVpbnQ4X3QgewotICAgIEFkZCA9ICcrJywKLSAgICBTdWJ0cmFj
dCA9ICctJywKLSAgICBNdWx0aXBseSA9ICcqJywKLSAgICBEaXZpZGUgPSAnLycsCi0gICAgTWlu
ID0gMCwKLSAgICBNYXgsCi0gICAgQ2xhbXAsCi19OwotCi1lbnVtIGNsYXNzIENhbGNFeHByZXNz
aW9uTm9kZVR5cGUgOiB1aW50OF90IHsKLSAgICBVbmRlZmluZWQsCi0gICAgTnVtYmVyLAotICAg
IExlbmd0aCwKLSAgICBPcGVyYXRpb24sCi0gICAgTmVnYXRpb24sCi0gICAgSW52ZXJzaW9uLAot
ICAgIEJsZW5kTGVuZ3RoLAotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDYWxjRXhwcmVz
c2lvbk5vZGUoQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA9IENhbGNFeHByZXNzaW9uTm9kZVR5cGU6
OlVuZGVmaW5lZCk7Ci0gICAgdmlydHVhbCB+Q2FsY0V4cHJlc3Npb25Ob2RlKCkgPSBkZWZhdWx0
OwotCi0gICAgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9Ci0KLSAgICB2aXJ0dWFsIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25z
dCA9IDA7Ci0gICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25O
b2RlJikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYp
IGNvbnN0ID0gMDsKLQotcHJpdmF0ZToKLSAgICBDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIG1fdHlw
ZTsKLX07Ci0KLWNsYXNzIENhbGNFeHByZXNzaW9uTnVtYmVyIGZpbmFsIDogcHVibGljIENhbGNF
eHByZXNzaW9uTm9kZSB7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25OdW1i
ZXIoZmxvYXQpOwotCi0gICAgZmxvYXQgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9
Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVy
cmlkZTsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBmbG9hdCBtX3ZhbHVlOwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25MZW5ndGggZmlu
YWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBD
YWxjRXhwcmVzc2lvbkxlbmd0aChMZW5ndGgpOwotCi0gICAgY29uc3QgTGVuZ3RoJiBsZW5ndGgo
KSBjb25zdCB7IHJldHVybiBtX2xlbmd0aDsgfQotCi1wcml2YXRlOgotICAgIGZsb2F0IGV2YWx1
YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBkdW1w
KFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgTGVuZ3RoIG1fbGVuZ3Ro
OwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiBmaW5hbCA6IHB1YmxpYyBDYWxj
RXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAgIENhbGNFeHByZXNzaW9uTmVnYXRpb24oc3Rk
Ojp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4mJiBub2RlKQotICAgICAgICA6IENhbGNF
eHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKLSAgICAgICAg
LCBtX2NoaWxkKFdURk1vdmUobm9kZSkpCi0gICAgewotICAgICAgICBBU1NFUlQobV9jaGlsZCk7
Ci0gICAgfQotCi0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFs
OwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBm
aW5hbDsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7Ci0gICAg
Ci0gICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hpbGQuZ2V0KCk7IH0KLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiBtX2NoaWxkOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHBy
ZXNzaW9uTmVnYXRpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uJik7Ci0KLWNsYXNz
IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9k
ZSB7Ci1wdWJsaWM6Ci0gICAgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24oc3RkOjp1bmlxdWVfcHRy
PENhbGNFeHByZXNzaW9uTm9kZT4mJiBub2RlKQotICAgICAgICA6IENhbGNFeHByZXNzaW9uTm9k
ZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZlcnNpb24pCi0gICAgICAgICwgbV9jaGlsZChX
VEZNb3ZlKG5vZGUpKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1fY2hpbGQpOwotICAgIH0KLQot
ICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdCBmaW5hbDsKLSAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7Ci0gICAg
dm9pZCBkdW1wKFdURjo6VGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOwotCi0gICAgY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0K
LQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiBtX2No
aWxkOwotfTsKLQotYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9u
JiwgY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mKTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Np
b25PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4cHJlc3Npb25Ob2RlIHsKLXB1YmxpYzoK
LSAgICBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNF
eHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciwgQ2FsY3VsYXRpb25DYXRl
Z29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIpOwot
Ci0gICAgQ2FsY09wZXJhdG9yIGdldE9wZXJhdG9yKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYXRv
cjsgfQotICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRpb25DYXRlZ29yeSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGVzdGluYXRpb25DYXRlZ29yeTsgfQotCi0gICAgY29uc3QgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYgY2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkcmVuOyB9Ci0KLXByaXZhdGU6Ci0gICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQg
bWF4VmFsdWUpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxj
RXhwcmVzc2lvbk5vZGUmKSBjb25zdCBvdmVycmlkZTsKLSAgICB2b2lkIGR1bXAoV1RGOjpUZXh0
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4+IG1fY2hpbGRyZW47Ci0gICAgQ2FsY09wZXJhdG9yIG1fb3BlcmF0
b3I7Ci0gICAgQ2FsY3VsYXRpb25DYXRlZ29yeSBtX2Rlc3RpbmF0aW9uQ2F0ZWdvcnkgeyBDYWxj
dWxhdGlvbkNhdGVnb3J5OjpPdGhlciB9OwotfTsKLQotY2xhc3MgQ2FsY0V4cHJlc3Npb25CbGVu
ZExlbmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUgewotcHVibGljOgotICAg
IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExlbmd0aCB0bywgZmxvYXQg
cHJvZ3Jlc3MpOwotCi0gICAgY29uc3QgTGVuZ3RoJiBmcm9tKCkgY29uc3QgeyByZXR1cm4gbV9m
cm9tOyB9Ci0gICAgY29uc3QgTGVuZ3RoJiB0bygpIGNvbnN0IHsgcmV0dXJuIG1fdG87IH0KLSAg
ICBmbG9hdCBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jlc3M7IH0KLQotcHJpdmF0
ZToKLSAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3Qgb3ZlcnJpZGU7Ci0g
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZvaWQgZHVtcChXVEY6OlRleHRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIExlbmd0aCBtX2Zyb207Ci0gICAgTGVuZ3RoIG1fdG87Ci0gICAgZmxvYXQgbV9wcm9ncmVz
czsKLX07Ci0KLWNsYXNzIENhbGN1bGF0aW9uVmFsdWUgOiBwdWJsaWMgUmVmQ291bnRlZDxDYWxj
dWxhdGlvblZhbHVlPiB7Ci1wdWJsaWM6Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxD
YWxjdWxhdGlvblZhbHVlPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9k
ZT4sIFZhbHVlUmFuZ2UpOwotICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25z
dDsKLQotICAgIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmU7IH0KLSAgICBjb25zdCBDYWxjRXhwcmVzc2lvbk5v
ZGUmIGV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uOyB9Ci0KLXByaXZh
dGU6Ci0gICAgQ2FsY3VsYXRpb25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPiwgVmFsdWVSYW5nZSk7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25O
b2RlPiBtX2V4cHJlc3Npb247Ci0gICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25OZWdhdGl2ZTsK
LX07Ci0KLWlubGluZSBDYWxjRXhwcmVzc2lvbk5vZGU6OkNhbGNFeHByZXNzaW9uTm9kZShDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUpCi0gICAgOiBtX3R5cGUodHlwZSkKLXsKLX0KLQotaW5s
aW5lIENhbGN1bGF0aW9uVmFsdWU6OkNhbGN1bGF0aW9uVmFsdWUoc3RkOjp1bmlxdWVfcHRyPENh
bGNFeHByZXNzaW9uTm9kZT4gZXhwcmVzc2lvbiwgVmFsdWVSYW5nZSByYW5nZSkKLSAgICA6IG1f
ZXhwcmVzc2lvbihXVEZNb3ZlKGV4cHJlc3Npb24pKQotICAgICwgbV9zaG91bGRDbGFtcFRvTm9u
TmVnYXRpdmUocmFuZ2UgPT0gVmFsdWVSYW5nZTo6Tm9uTmVnYXRpdmUpCi17Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYgYSwgY29uc3QgQ2FsY3Vs
YXRpb25WYWx1ZSYgYikKLXsKLSAgICByZXR1cm4gYS5leHByZXNzaW9uKCkgPT0gYi5leHByZXNz
aW9uKCk7Ci19Ci0KLWlubGluZSBDYWxjRXhwcmVzc2lvbk51bWJlcjo6Q2FsY0V4cHJlc3Npb25O
dW1iZXIoZmxvYXQgdmFsdWUpCi0gICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJlc3Np
b25Ob2RlVHlwZTo6TnVtYmVyKQotICAgICwgbV92YWx1ZSh2YWx1ZSkKLXsKLX0KLQotaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk51bWJlciYgYSwgY29uc3QgQ2Fs
Y0V4cHJlc3Npb25OdW1iZXImIGIpCi17Ci0gICAgcmV0dXJuIGEudmFsdWUoKSA9PSBiLnZhbHVl
KCk7Ci19Ci0KLWlubGluZSBDYWxjRXhwcmVzc2lvbkxlbmd0aDo6Q2FsY0V4cHJlc3Npb25MZW5n
dGgoTGVuZ3RoIGxlbmd0aCkKLSAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lv
bk5vZGVUeXBlOjpMZW5ndGgpCi0gICAgLCBtX2xlbmd0aChsZW5ndGgpCi17Ci19Ci0KLWlubGlu
ZSBib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25MZW5ndGgmIGEsIGNvbnN0IENh
bGNFeHByZXNzaW9uTGVuZ3RoJiBiKQotewotICAgIHJldHVybiBhLmxlbmd0aCgpID09IGIubGVu
Z3RoKCk7Ci19Ci0KLWlubGluZSBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbjo6Q2FsY0V4cHJlc3Np
b25PcGVyYXRpb24oVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiYm
IGNoaWxkcmVuLCBDYWxjT3BlcmF0b3Igb3AsIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVzdGluYXRp
b25DYXRlZ29yeSkKLSAgICA6IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVU
eXBlOjpPcGVyYXRpb24pCi0gICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQotICAg
ICwgbV9vcGVyYXRvcihvcCkKLSAgICAsIG1fZGVzdGluYXRpb25DYXRlZ29yeShkZXN0aW5hdGlv
bkNhdGVnb3J5KQotewotfQotCi1ib29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25P
cGVyYXRpb24mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYpOwotCi1pbmxpbmUgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGEsIGNvbnN0IENh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGIpCi17Ci0gICAgcmV0dXJuIGEucHJvZ3Jlc3MoKSA9
PSBiLnByb2dyZXNzKCkgJiYgYS5mcm9tKCkgPT0gYi5mcm9tKCkgJiYgYS50bygpID09IGIudG8o
KTsKLX0KLQotV1RGOjpUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFdURjo6VGV4dFN0cmVhbSYsIGNv
bnN0IENhbGN1bGF0aW9uVmFsdWUmKTsKLVdURjo6VGV4dFN0cmVhbSYgb3BlcmF0b3I8PChXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKTsKLVdURjo6VGV4dFN0cmVh
bSYgb3BlcmF0b3I8PChXVEY6OlRleHRTdHJlYW0mLCBDYWxjT3BlcmF0b3IpOwotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCi0KLSNkZWZpbmUgU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQ
UkVTU0lPTl9OT0RFKFRvVmFsdWVUeXBlTmFtZSwgcHJlZGljYXRlKSBcCi1TUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlRvVmFsdWVUeXBlTmFtZSkgXAotICAgIHN0YXRpYyBi
b29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGUmIG5vZGUpIHsgcmV0
dXJuIG5vZGUucHJlZGljYXRlOyB9IFwKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKLQot
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9u
TnVtYmVyLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TnVtYmVy
KQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHByZXNz
aW9uTGVuZ3RoLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TGVu
Z3RoKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RFKENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlw
ZTo6T3BlcmF0aW9uKQotU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQUkVTU0lPTl9OT0RF
KENhbGNFeHByZXNzaW9uTmVnYXRpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lv
bk5vZGVUeXBlOjpOZWdhdGlvbikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJ
T05fTk9ERShDYWxjRXhwcmVzc2lvbkludmVyc2lvbiwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNF
eHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbikKLVNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FM
Q0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLCB0eXBlKCkgPT0gV2Vi
Q29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0xlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNyArMiw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAg
ICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKCBtdWVsbGVyQGtkZS5vcmcgKQotICogQ29weXJpZ2h0
IChDKSAyMDAzLTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDAzLTIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IEFuZHJldyBXZWxsaW5ndG9uIChwcm90b25Ad2lyZXRhcHBlZC5uZXQp
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgpAQCAtMjYsNiArMjYsOSBAQAogI2luY2x1ZGUgIkxlbmd0aC5oIgogCiAj
aW5jbHVkZSAiQW5pbWF0aW9uVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25C
bGVuZExlbmd0aC5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisjaW5jbHVk
ZSAiQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaCIKICNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVl
LmgiCiAjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5k
TGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uQmxlbmRMZW5ndGguY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgiCisKKyNpbmNsdWRlICJDYWxj
dWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiTGVuZ3RoRnVuY3Rpb25zLmgiCisjaW5jbHVkZSA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGg6OkNhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20s
IExlbmd0aCB0bywgZmxvYXQgcHJvZ3Jlc3MpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGgpCisgICAgLCBtX2Zyb20oZnJvbSkKKyAg
ICAsIG1fdG8odG8pCisgICAgLCBtX3Byb2dyZXNzKHByb2dyZXNzKQoreworICAgIC8vIEZsYXR0
ZW4gbmVzdGluZyBvZiBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoIGFzIGEgc3BlY3VsYXRpdmUg
Zml4IGZvciByZGFyOi8vcHJvYmxlbS8zMDUzMzAwNS4KKyAgICAvLyBDYWxjRXhwcmVzc2lvbkJs
ZW5kTGVuZ3RoIGlzIG9ubHkgdXNlZCBhcyBhIHJlc3VsdCBvZiBhbmltYXRpb24gYW5kIHRoZXkg
ZG9uJ3QgbmVzdCBpbiBub3JtYWwgY2FzZXMuCisgICAgaWYgKG1fZnJvbS5pc0NhbGN1bGF0ZWQo
KSAmJiBtX2Zyb20uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKS50eXBlKCkgPT0gQ2Fs
Y0V4cHJlc3Npb25Ob2RlVHlwZTo6QmxlbmRMZW5ndGgpCisgICAgICAgIG1fZnJvbSA9IGRvd25j
YXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG1fZnJvbS5jYWxjdWxhdGlvblZhbHVlKCku
ZXhwcmVzc2lvbigpKS5mcm9tKCk7CisgICAgaWYgKG1fdG8uaXNDYWxjdWxhdGVkKCkgJiYgbV90
by5jYWxjdWxhdGlvblZhbHVlKCkuZXhwcmVzc2lvbigpLnR5cGUoKSA9PSBDYWxjRXhwcmVzc2lv
bk5vZGVUeXBlOjpCbGVuZExlbmd0aCkKKyAgICAgICAgbV90byA9IGRvd25jYXN0PENhbGNFeHBy
ZXNzaW9uQmxlbmRMZW5ndGg+KG1fdG8uY2FsY3VsYXRpb25WYWx1ZSgpLmV4cHJlc3Npb24oKSku
dG8oKTsKK30KKworZmxvYXQgQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aDo6ZXZhbHVhdGUoZmxv
YXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuICgxLjBmIC0gbV9wcm9ncmVzcykgKiBm
bG9hdFZhbHVlRm9yTGVuZ3RoKG1fZnJvbSwgbWF4VmFsdWUpICsgbV9wcm9ncmVzcyAqIGZsb2F0
VmFsdWVGb3JMZW5ndGgobV90bywgbWF4VmFsdWUpOworfQorCitib29sIENhbGNFeHByZXNzaW9u
QmxlbmRMZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikg
Y29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aD4ob3RoZXIp
ICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGg+KG90aGVyKTsK
K30KKwordm9pZCBDYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoOjpkdW1wKFRleHRTdHJlYW0mIHRz
KSBjb25zdAoreworICAgIHRzIDw8ICJibGVuZCgiIDw8IG1fZnJvbSA8PCAiLCAiIDw8IG1fdG8g
PDwgIiwgIiA8PCBtX3Byb2dyZXNzIDw8ICIpIjsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3RoLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkJsZW5kTGVuZ3Ro
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhw
cmVzc2lvbkJsZW5kTGVuZ3RoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgi
CisjaW5jbHVkZSAiTGVuZ3RoLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ2Fs
Y0V4cHJlc3Npb25CbGVuZExlbmd0aCBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVzc2lvbk5vZGUg
eworcHVibGljOgorICAgIENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgoTGVuZ3RoIGZyb20sIExl
bmd0aCB0bywgZmxvYXQgcHJvZ3Jlc3MpOworCisgICAgY29uc3QgTGVuZ3RoJiBmcm9tKCkgY29u
c3QgeyByZXR1cm4gbV9mcm9tOyB9CisgICAgY29uc3QgTGVuZ3RoJiB0bygpIGNvbnN0IHsgcmV0
dXJuIG1fdG87IH0KKyAgICBmbG9hdCBwcm9ncmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvZ3Jl
c3M7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29u
c3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYp
IGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisK
KyAgICBMZW5ndGggbV9mcm9tOworICAgIExlbmd0aCBtX3RvOworICAgIGZsb2F0IG1fcHJvZ3Jl
c3M7Cit9OworCitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uQmxl
bmRMZW5ndGgmIGEsIGNvbnN0IENhbGNFeHByZXNzaW9uQmxlbmRMZW5ndGgmIGIpCit7CisgICAg
cmV0dXJuIGEucHJvZ3Jlc3MoKSA9PSBiLnByb2dyZXNzKCkgJiYgYS5mcm9tKCkgPT0gYi5mcm9t
KCkgJiYgYS50bygpID09IGIudG8oKTsKK30KKworfQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25CbGVuZExlbmd0aCwgdHlwZSgpID09
IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkJsZW5kTGVuZ3RoKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbklu
dmVyc2lvbi5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fs
Yy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAq
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDYWxjRXhw
cmVzc2lvbkludmVyc2lvbi5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uOjpl
dmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gMS4wZiAvIG1fY2hp
bGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKK30KKwordm9pZCBDYWxjRXhwcmVzc2lvbkludmVyc2lv
bjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29uc3QKK3sKKyAgICB0cyA8PCAiMS4wIC8gIiA8PCAi
KCIgPDwgKm1fY2hpbGQgPDwgIikiOworfQorCitib29sIENhbGNFeHByZXNzaW9uSW52ZXJzaW9u
OjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9uSW52ZXJzaW9uPihvdGhlcikgJiYgKnRoaXMgPT0g
ZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25JbnZlcnNpb24+KG90aGVyKTsKK30KKworYm9vbCBvcGVy
YXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uSW52ZXJzaW9uJiBhLCBjb25zdCBDYWxjRXhwcmVz
c2lvbkludmVyc2lvbiYgYikKK3sKKyAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5jaGlsZCgp
OworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNz
aW9uSW52ZXJzaW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2Fs
Yy9DYWxjRXhwcmVzc2lvbkludmVyc2lvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRl
ICJDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24gZmluYWwgOiBwdWJsaWMg
Q2FsY0V4cHJlc3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBDYWxjRXhwcmVzc2lvbkludmVyc2lv
bihzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiYmIG5vZGUpCisgICAgICAgIDog
Q2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6OkludmVyc2lvbikKKyAg
ICAgICAgLCBtX2NoaWxkKFdURk1vdmUobm9kZSkpCisgICAgeworICAgICAgICBBU1NFUlQobV9j
aGlsZCk7CisgICAgfQorCisgICAgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlKiBjaGlsZCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGQuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBmbG9hdCBldmFs
dWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7CisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgZHVtcChUZXh0
U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJlc3Np
b25Ob2RlPiBtX2NoaWxkOworfTsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNz
aW9uSW52ZXJzaW9uJiwgY29uc3QgQ2FsY0V4cHJlc3Npb25JbnZlcnNpb24mKTsKKworfQorCitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoQ2FsY0V4cHJlc3Npb25J
bnZlcnNpb24sIHR5cGUoKSA9PSBXZWJDb3JlOjpDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpJbnZl
cnNpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
TGVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0Nh
bGNFeHByZXNzaW9uTGVuZ3RoLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkNhbGNFeHByZXNzaW9uTGVuZ3RoLmgiCisKKyNpbmNsdWRlICJMZW5ndGhGdW5jdGlvbnMuaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworZmxvYXQgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBj
b25zdAoreworICAgIHJldHVybiBmbG9hdFZhbHVlRm9yTGVuZ3RoKG1fbGVuZ3RoLCBtYXhWYWx1
ZSk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25MZW5ndGg6Om9wZXJhdG9yPT0oY29uc3QgQ2Fs
Y0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJl
c3Npb25MZW5ndGg+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhwcmVzc2lvbkxl
bmd0aD4ob3RoZXIpOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uTGVuZ3RoOjpkdW1wKFRleHRT
dHJlYW0mIHRzKSBjb25zdAoreworICAgIHRzIDw8IG1fbGVuZ3RoOworfQorCisKK30KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25MZW5ndGguaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTGVu
Z3RoLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbkxlbmd0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uTm9kZS5oIgor
I2luY2x1ZGUgIkxlbmd0aC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENhbGNF
eHByZXNzaW9uTGVuZ3RoIGZpbmFsIDogcHVibGljIENhbGNFeHByZXNzaW9uTm9kZSB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgQ2FsY0V4cHJlc3Npb25MZW5ndGgoTGVuZ3RoKTsKKworICAgIGNv
bnN0IExlbmd0aCYgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworcHJpdmF0
ZToKKyAgICBmbG9hdCBldmFsdWF0ZShmbG9hdCBtYXhWYWx1ZSkgY29uc3QgZmluYWw7CisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYpIGNvbnN0IGZpbmFsOwor
ICAgIHZvaWQgZHVtcChUZXh0U3RyZWFtJikgY29uc3QgZmluYWw7CisKKyAgICBMZW5ndGggbV9s
ZW5ndGg7Cit9OworCitpbmxpbmUgQ2FsY0V4cHJlc3Npb25MZW5ndGg6OkNhbGNFeHByZXNzaW9u
TGVuZ3RoKExlbmd0aCBsZW5ndGgpCisgICAgOiBDYWxjRXhwcmVzc2lvbk5vZGUoQ2FsY0V4cHJl
c3Npb25Ob2RlVHlwZTo6TGVuZ3RoKQorICAgICwgbV9sZW5ndGgobGVuZ3RoKQoreworfQorCitp
bmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9uTGVuZ3RoJiBhLCBjb25z
dCBDYWxjRXhwcmVzc2lvbkxlbmd0aCYgYikKK3sKKyAgICByZXR1cm4gYS5sZW5ndGgoKSA9PSBi
Lmxlbmd0aCgpOworfQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJ
T05fTk9ERShDYWxjRXhwcmVzc2lvbkxlbmd0aCwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHBy
ZXNzaW9uTm9kZVR5cGU6Okxlbmd0aCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nh
bGMvQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk5lZ2F0aW9uLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25OZWdhdGlvbi5oIgorCisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zs
b2F0IENhbGNFeHByZXNzaW9uTmVnYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25z
dAoreworICAgIHJldHVybiAtbV9jaGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpOworfQorCitib29s
IENhbGNFeHByZXNzaW9uTmVnYXRpb246Om9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25O
b2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8Q2FsY0V4cHJlc3Npb25OZWdhdGlv
bj4ob3RoZXIpICYmICp0aGlzID09IGRvd25jYXN0PENhbGNFeHByZXNzaW9uTmVnYXRpb24+KG90
aGVyKTsKK30KKwordm9pZCBDYWxjRXhwcmVzc2lvbk5lZ2F0aW9uOjpkdW1wKFRleHRTdHJlYW0m
IHRzKSBjb25zdAoreworICAgIHRzIDw8ICItKCIgPDwgKm1fY2hpbGQgPDwgIikiOworfQorCiti
b29sIG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYgYSwgY29uc3QgQ2Fs
Y0V4cHJlc3Npb25OZWdhdGlvbiYgYikKK3sKKyAgICByZXR1cm4gKmEuY2hpbGQoKSA9PSAqYi5j
aGlsZCgpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNF
eHByZXNzaW9uTmVnYXRpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24uaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTmVnYXRpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisg
KiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICog
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKyNpbmNsdWRlIDxtZW1vcnk+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiBmaW5hbCA6IHB1Ymxp
YyBDYWxjRXhwcmVzc2lvbk5vZGUgeworcHVibGljOgorICAgIENhbGNFeHByZXNzaW9uTmVnYXRp
b24oc3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4mJiBub2RlKQorICAgICAgICA6
IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlOjpOZWdhdGlvbikKKyAg
ICAgICAgLCBtX2NoaWxkKFdURk1vdmUobm9kZSkpCisgICAgeworICAgICAgICBBU1NFUlQobV9j
aGlsZCk7CisgICAgfQorICAgIAorICAgIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSogY2hpbGQo
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgZmxvYXQg
ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIGR1bXAo
VGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgc3RkOjp1bmlxdWVfcHRyPENhbGNFeHBy
ZXNzaW9uTm9kZT4gbV9jaGlsZDsKK307CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjRXhw
cmVzc2lvbk5lZ2F0aW9uJiwgY29uc3QgQ2FsY0V4cHJlc3Npb25OZWdhdGlvbiYpOworCit9CisK
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxjRXhwcmVzc2lv
bk5lZ2F0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6TmVn
YXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9u
Tm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbk5vZGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGNF
eHByZXNzaW9uTm9kZS5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1RleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVhbSYg
dHMsIGNvbnN0IENhbGNFeHByZXNzaW9uTm9kZSYgZXhwcmVzc2lvbk5vZGUpCit7CisgICAgZXhw
cmVzc2lvbk5vZGUuZHVtcCh0cyk7CisgICAgcmV0dXJuIHRzOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTm9kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25Ob2RlLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lv
bk5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2VudW0gY2xhc3MgQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZSA6IHVpbnQ4X3QgeworICAg
IFVuZGVmaW5lZCwKKyAgICBOdW1iZXIsCisgICAgTGVuZ3RoLAorICAgIE9wZXJhdGlvbiwKKyAg
ICBOZWdhdGlvbiwKKyAgICBJbnZlcnNpb24sCisgICAgQmxlbmRMZW5ndGgsCit9OworCitjbGFz
cyBDYWxjRXhwcmVzc2lvbk5vZGUgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVU
eXBlID0gQ2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6VW5kZWZpbmVkKTsKKyAgICB2aXJ0dWFsIH5D
YWxjRXhwcmVzc2lvbk5vZGUoKSA9IGRlZmF1bHQ7CisKKyAgICBDYWxjRXhwcmVzc2lvbk5vZGVU
eXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIHZpcnR1YWwgZmxvYXQg
ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBDYWxj
RXhwcmVzc2lvbk5vZGVUeXBlIG1fdHlwZTsKK307CisKK2lubGluZSBDYWxjRXhwcmVzc2lvbk5v
ZGU6OkNhbGNFeHByZXNzaW9uTm9kZShDYWxjRXhwcmVzc2lvbk5vZGVUeXBlIHR5cGUpCisgICAg
OiBtX3R5cGUodHlwZSkKK3sKK30KKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFt
JiwgY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJik7CisKK30KKworI2RlZmluZSBTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0NBTENFWFBSRVNTSU9OX05PREUoVG9WYWx1ZVR5cGVOYW1lLCBwcmVkaWNh
dGUpIFwKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6VG9WYWx1ZVR5cGVO
YW1lKSBcCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OkNhbGNFeHByZXNz
aW9uTm9kZSYgbm9kZSkgeyByZXR1cm4gbm9kZS5wcmVkaWNhdGU7IH0gXAorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxj
RXhwcmVzc2lvbk51bWJlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAq
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk51bWJlci5oIgorCisjaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Zsb2F0IENhbGNFeHByZXNz
aW9uTnVtYmVyOjpldmFsdWF0ZShmbG9hdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZTsK
K30KKwordm9pZCBDYWxjRXhwcmVzc2lvbk51bWJlcjo6ZHVtcChUZXh0U3RyZWFtJiB0cykgY29u
c3QKK3sKKyAgICB0cyA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdl
cnMobV92YWx1ZSk7Cit9CisKK2Jvb2wgQ2FsY0V4cHJlc3Npb25OdW1iZXI6Om9wZXJhdG9yPT0o
Y29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gaXM8
Q2FsY0V4cHJlc3Npb25OdW1iZXI+KG90aGVyKSAmJiAqdGhpcyA9PSBkb3duY2FzdDxDYWxjRXhw
cmVzc2lvbk51bWJlcj4ob3RoZXIpOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uTnVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk51bWJlci5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25OdW1iZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk5vZGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBDYWxjRXhwcmVzc2lvbk51bWJlciBmaW5hbCA6IHB1YmxpYyBDYWxjRXhwcmVz
c2lvbk5vZGUgeworcHVibGljOgorICAgIGV4cGxpY2l0IENhbGNFeHByZXNzaW9uTnVtYmVyKGZs
b2F0KTsKKworICAgIGZsb2F0IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitw
cml2YXRlOgorICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0KSBjb25zdCBmaW5hbDsKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25Ob2RlJikgY29uc3QgZmluYWw7CisgICAg
dm9pZCBkdW1wKFRleHRTdHJlYW0mKSBjb25zdCBmaW5hbDsKKworICAgIGZsb2F0IG1fdmFsdWU7
Cit9OworCitpbmxpbmUgQ2FsY0V4cHJlc3Npb25OdW1iZXI6OkNhbGNFeHByZXNzaW9uTnVtYmVy
KGZsb2F0IHZhbHVlKQorICAgIDogQ2FsY0V4cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9k
ZVR5cGU6Ok51bWJlcikKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7Cit9CisKK2lubGluZSBib29s
IG9wZXJhdG9yPT0oY29uc3QgQ2FsY0V4cHJlc3Npb25OdW1iZXImIGEsIGNvbnN0IENhbGNFeHBy
ZXNzaW9uTnVtYmVyJiBiKQoreworICAgIHJldHVybiBhLnZhbHVlKCkgPT0gYi52YWx1ZSgpOwor
fQorCit9CisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ0FMQ0VYUFJFU1NJT05fTk9ERShDYWxj
RXhwcmVzc2lvbk51bWJlciwgdHlwZSgpID09IFdlYkNvcmU6OkNhbGNFeHByZXNzaW9uTm9kZVR5
cGU6Ok51bWJlcikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJl
c3Npb25PcGVyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwCShub25leGlzdGVudCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNhbGNFeHByZXNzaW9uT3BlcmF0aW9uLmgiCisKKyNpbmNsdWRlIDx3
dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworZmxvYXQgQ2Fs
Y0V4cHJlc3Npb25PcGVyYXRpb246OmV2YWx1YXRlKGZsb2F0IG1heFZhbHVlKSBjb25zdAorewor
ICAgIHN3aXRjaCAobV9vcGVyYXRvcikgeworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpBZGQ6IHsK
KyAgICAgICAgZmxvYXQgc3VtID0gMDsKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hp
bGRyZW4pCisgICAgICAgICAgICBzdW0gKz0gY2hpbGQtPmV2YWx1YXRlKG1heFZhbHVlKTsKKyAg
ICAgICAgcmV0dXJuIHN1bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OlN1YnRyYWN0
OiB7CisgICAgICAgIC8vIEZJWE1FCisgICAgICAgIEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9
PSAyKTsKKyAgICAgICAgZmxvYXQgbGVmdCA9IG1fY2hpbGRyZW5bMF0tPmV2YWx1YXRlKG1heFZh
bHVlKTsKKyAgICAgICAgZmxvYXQgcmlnaHQgPSBtX2NoaWxkcmVuWzFdLT5ldmFsdWF0ZShtYXhW
YWx1ZSk7CisgICAgICAgIHJldHVybiBsZWZ0IC0gcmlnaHQ7CisgICAgfQorICAgIGNhc2UgQ2Fs
Y09wZXJhdG9yOjpNdWx0aXBseTogeworICAgICAgICBmbG9hdCBwcm9kdWN0ID0gMTsKKyAgICAg
ICAgZm9yIChhdXRvJiBjaGlsZCA6IG1fY2hpbGRyZW4pCisgICAgICAgICAgICBwcm9kdWN0ICo9
IGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIHJldHVybiBwcm9kdWN0OworICAg
IH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRlOiB7CisgICAgICAgIC8vIEZJWE1FCisg
ICAgICAgIEFTU0VSVChtX2NoaWxkcmVuLnNpemUoKSA9PSAxIHx8IG1fY2hpbGRyZW4uc2l6ZSgp
ID09IDIpOworICAgICAgICBpZiAobV9jaGlsZHJlbi5zaXplKCkgPT0gMSkKKyAgICAgICAgICAg
IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAg
IGZsb2F0IGxlZnQgPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAg
IGZsb2F0IHJpZ2h0ID0gbV9jaGlsZHJlblsxXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAg
ICByZXR1cm4gbGVmdCAvIHJpZ2h0OworICAgIH0KKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWlu
OiB7CisgICAgICAgIGlmIChtX2NoaWxkcmVuLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
biBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6cXVpZXRfTmFOKCk7CisgICAgICAgIGZsb2F0
IG1pbmltdW0gPSBtX2NoaWxkcmVuWzBdLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgICAgIGZv
ciAoYXV0byYgY2hpbGQgOiBtX2NoaWxkcmVuKQorICAgICAgICAgICAgbWluaW11bSA9IHN0ZDo6
bWluKG1pbmltdW0sIGNoaWxkLT5ldmFsdWF0ZShtYXhWYWx1ZSkpOworICAgICAgICByZXR1cm4g
bWluaW11bTsKKyAgICB9CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6Ok1heDogeworICAgICAgICBp
ZiAobV9jaGlsZHJlbi5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gc3RkOjpudW1lcmlj
X2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworICAgICAgICBmbG9hdCBtYXhpbXVtID0gbV9j
aGlsZHJlblswXS0+ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmb3IgKGF1dG8mIGNoaWxk
IDogbV9jaGlsZHJlbikKKyAgICAgICAgICAgIG1heGltdW0gPSBzdGQ6Om1heChtYXhpbXVtLCBj
aGlsZC0+ZXZhbHVhdGUobWF4VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIG1heGltdW07CisgICAg
fQorICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpDbGFtcDogeworICAgICAgICBpZiAobV9jaGlsZHJl
bi5zaXplKCkgIT0gMykKKyAgICAgICAgICAgIHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGZs
b2F0Pjo6cXVpZXRfTmFOKCk7CisKKyAgICAgICAgZmxvYXQgbWluID0gbV9jaGlsZHJlblswXS0+
ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICBmbG9hdCB2YWx1ZSA9IG1fY2hpbGRyZW5bMV0t
PmV2YWx1YXRlKG1heFZhbHVlKTsKKyAgICAgICAgZmxvYXQgbWF4ID0gbV9jaGlsZHJlblsyXS0+
ZXZhbHVhdGUobWF4VmFsdWUpOworICAgICAgICByZXR1cm4gc3RkOjptYXgobWluLCBzdGQ6Om1p
bih2YWx1ZSwgbWF4KSk7CisgICAgfQorICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46OnF1aWV0X05hTigpOworfQor
Citib29sIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpvcGVyYXRvcj09KGNvbnN0IENhbGNFeHBy
ZXNzaW9uTm9kZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIGlzPENhbGNFeHByZXNzaW9u
T3BlcmF0aW9uPihvdGhlcikgJiYgKnRoaXMgPT0gZG93bmNhc3Q8Q2FsY0V4cHJlc3Npb25PcGVy
YXRpb24+KG90aGVyKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhbGNFeHByZXNzaW9u
T3BlcmF0aW9uJiBhLCBjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYgYikKK3sKKyAgICBp
ZiAoYS5nZXRPcGVyYXRvcigpICE9IGIuZ2V0T3BlcmF0b3IoKSB8fCBhLmRlc3RpbmF0aW9uQ2F0
ZWdvcnkoKSAhPSBiLmRlc3RpbmF0aW9uQ2F0ZWdvcnkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmIChhLmNoaWxkcmVuKCkuc2l6ZSgpICE9IGIuY2hpbGRyZW4oKS5zaXplKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYS5jaGls
ZHJlbigpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghKCphLmNoaWxkcmVuKClbaV0gPT0g
KmIuY2hpbGRyZW4oKVtpXSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIENhbGNFeHByZXNzaW9uT3BlcmF0aW9uOjpkdW1wKFRl
eHRTdHJlYW0mIHRzKSBjb25zdAoreworICAgIGlmIChtX29wZXJhdG9yID09IENhbGNPcGVyYXRv
cjo6TWluIHx8IG1fb3BlcmF0b3IgPT0gQ2FsY09wZXJhdG9yOjpNYXgpIHsKKyAgICAgICAgdHMg
PDwgbV9vcGVyYXRvciA8PCAiKCI7CisgICAgICAgIHNpemVfdCBjaGlsZHJlbkNvdW50ID0gbV9j
aGlsZHJlbi5zaXplKCk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY2hpbGRyZW5D
b3VudDsgaSsrKSB7CisgICAgICAgICAgICB0cyA8PCBtX2NoaWxkcmVuW2ldLmdldCgpOworICAg
ICAgICAgICAgaWYgKGkgPCBjaGlsZHJlbkNvdW50IC0gMSkKKyAgICAgICAgICAgICAgICB0cyA8
PCAiLCAiOworICAgICAgICB9CisgICAgICAgIHRzIDw8ICIpIjsKKyAgICB9IGVsc2UKKyAgICAg
ICAgdHMgPDwgbV9jaGlsZHJlblswXS5nZXQoKSA8PCAiICIgPDwgbV9vcGVyYXRvciA8PCAiICIg
PDwgbV9jaGlsZHJlblsxXS5nZXQoKTsKK30KKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2FsYy9DYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24uaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNFeHByZXNzaW9uT3Bl
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNw
cmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsY0V4cHJlc3Npb25Ob2RlLmgiCisjaW5jbHVkZSAi
Q2FsY09wZXJhdG9yLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25DYXRlZ29yeS5oIgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgQ2FsY0V4cHJlc3Npb25PcGVyYXRpb24gZmluYWwgOiBwdWJsaWMgQ2FsY0V4
cHJlc3Npb25Ob2RlIHsKK3B1YmxpYzoKKyAgICBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNP
cGVyYXRvciwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5ID0gQ2FsY3Vs
YXRpb25DYXRlZ29yeTo6T3RoZXIpOworCisgICAgQ2FsY09wZXJhdG9yIGdldE9wZXJhdG9yKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGVyYXRvcjsgfQorICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgZGVz
dGluYXRpb25DYXRlZ29yeSgpIGNvbnN0IHsgcmV0dXJuIG1fZGVzdGluYXRpb25DYXRlZ29yeTsg
fQorCisgICAgY29uc3QgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+
PiYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKK3ByaXZhdGU6Cisg
ICAgZmxvYXQgZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0IGZpbmFsOworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk5vZGUmKSBjb25zdCBmaW5hbDsKKyAgICB2
b2lkIGR1bXAoVGV4dFN0cmVhbSYpIGNvbnN0IGZpbmFsOworCisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxDYWxjRXhwcmVzc2lvbk5vZGU+PiBtX2NoaWxkcmVuOworICAgIENhbGNPcGVyYXRv
ciBtX29wZXJhdG9yOworICAgIENhbGN1bGF0aW9uQ2F0ZWdvcnkgbV9kZXN0aW5hdGlvbkNhdGVn
b3J5IHsgQ2FsY3VsYXRpb25DYXRlZ29yeTo6T3RoZXIgfTsKK307CisKKworaW5saW5lIENhbGNF
eHByZXNzaW9uT3BlcmF0aW9uOjpDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbihWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPENhbGNFeHByZXNzaW9uTm9kZT4+JiYgY2hpbGRyZW4sIENhbGNPcGVyYXRvciBv
cCwgQ2FsY3VsYXRpb25DYXRlZ29yeSBkZXN0aW5hdGlvbkNhdGVnb3J5KQorICAgIDogQ2FsY0V4
cHJlc3Npb25Ob2RlKENhbGNFeHByZXNzaW9uTm9kZVR5cGU6Ok9wZXJhdGlvbikKKyAgICAsIG1f
Y2hpbGRyZW4oV1RGTW92ZShjaGlsZHJlbikpCisgICAgLCBtX29wZXJhdG9yKG9wKQorICAgICwg
bV9kZXN0aW5hdGlvbkNhdGVnb3J5KGRlc3RpbmF0aW9uQ2F0ZWdvcnkpCit7Cit9CisKK2Jvb2wg
b3BlcmF0b3I9PShjb25zdCBDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbiYsIGNvbnN0IENhbGNFeHBy
ZXNzaW9uT3BlcmF0aW9uJik7CisKK30KKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DQUxDRVhQ
UkVTU0lPTl9OT0RFKENhbGNFeHByZXNzaW9uT3BlcmF0aW9uLCB0eXBlKCkgPT0gV2ViQ29yZTo6
Q2FsY0V4cHJlc3Npb25Ob2RlVHlwZTo6T3BlcmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJDYWxjT3BlcmF0b3IuaCIKKworI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJl
YW0mIHRzLCBDYWxjT3BlcmF0b3Igb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2Ug
Q2FsY09wZXJhdG9yOjpBZGQ6IHRzIDw8ICIrIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjT3BlcmF0
b3I6OlN1YnRyYWN0OiB0cyA8PCAiLSI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpN
dWx0aXBseTogdHMgPDwgIioiOyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6RGl2aWRl
OiB0cyA8PCAiLyI7IGJyZWFrOworICAgIGNhc2UgQ2FsY09wZXJhdG9yOjpNaW46IHRzIDw8ICJt
aW4iOyBicmVhazsKKyAgICBjYXNlIENhbGNPcGVyYXRvcjo6TWF4OiB0cyA8PCAibWF4IjsgYnJl
YWs7CisgICAgY2FzZSBDYWxjT3BlcmF0b3I6OkNsYW1wOiB0cyA8PCAiY2xhbXAiOyBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHRzOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jYWxjL0NhbGNPcGVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NhbGMvQ2FsY09wZXJhdG9yLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2FsYy9DYWxjT3BlcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2Fy
ZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIERvbid0IGNoYW5nZSB0aGVzZSB2YWx1
ZXM7IHBhcnNpbmcgdXNlcyB0aGVtLgorZW51bSBjbGFzcyBDYWxjT3BlcmF0b3IgOiB1aW50OF90
IHsKKyAgICBBZGQgPSAnKycsCisgICAgU3VidHJhY3QgPSAnLScsCisgICAgTXVsdGlwbHkgPSAn
KicsCisgICAgRGl2aWRlID0gJy8nLAorICAgIE1pbiA9IDAsCisgICAgTWF4LAorICAgIENsYW1w
LAorfTsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgQ2FsY09wZXJhdG9y
KTsKKworfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvbkNh
dGVnb3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0Nh
bGN1bGF0aW9uQ2F0ZWdvcnkuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25DYXRlZ29yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJD
YWxjdWxhdGlvbkNhdGVnb3J5LmgiCisKKyNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0U3Ry
ZWFtJiB0cywgQ2FsY3VsYXRpb25DYXRlZ29yeSBjYXRlZ29yeSkKK3sKKyAgICBzd2l0Y2ggKGNh
dGVnb3J5KSB7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpOdW1iZXI6IHRzIDw8ICJu
dW1iZXIiOyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6Okxlbmd0aDogdHMg
PDwgImxlbmd0aCI7IGJyZWFrOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2Vu
dDogdHMgPDwgInBlcmNlbnQiOyBicmVhazsKKyAgICBjYXNlIENhbGN1bGF0aW9uQ2F0ZWdvcnk6
OlBlcmNlbnROdW1iZXI6IHRzIDw8ICJwZXJjZW50LW51bWJlciI7IGJyZWFrOworICAgIGNhc2Ug
Q2FsY3VsYXRpb25DYXRlZ29yeTo6UGVyY2VudExlbmd0aDogdHMgPDwgInBlcmNlbnQtbGVuZ3Ro
IjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpBbmdsZTogdHMgPDwgImFu
Z2xlIjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpUaW1lOiB0cyA8PCAi
dGltZSI7IGJyZWFrOworICAgIGNhc2UgQ2FsY3VsYXRpb25DYXRlZ29yeTo6RnJlcXVlbmN5OiB0
cyA8PCAiZnJlcXVlbmN5IjsgYnJlYWs7CisgICAgY2FzZSBDYWxjdWxhdGlvbkNhdGVnb3J5OjpP
dGhlcjogdHMgPDwgIm90aGVyIjsgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHRzOworfQor
Cit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uQ2F0ZWdv
cnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0
aW9uQ2F0ZWdvcnkuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9j
YWxjL0NhbGN1bGF0aW9uQ2F0ZWdvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIEZJWE1FOiBGaW5kIGEgd2F5IHRvIHVuaWZ5IHRo
aXMgd2l0aCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdENhdGVnb3J5PworZW51bSBjbGFzcyBDYWxj
dWxhdGlvbkNhdGVnb3J5IDogdWludDhfdCB7CisgICAgTnVtYmVyLAorICAgIExlbmd0aCwKKyAg
ICBQZXJjZW50LAorICAgIFBlcmNlbnROdW1iZXIsCisgICAgUGVyY2VudExlbmd0aCwKKyAgICBB
bmdsZSwKKyAgICBUaW1lLAorICAgIEZyZXF1ZW5jeSwKKyAgICBPdGhlcgorfTsKKworVGV4dFN0
cmVhbSYgb3BlcmF0b3I8PChUZXh0U3RyZWFtJiwgQ2FsY3VsYXRpb25DYXRlZ29yeSk7CisKK30K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NhbGMvQ2FsY3VsYXRpb25WYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2FsYy9DYWxjdWxhdGlvblZh
bHVlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0Nh
bGN1bGF0aW9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKworI2luY2x1ZGUgIkNh
bGNFeHByZXNzaW9uTm9kZS5oIgorI2luY2x1ZGUgPGxpbWl0cz4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVmPENhbGN1bGF0aW9u
VmFsdWU+IENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4cHJl
c3Npb25Ob2RlPiB2YWx1ZSwgVmFsdWVSYW5nZSByYW5nZSkKK3sKKyAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBDYWxjdWxhdGlvblZhbHVlKFdURk1vdmUodmFsdWUpLCByYW5nZSkpOworfQorCitD
YWxjdWxhdGlvblZhbHVlOjpDYWxjdWxhdGlvblZhbHVlKHN0ZDo6dW5pcXVlX3B0cjxDYWxjRXhw
cmVzc2lvbk5vZGU+IGV4cHJlc3Npb24sIFZhbHVlUmFuZ2UgcmFuZ2UpCisgICAgOiBtX2V4cHJl
c3Npb24oV1RGTW92ZShleHByZXNzaW9uKSkKKyAgICAsIG1fc2hvdWxkQ2xhbXBUb05vbk5lZ2F0
aXZlKHJhbmdlID09IFZhbHVlUmFuZ2U6Ok5vbk5lZ2F0aXZlKQoreworfQorCitDYWxjdWxhdGlv
blZhbHVlOjp+Q2FsY3VsYXRpb25WYWx1ZSgpID0gZGVmYXVsdDsKKworZmxvYXQgQ2FsY3VsYXRp
b25WYWx1ZTo6ZXZhbHVhdGUoZmxvYXQgbWF4VmFsdWUpIGNvbnN0Cit7CisgICAgZmxvYXQgcmVz
dWx0ID0gbV9leHByZXNzaW9uLT5ldmFsdWF0ZShtYXhWYWx1ZSk7CisgICAgLy8gRklYTUU6IFRo
aXMgdGVzdCB3YXMgb3JpZ2luYWxseSBuZWVkZWQgd2hlbiB3ZSBkaWQgbm90IGRldGVjdCBkaXZp
c2lvbiBieSB6ZXJvIGF0IHBhcnNlIHRpbWUuCisgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRo
aXMgaXMgbm93IHVubmVlZGVkIGNvZGUgYW5kIGNhbiBiZSByZW1vdmVkLgorICAgIGlmIChzdGQ6
OmlzbmFuKHJlc3VsdCkpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBtX3Nob3VsZENs
YW1wVG9Ob25OZWdhdGl2ZSAmJiByZXN1bHQgPCAwID8gMCA6IHJlc3VsdDsKK30KKworYm9vbCBv
cGVyYXRvcj09KGNvbnN0IENhbGN1bGF0aW9uVmFsdWUmIGEsIGNvbnN0IENhbGN1bGF0aW9uVmFs
dWUmIGIpCit7CisgICAgcmV0dXJuIGEuZXhwcmVzc2lvbigpID09IGIuZXhwcmVzc2lvbigpOwor
fQorCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBDYWxjdWxh
dGlvblZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdHMgPDwgImNhbGMoIiA8PCB2YWx1ZS5l
eHByZXNzaW9uKCkgPDwgIikiOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFsdWUuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jYWxjL0NhbGN1bGF0aW9uVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNs
dWRlICJMZW5ndGguaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9S
ZWYuaD4KKyNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENhbGNFeHByZXNzaW9uTm9kZTsKKworY2xhc3MgQ2FsY3VsYXRpb25WYWx1ZSA6
IHB1YmxpYyBSZWZDb3VudGVkPENhbGN1bGF0aW9uVmFsdWU+IHsKK3B1YmxpYzoKKyAgICBXRUJD
T1JFX0VYUE9SVCBzdGF0aWMgUmVmPENhbGN1bGF0aW9uVmFsdWU+IGNyZWF0ZShzdGQ6OnVuaXF1
ZV9wdHI8Q2FsY0V4cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7CisgICAgV0VCQ09SRV9FWFBP
UlQgfkNhbGN1bGF0aW9uVmFsdWUoKTsKKworICAgIGZsb2F0IGV2YWx1YXRlKGZsb2F0IG1heFZh
bHVlKSBjb25zdDsKKworICAgIGJvb2wgc2hvdWxkQ2xhbXBUb05vbk5lZ2F0aXZlKCkgY29uc3Qg
eyByZXR1cm4gbV9zaG91bGRDbGFtcFRvTm9uTmVnYXRpdmU7IH0KKyAgICBjb25zdCBDYWxjRXhw
cmVzc2lvbk5vZGUmIGV4cHJlc3Npb24oKSBjb25zdCB7IHJldHVybiAqbV9leHByZXNzaW9uOyB9
CisKK3ByaXZhdGU6CisgICAgQ2FsY3VsYXRpb25WYWx1ZShzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiwgVmFsdWVSYW5nZSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsY0V4
cHJlc3Npb25Ob2RlPiBtX2V4cHJlc3Npb247CisgICAgYm9vbCBtX3Nob3VsZENsYW1wVG9Ob25O
ZWdhdGl2ZTsKK307CisKK2Jvb2wgb3BlcmF0b3I9PShjb25zdCBDYWxjdWxhdGlvblZhbHVlJiwg
Y29uc3QgQ2FsY3VsYXRpb25WYWx1ZSYpOworCitUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRT
dHJlYW0mLCBjb25zdCBDYWxjdWxhdGlvblZhbHVlJik7CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKwpJbmRleDogU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyQ29udmVydGVy
LmgJKHJldmlzaW9uIDI3ODIzOSkKKysrIFNvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
ckNvbnZlcnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiAjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKLSNpbmNsdWRlICJDU1NDYWxj
dWxhdGlvblZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTQ2FsY1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NT
Q29udGVudERpc3RyaWJ1dGlvblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udEZlYXR1cmVWYWx1
ZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTdHlsZVZhbHVlLmgiCkBAIC00Miw2ICs0Miw4IEBACiAj
aW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1
ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCisjaW5jbHVkZSAiQ2Fs
Y0V4cHJlc3Npb25MZW5ndGguaCIKKyNpbmNsdWRlICJDYWxjRXhwcmVzc2lvbk9wZXJhdGlvbi5o
IgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rpb25WYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIgpJbmRleDogVG9vbHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjc4MjQwKQor
KysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjEt
MDUtMjkgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgorCisgICAgICAgIFNwbGl0IGNh
bGMoKSByZWxhdGVkIGZpbGVzIGludG8gMS1jbGFzcyBwZXIgZmlsZSBzdHJ1Y3R1cmUKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjQyMQorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwOgorICAgICAgICBVcGRhdGUgdGVz
dCB0byBpbmNsdWRlIGFkZGl0b25hbCBoZWFkZXIgbm93IG5lZWRlZC4KKwogMjAyMS0wNS0yOCAg
QWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFB1
bnljb2RlIGVuY29kZSBVKzBCRTYgd2hlbiBub3QgaW4gY29udGV4dCBvZiBvdGhlciBUYW1pbCBj
aGFyYWN0ZXJzCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ2FsY3Vs
YXRpb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL0NhbGN1bGF0aW9uVmFsdWUuY3BwCShyZXZpc2lvbiAyNzgyMzkpCisrKyBUb29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvQ2FsY3VsYXRpb25WYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNC0yMDIxIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMjUsNiArMjUsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAKKyNpbmNsdWRlIDxX
ZWJDb3JlL0NhbGNFeHByZXNzaW9uTm9kZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvQ2FsY3VsYXRp
b25WYWx1ZS5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>