<?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>113623</bug_id>
          
          <creation_ts>2013-03-29 16:14:54 -0700</creation_ts>
          <short_desc>fourthTier: FTL should have OSR exit</short_desc>
          <delta_ts>2013-04-13 00:36:56 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>113819</dependson>
    
    <dependson>113894</dependson>
    
    <dependson>113897</dependson>
    
    <dependson>113905</dependson>
    
    <dependson>114073</dependson>
    
    <dependson>114300</dependson>
    
    <dependson>114306</dependson>
    
    <dependson>114542</dependson>
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>866462</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 16:14:54 -0700</bug_when>
    <thetext>This will be soooooper fun.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866862</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-31 18:44:25 -0700</bug_when>
    <thetext>&lt;rdar://problem/13543692&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869298</commentid>
    <comment_count>2</comment_count>
      <attachid>196508</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-04 13:03:12 -0700</bug_when>
    <thetext>Created attachment 196508
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869394</commentid>
    <comment_count>3</comment_count>
      <attachid>196539</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-04 15:17:01 -0700</bug_when>
    <thetext>Created attachment 196539
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869487</commentid>
    <comment_count>4</comment_count>
      <attachid>196562</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-04 17:37:42 -0700</bug_when>
    <thetext>Created attachment 196562
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869506</commentid>
    <comment_count>5</comment_count>
      <attachid>196565</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-04 18:46:15 -0700</bug_when>
    <thetext>Created attachment 196565
more

It&apos;s getting pretty close.  But still lots more work to do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870138</commentid>
    <comment_count>6</comment_count>
      <attachid>196700</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-05 16:47:51 -0700</bug_when>
    <thetext>Created attachment 196700
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>870155</commentid>
    <comment_count>7</comment_count>
      <attachid>196704</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-05 17:11:32 -0700</bug_when>
    <thetext>Created attachment 196704
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872061</commentid>
    <comment_count>8</comment_count>
      <attachid>197166</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-09 13:48:53 -0700</bug_when>
    <thetext>Created attachment 197166
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>872626</commentid>
    <comment_count>9</comment_count>
      <attachid>197216</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-10 00:16:18 -0700</bug_when>
    <thetext>Created attachment 197216
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873123</commentid>
    <comment_count>10</comment_count>
      <attachid>197373</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-10 12:29:22 -0700</bug_when>
    <thetext>Created attachment 197373
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>873526</commentid>
    <comment_count>11</comment_count>
      <attachid>197502</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-10 21:10:41 -0700</bug_when>
    <thetext>Created attachment 197502
it might be done

I still need to compile it and stuff.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>874320</commentid>
    <comment_count>12</comment_count>
      <attachid>197706</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-11 18:18:49 -0700</bug_when>
    <thetext>Created attachment 197706
lol it compiles

I compiled the LLVM backend with LLVM and LLVM was happy.

Still haven&apos;t tested it, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875074</commentid>
    <comment_count>13</comment_count>
      <attachid>197914</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-12 17:35:00 -0700</bug_when>
    <thetext>Created attachment 197914
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875084</commentid>
    <comment_count>14</comment_count>
      <attachid>197914</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-04-12 19:02:25 -0700</bug_when>
    <thetext>Comment on attachment 197914
the patch

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

&gt; Source/JavaScriptCore/ftl/FTLExitThunkGenerator.cpp:53
&gt; +    move(TrustedImm32(index), GPRInfo::nonArgGPR0);

I am dubious as to how trusted this is, but until i have evidence that we can be coerced into planting a large number of these in succession i&apos;ll give it a pass.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875102</commentid>
    <comment_count>15</comment_count>
      <attachid>197920</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-12 23:33:57 -0700</bug_when>
    <thetext>Created attachment 197920
it runs all benchmarks

The only things I changed from the previous patch:

1) Fixed some calling convention goofs.

2) Made reoptimization work for FTL, which mostly required removing some incorrect assertions in CodeBlock.

3) Fixed CheckStructure, since it was generating wrong IR.

4) Added the FTL_NEW_BLOCK macro and started using it everywhere, it makes IR more readable when --verboseCompilation=true.

We can now run all of SunSpider, V8, and Kraken with the FTL enabled. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>875107</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-04-13 00:36:56 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/148347</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196508</attachid>
            <date>2013-04-04 13:03:12 -0700</date>
            <delta_ts>2013-04-04 15:17:01 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>32136</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3NjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEzLTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBoYXZlIE9TUiBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6
CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6
T1NSRXhpdEJhc2UpOgorICAgICAgICAoT1NSRXhpdEJhc2UpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OnJlcHJlc2VudGF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRWYWx1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0VmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpkZWFkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFjayk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
Ojphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFZhbHVlOjppc0luSlNTdGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0Nv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAg
ICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChPU1JF
eGl0KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExW
YWx1ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorCiAy
MDEzLTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91
cnRoVGllcjogcHV0IERGRyBkYXRhIGludG8gYSBERkc6OkpJVENvZGUsIGFuZCBwdXQgY29tbW9u
IERGRyBhbmQgRlRMIGRhdGEgaW50byBzb21ldGhpbmcgYWNjZXNzaWJsZSBmcm9tIGJvdGggREZH
OjpKSVRDb2RlIGFuZCBGVEw6OkpJVENvZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTUgKzM2LDEzIEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIE9TUkV4aXQ6Ok9TUkV4aXQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQg
c3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCi0gICAgOiBtX2pzVmFsdWVTb3Vy
Y2UoanNWYWx1ZVNvdXJjZSkKKyAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9jb2RlT3Jp
Z2luRm9yT1NSKQorICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBt
X3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQo
MCkKICAgICAsIG1fY29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKLSAgICAsIG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlKG1fY29kZU9yaWdpbikKICAgICAsIG1fcmVjb3ZlcnlJ
bmRleChyZWNvdmVyeUluZGV4KQogICAgICwgbV93YXRjaHBvaW50SW5kZXgoc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX2Nv
dW50KDApCiAgICAgLCBtX3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQogICAgICwgbV9sYXN0U2V0
T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7CkBAIC03MywyMyArNzEsNiBAQCB2b2lk
IE9TUkV4aXQ6OmNvcnJlY3RKdW1wKExpbmtCdWZmZXImIGxpCiAgICAgbV9wYXRjaGFibGVDb2Rl
T2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihsYWJlbCk7CiB9CiAKLWJvb2wgT1NSRXhpdDo6
Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJs
b2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQotewotICAgIGlmIChzdGF0aWNfY2Fz
dDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpIDw9IE9w
dGlvbnM6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0ZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRnJlcXVlbnRFeGl0U2l0ZSBleGl0U2l0ZTsKLSAgICAK
LSAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsKLSAgICAgICAgLy8gQ291bnQg
dGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJlIGluIHRoZSBjb2RlIGJs
b2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKLSAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB0aGV5
IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uLgot
ICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9raW5kKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCk7Ci0gICAgCi0gICAgcmV0dXJuIGJhc2VsaW5l
Q29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2sobV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJlcXVlbnRFeGl0U2l0ZShleGl0U2l0
ZSk7Ci19Ci0KIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZChCYXNpY0Jsb2NrKiBibG9j
aywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgY29uc3QgVmFsdWVSZWNv
dmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKICAgICAvLyBDaGVjayB0aGF0IGVpdGhlciB0aGUgY3Vy
cmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVjZWRpbmcgbm9kZSB3YXMgYQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHJldmlzaW9uIDE0NzYwOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAiREZHRXhp
dFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisjaW5jbHVkZSAiREZHT1NSRXhp
dEJhc2UuaCIKICNpbmNsdWRlICJERkdWYWx1ZVJlY292ZXJ5T3ZlcnJpZGUuaCIKICNpbmNsdWRl
ICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCIKQEAgLTg0LDcgKzg1LDcgQEAgcHJpdmF0ZToKIC8vCiAvLyBUaGlzIHN0cnVjdHVyZSBk
ZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0aXZlIHBhdGggYnkKIC8vIGdvaW5nIGlu
dG8gYmFzZWxpbmUgY29kZS4KLXN0cnVjdCBPU1JFeGl0IHsKK3N0cnVjdCBPU1JFeGl0IDogcHVi
bGljIE9TUkV4aXRCYXNlIHsKICAgICBPU1JFeGl0KEV4aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJVCosIHVuc2lnbmVkIHN0
cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4ID0gVUlOVF9NQVgpOwogICAgIAogICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CkBAIC05NCwyMSArOTUsMTAgQEAgc3RydWN0
IE9TUkV4aXQgewogCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OwogICAgIENv
ZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGU7CiAgICAgCiAgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4OwogICAgIHVuc2ln
bmVkIG1fd2F0Y2hwb2ludEluZGV4OwogICAgIAotICAgIEV4aXRLaW5kIG1fa2luZDsKLSAgICB1
aW50MzJfdCBtX2NvdW50OwotICAgIAotICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGUoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2Rl
QmxvY2spCi0gICAgewotICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3VudGFi
bGUobV9raW5kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIGNv
bnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2ZpbGVk
Q29kZUJsb2NrKTsKLSAgICB9Ci0KICAgICB2b2lkIHNldFBhdGNoYWJsZUNvZGVPZmZzZXQoTWFj
cm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXApOwogICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGdl
dFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKICAgICBDb2RlTG9jYXRpb25KdW1w
IGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7CkBAIC0xMjAsOSArMTEw
LDYgQEAgc3RydWN0IE9TUkV4aXQgewogICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOwogICAgIAog
ICAgIFJlZlB0cjxWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU+IG1fdmFsdWVSZWNvdmVyeU92ZXJyaWRl
OwotCi1wcml2YXRlOgotICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVT
bG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2Nr
KTsKIH07CiAKIHN0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8gewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0
QmFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKKworYm9vbCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhp
dFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrKQoreworICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29k
ZUJsb2NrLT5vc3JFeGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQcm9taW5lbmNlRm9y
RnJlcXVlbnRFeGl0U2l0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRnJl
cXVlbnRFeGl0U2l0ZSBleGl0U2l0ZTsKKyAgICAKKyAgICBpZiAobV9raW5kID09IEFyZ3VtZW50
c0VzY2FwZWQpIHsKKyAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNu
J3QgbWF0dGVyIHdoZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsK
KyAgICAgICAgLy8gdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRo
IGFueSBwYXJ0aWN1bGFyIGluc3RydWN0aW9uLgorICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50
RXhpdFNpdGUobV9raW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVu
dEV4aXRTaXRlKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2lu
ZCk7CisgICAgCisgICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxp
bmVDb2RlQmxvY2sobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2Nr
KS0+YWRkRnJlcXVlbnRFeGl0U2l0ZShleGl0U2l0ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBERkdPU1JFeGl0QmFzZV9oCisjZGVmaW5lIERGR09TUkV4aXRCYXNlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNs
dWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBQcm92aWRlcyBmb3IgdGhlIE9TUiBleGl0
IHByb2ZpbGluZyBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgY29tbW9uIGJldHdlZW4gdGhlIERGRwor
Ly8gYW5kIHRoZSBGVEwuCisKK3N0cnVjdCBPU1JFeGl0QmFzZSB7CisgICAgT1NSRXhpdEJhc2Uo
RXhpdEtpbmQga2luZCwgQ29kZU9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9raW5kKGtpbmQp
CisgICAgICAgICwgbV9jb3VudCgwKQorICAgICAgICAsIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIAorICAgIEV4aXRLaW5kIG1fa2luZDsKKyAg
ICB1aW50MzJfdCBtX2NvdW50OworICAgIAorICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luRm9y
RXhpdFByb2ZpbGU7CisKKyAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRl
KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQor
ICAgIHsKKyAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2luZElzQ291bnRhYmxlKG1fa2lu
ZCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBjb25zaWRlckFk
ZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJsb2NrLCBwcm9maWxlZENvZGVCbG9j
ayk7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVk
Q29kZUJsb2NrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8v
IEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdEJhc2VfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4
aXRBcmd1bWVudC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0QXJndW1lbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImFyZyIsIGFyZ3VtZW50KCksICIgYXMgIiwgZm9y
bWF0KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJn
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRB
cmd1bWVudC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExF
eGl0QXJndW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdEFyZ3Vt
ZW50X2gKKyNkZWZpbmUgRlRMRXhpdEFyZ3VtZW50X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5o
IgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK3N0cnVjdCBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiB7CisgICAgVmFs
dWVGb3JtYXQgZm9ybWF0OworICAgIHVuc2lnbmVkIGFyZ3VtZW50OworfTsKKworY2xhc3MgRXhp
dEFyZ3VtZW50IHsKK3B1YmxpYzoKKyAgICBFeGl0QXJndW1lbnQoKQorICAgIHsKKyAgICAgICAg
bV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPSBJbnZhbGlkVmFsdWVGb3JtYXQ7CisgICAgfQorICAg
IAorICAgIEV4aXRBcmd1bWVudChWYWx1ZUZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGFyZ3VtZW50
KQorICAgIHsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPSBmb3JtYXQ7CisgICAg
ICAgIG1fcmVwcmVzZW50YXRpb24uYXJndW1lbnQgPSBhcmd1bWVudDsKKyAgICB9CisgICAgCisg
ICAgZXhwbGljaXQgRXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHJlcHJl
c2VudGF0aW9uKQorICAgIHsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbiA9IHJlcHJlc2VudGF0
aW9uOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1f
cmVwcmVzZW50YXRpb24uZm9ybWF0ID09IEludmFsaWRWYWx1ZUZvcm1hdDsgfQorICAgIAorICAg
IFZhbHVlRm9ybWF0IGZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMp
OworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQ7CisgICAgfQorICAgIAor
ICAgIHVuc2lnbmVkIGFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhp
cyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmFyZ3VtZW50OworICAgIH0KKyAg
ICAKKyAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbigpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwcmVzZW50YXRpb247IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50
YXRpb24gbV9yZXByZXNlbnRhdGlvbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExFeGl0VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIEludmFsaWRFeGl0VmFs
dWU6CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICBvdXQucHJpbnQoIkRlYWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgi
QXJndW1lbnQoIiwgYXJndW1lbnQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQoIiwgY29uc3Rh
bnQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNr
OgorICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMRXhpdFZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFZhbHVlX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJGVExFeGl0QXJndW1lbnQuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KworLy8gVGhpcyBpcyBsaWtlIFZhbHVlUmVjb3ZlcnksIGJ1dCByZXNwZWN0cyB0aGUgd2F5IHRo
YXQgdGhlIEZUTCBkb2VzIE9TUgorLy8gZXhpdDogdGhlIGxpdmUgbm9uLWNvbnN0YW50IG5vbi1m
bHVzaGVkIHZhbHVlcyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cworLy8gdG8gYSBub3JldHVybiB0
YWlsIGNhbGwuIEV4aXRWYWx1ZSBpcyBoZW5jZSBtb3N0bHkgcmVzcG9uc2libGUgZm9yCisvLyB0
ZWxsaW5nIHVzIHRoZSBtYXBwaW5nIGJldHdlZW4gb3BlcmFuZHMgaW4gYnl0ZWNvZGUgYW5kIHRo
ZSBhcmd1bWVudHMgdG8KKy8vIHRoZSBjYWxsLgorCitlbnVtIEV4aXRWYWx1ZUtpbmQgeworICAg
IEludmFsaWRFeGl0VmFsdWUsCisgICAgRXhpdFZhbHVlRGVhZCwKKyAgICBFeGl0VmFsdWVBcmd1
bWVudCwKKyAgICBFeGl0VmFsdWVDb25zdGFudAorICAgIEV4aXRWYWx1ZUluSlNTdGFjaworfTsK
KworY2xhc3MgRXhpdFZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0VmFsdWUoKQorICAgICAgICA6
IG1fa2luZChJbnZhbGlkRXhpdFZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZEV4aXRWYWx1ZTsgfQor
ICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgZGVhZCgpCisgICAgeworICAgICAgICBFeGl0VmFs
dWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlRGVhZDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpT
U3RhY2soKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFjazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBjb25zdGFudChKU1ZhbHVlIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IEV4aXRWYWx1ZUNvbnN0YW50OworICAgICAgICByZXN1bHQudS5jb25zdGFudCA9IEpTVmFsdWU6
OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAg
IHN0YXRpYyBFeGl0VmFsdWUgYXJndW1lbnQoY29uc3QgRXhpdEFyZ3VtZW50JiBhcmd1bWVudCkK
KyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBFeGl0VmFsdWVBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0LnUuYXJndW1lbnQgPSBhcmd1bWVu
dC5yZXByZXNlbnRhdGlvbigpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAK
KyAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVEZWFk
OyB9CisgICAgYm9vbCBpc0luSlNTdGFjaygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0
VmFsdWVJbkpTU3RhY2s7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gRXhpdFZhbHVlQ29uc3RhbnQ7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnQ7IH0KKyAgICAKKyAgICBFeGl0
QXJndW1lbnQgYXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQXJndW1l
bnQoKSk7CisgICAgICAgIHJldHVybiBFeGl0QXJndW1lbnQodS5hcmd1bWVudCk7CisgICAgfQor
ICAgIAorICAgIEpTVmFsdWUgY29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzQ29uc3RhbnQoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS5jb25zdGFu
dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IAorcHJpdmF0ZToKKyAgICBFeGl0VmFsdWVLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAg
ICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIGFyZ3VtZW50OworICAgICAgICBFbmNvZGVk
SlNWYWx1ZSBjb25zdGFudDsKKyAgICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRWYWx1
ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1
ZS5oCShyZXZpc2lvbiAxNDc2MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZv
cm1hdHRlZFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFC
TEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJG
VExWYWx1ZUZvcm1hdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAg
LTQxLDE4ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIC8vIHVzZSB0
aGlzIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gc2F5IHdoYXQg
bm9kZSB0aGUgdmFsdWUgY2FtZQogLy8gZnJvbS4KIAotLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdr
d2FyZGx5IHNpbWlsYXIgdG8gRGF0YUZvcm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2Vw
dCB0aGF0Ci0vLyB1bmxpa2UgRGF0YUZvcm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBk
aXN0aW5ndWlzaGVzIGJldHdlZW4gVUludDMyIGFuZCBJbnQzMi4KLQotZW51bSBWYWx1ZUZvcm1h
dCB7Ci0gICAgSW52YWxpZFZhbHVlRm9ybWF0LAotICAgIFZhbHVlRm9ybWF0SW50MzIsCi0gICAg
VmFsdWVGb3JtYXRVSW50MzIsCi0gICAgVmFsdWVGb3JtYXRCb29sZWFuLAotICAgIFZhbHVlRm9y
bWF0SlNWYWx1ZSwKLSAgICBWYWx1ZUZvcm1hdERvdWJsZQotfTsKLQogY2xhc3MgRm9ybWF0dGVk
VmFsdWUgewogcHVibGljOgogICAgIEZvcm1hdHRlZFZhbHVlKCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZU
TE9TUkV4aXRfaAorI2RlZmluZSBGVExPU1JFeGl0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9y
bS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisj
aW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgor
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIK
KyNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAiT3Bl
cmFuZHMuaCIKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7Cisg
ICAgT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQsIFZhbHVlRm9ybWF0IHByb2ZpbGVWYWx1ZUZv
cm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKKyAgICAgICAgQ29kZU9yaWdpbiwg
aW50IGxhc3RTZXRPcGVyYW5kKTsKKyAgICAKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9j
b2RlOworICAgIAorICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgZXhpdCBjYWxsIG1h
eSBiZSBhIHZhbHVlIHdlIHdpc2ggdG8gcHJvZmlsZS4KKyAgICAvLyBJZiB0aGF0J3MgdGhlIGNh
c2UsIHRoZSBmb3JtYXQgd2lsbCBiZSBub3QgSW52YWxpZCBhbmQgd2UnbGwgaGF2ZSBhCisgICAg
Ly8gbWV0aG9kIG9mIGdldHRpbmcgYSB2YWx1ZSBwcm9maWxlLgorICAgIFZhbHVlRm9ybWF0IG1f
cHJvZmlsZVZhbHVlRm9ybWF0OworICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92
YWx1ZVByb2ZpbGU7CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgCisg
ICAgLy8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhpcyBl
eGl0LgorICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKKyAgICBMVmFsdWUgbV9l
eGl0U3R1YkFkZHJlc3M7IC8vIEZJWE1FOiBNb3ZlIHRoaXMgb3V0IG9mIE9TUkV4aXQsIHNvIGl0
IGRvZXNuJ3QgcG9sbHV0ZSBDb2RlQmxvY2suCisgICAgCisgICAgaW50IG1fbGFzdFNldE9wZXJh
bmQ7CisgICAgCisgICAgT3BlcmFuZHM8RXhpdFZhbHVlPiBtX3ZhbHVlczsKKyAgICAKKyAgICB2
b2lkIHNldFBhdGNoYWJsZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAp
OworICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sq
IGZ0bENvZGVCbG9jaykgY29uc3Q7CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKEJh
c2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBG
b3JtYXR0ZWRWYWx1ZSYgdmFsdWUpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExWYWx1ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBWYWx1ZUZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQp
IHsKKyAgICBjYXNlIEludmFsaWRWYWx1ZUZvcm1hdDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZh
bGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAg
ICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVG
b3JtYXRVSW50MzI6CisgICAgICAgIG91dC5wcmludCgiVUludDMyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29s
ZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZToKKyAg
ICAgICAgb3V0LnByaW50KCJKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZh
bHVlRm9ybWF0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlRm9ybWF0X2gKKyNkZWZpbmUgRlRMVmFs
dWVGb3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFy
IHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAorLy8gdW5s
aWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBi
ZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCisKK2VudW0gVmFsdWVGb3JtYXQgeworICAgIEludmFs
aWRWYWx1ZUZvcm1hdCwKKyAgICBWYWx1ZUZvcm1hdEludDMyLAorICAgIFZhbHVlRm9ybWF0VUlu
dDMyLAorICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKKyAgICBWYWx1ZUZvcm1hdEpTVmFsdWUsCisg
ICAgVmFsdWVGb3JtYXREb3VibGUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
bmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
RlRMOjpWYWx1ZUZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExWYWx1ZUZvcm1hdF9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196539</attachid>
            <date>2013-04-04 15:17:01 -0700</date>
            <delta_ts>2013-04-04 17:37:42 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47117</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3NjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEzLTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBoYXZlIE9TUiBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6
CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6
T1NSRXhpdEJhc2UpOgorICAgICAgICAoT1NSRXhpdEJhc2UpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OnJlcHJlc2VudGF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRWYWx1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0VmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpkZWFkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFjayk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
Ojphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFZhbHVlOjppc0luSlNTdGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0Nv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAg
ICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChPU1JF
eGl0KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExW
YWx1ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorCiAy
MDEzLTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91
cnRoVGllcjogcHV0IERGRyBkYXRhIGludG8gYSBERkc6OkpJVENvZGUsIGFuZCBwdXQgY29tbW9u
IERGRyBhbmQgRlRMIGRhdGEgaW50byBzb21ldGhpbmcgYWNjZXNzaWJsZSBmcm9tIGJvdGggREZH
OjpKSVRDb2RlIGFuZCBGVEw6OkpJVENvZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmNwcAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTUgKzM2LDEzIEBA
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIE9TUkV4aXQ6Ok9TUkV4aXQoRXhp
dEtpbmQga2luZCwgSlNWYWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdB
VmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQg
c3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXgpCi0gICAgOiBtX2pzVmFsdWVTb3Vy
Y2UoanNWYWx1ZVNvdXJjZSkKKyAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9jb2RlT3Jp
Z2luRm9yT1NSKQorICAgICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBt
X3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQo
MCkKICAgICAsIG1fY29kZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKLSAgICAsIG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlKG1fY29kZU9yaWdpbikKICAgICAsIG1fcmVjb3ZlcnlJ
bmRleChyZWNvdmVyeUluZGV4KQogICAgICwgbV93YXRjaHBvaW50SW5kZXgoc3RkOjpudW1lcmlj
X2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQotICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX2Nv
dW50KDApCiAgICAgLCBtX3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQogICAgICwgbV9sYXN0U2V0
T3BlcmFuZChqaXQtPm1fbGFzdFNldE9wZXJhbmQpCiB7CkBAIC03Myw1NyArNzEsMTQgQEAgdm9p
ZCBPU1JFeGl0Ojpjb3JyZWN0SnVtcChMaW5rQnVmZmVyJiBsaQogICAgIG1fcGF0Y2hhYmxlQ29k
ZU9mZnNldCA9IGxpbmtCdWZmZXIub2Zmc2V0T2YobGFiZWwpOwogfQogCi1ib29sIE9TUkV4aXQ6
OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKLXsKLSAgICBpZiAoc3RhdGljX2Nh
c3Q8ZG91YmxlPihtX2NvdW50KSAvIGRmZ0NvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSA8PSBP
cHRpb25zOjpvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIAotICAgIEZyZXF1ZW50RXhpdFNpdGUgZXhpdFNpdGU7Ci0gICAg
Ci0gICAgaWYgKG1fa2luZCA9PSBBcmd1bWVudHNFc2NhcGVkKSB7Ci0gICAgICAgIC8vIENvdW50
IHRoaXMgb25lIGdsb2JhbGx5LiBJdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBpbiB0aGUgY29kZSBi
bG9jayB0aGUgYXJndW1lbnRzIGV4Y2FwZWQ7Ci0gICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgdGhl
eSBkaWQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFydGljdWxhciBpbnN0cnVjdGlvbi4K
LSAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1fa2luZCk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZS5ieXRlY29kZUluZGV4LCBtX2tpbmQpOwotICAgIAotICAgIHJldHVybiBiYXNlbGlu
ZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlLCBwcm9maWxlZENvZGVCbG9jayktPmFkZEZyZXF1ZW50RXhpdFNpdGUoZXhpdFNp
dGUpOwotfQotCiB2b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQoQmFzaWNCbG9jayogYmxv
Y2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGNvbnN0IFZhbHVlUmVj
b3ZlcnkmIHZhbHVlUmVjb3ZlcnkpCiB7Ci0gICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1
cnJlbnQgbm9kZSBpcyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKLSAg
ICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHBy
b3ZpZGVkIGEgdmFsdWVSZWNvdmVyeS4KLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAotICAgICAg
ICAmJiAhdmFsdWVSZWNvdmVyeQotICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92
SGludCgpKSB7Ci0gICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAt
IDEpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNN
b3ZIaW50KCkpOwotICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29k
ZU9yaWdpbiA9PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7Ci0gICAgfQotICAgIAotICAgIC8v
IEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uLiBB
bHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBoaW50Ci0gICAgLy8gb24gdGhpcyBub2RlLgotICAgIHVu
c2lnbmVkIGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7Ci0gICAgTm9kZSogbm9kZSA9IDA7
Ci0gICAgTm9kZSogbGFzdE1vdkhpbnQgPSAwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYg
KGluZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlz
IGFuIGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9u
LiBUaGlzIGlzIHNhZmUKLSAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBo
YXMgaXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bwotICAgICAg
ICAgICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCi0gICAgICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSA9PSBKdW1wKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAg
ICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGlmIChub2RlLT5jb250
YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKLSAgICAgICAg
ICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKLSAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0g
Y3VycmVudE5vZGUtPmNvZGVPcmlnaW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaW5k
ZXhJbkJsb2NrKys7Ci0gICAgfQotICAgIAorICAgIE5vZGUqIG5vZGU7CisgICAgTm9kZSogbGFz
dE1vdkhpbnQ7CisgICAgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3VycmVu
dE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZVJlY292ZXJ5KTsKKwogICAgIEFTU0VSVChub2RlLT5j
b2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAKICAgICBtX2NvZGVP
cmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwogICAgIAogICAgIGlmICghdmFsdWVSZWNvdmVyeSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxNDc2
MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRG
R0V4aXRQcm9maWxlLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR09T
UkV4aXRCYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgiCiAjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlLmgiCkBAIC04NCw3ICs4NSw3IEBAIHByaXZhdGU6CiAvLwogLy8gVGhpcyBzdHJ1Y3R1
cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CiAvLyBnb2lu
ZyBpbnRvIGJhc2VsaW5lIGNvZGUuCi1zdHJ1Y3QgT1NSRXhpdCB7CitzdHJ1Y3QgT1NSRXhpdCA6
IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1ZVNvdXJj
ZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25l
ZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IFVJTlRfTUFYKTsKICAgICAK
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwpAQCAtOTQsMjEgKzk1LDEwIEBAIHN0
cnVjdCBPU1JFeGl0IHsKIAogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKICAg
ICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZv
ckV4aXRQcm9maWxlOwogICAgIAogICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKICAgICB1
bnNpZ25lZCBtX3dhdGNocG9pbnRJbmRleDsKICAgICAKLSAgICBFeGl0S2luZCBtX2tpbmQ7Ci0g
ICAgdWludDMyX3QgbV9jb3VudDsKLSAgICAKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVx
dWVudEV4aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVk
Q29kZUJsb2NrKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2luZElzQ291
bnRhYmxlKG1fa2luZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVy
biBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJsb2NrLCBwcm9m
aWxlZENvZGVCbG9jayk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRQYXRjaGFibGVDb2RlT2Zmc2V0
KE1hY3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVt
cCBnZXRQYXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7CiAgICAgQ29kZUxvY2F0aW9u
SnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwpAQCAtMTIwLDkg
KzExMCw2IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAg
ICAKICAgICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVy
cmlkZTsKLQotcHJpdmF0ZToKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRT
aXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jayk7CiB9OwogCiBzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NS
RXhpdEJhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKK2Jvb2wgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVu
dEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxl
ZENvZGVCbG9jaykKK3sKKyAgICBpZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAvIGRm
Z0NvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSA8PSBPcHRpb25zOjpvc3JFeGl0UHJvbWluZW5j
ZUZvckZyZXF1ZW50RXhpdFNpdGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAg
IEZyZXF1ZW50RXhpdFNpdGUgZXhpdFNpdGU7CisgICAgCisgICAgaWYgKG1fa2luZCA9PSBBcmd1
bWVudHNFc2NhcGVkKSB7CisgICAgICAgIC8vIENvdW50IHRoaXMgb25lIGdsb2JhbGx5LiBJdCBk
b2Vzbid0IG1hdHRlciB3aGVyZSBpbiB0aGUgY29kZSBibG9jayB0aGUgYXJndW1lbnRzIGV4Y2Fw
ZWQ7CisgICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgdGhleSBkaWQgaXMgbm90IGFzc29jaWF0ZWQg
d2l0aCBhbnkgcGFydGljdWxhciBpbnN0cnVjdGlvbi4KKyAgICAgICAgZXhpdFNpdGUgPSBGcmVx
dWVudEV4aXRTaXRlKG1fa2luZCk7CisgICAgfSBlbHNlCisgICAgICAgIGV4aXRTaXRlID0gRnJl
cXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4LCBt
X2tpbmQpOworICAgIAorICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJh
c2VsaW5lQ29kZUJsb2NrKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBwcm9maWxlZENvZGVC
bG9jayktPmFkZEZyZXF1ZW50RXhpdFNpdGUoZXhpdFNpdGUpOworfQorCitib29sIE9TUkV4aXRC
YXNlOjpkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKAorICAgIEJhc2ljQmxvY2sqIGJsb2Nr
LCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVlUmVj
b3ZlcnksCisgICAgTm9kZSomIG5vZGUsIE5vZGUqJiBsYXN0TW92SGludCkKK3sKKyAgICAvLyBD
aGVjayB0aGF0IGVpdGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBw
cmVjZWRpbmcgbm9kZSB3YXMgYQorICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29kZSBv
cmlnaW4sIG9yIHRoYXQgd2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5LgorICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVECisgICAgICAgICYmICFoYXNWYWx1ZVJlY292ZXJ5CisgICAgICAgICYm
ICFjdXJyZW50Tm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpIHsKKyAgICAgICAgTm9kZSogc2V0TG9j
YWwgPSBibG9jay0+YXQobm9kZUluZGV4IC0gMSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0
TG9jYWwsIHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQoc2V0TG9jYWwsIHNldExvY2FsLT5jb2RlT3JpZ2luID09IGN1cnJlbnROb2RlLT5jb2RlT3Jp
Z2luKTsKKyAgICB9CisgICAgCisgICAgLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIG5l
eHQgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24uIEFsc28gdHJhY2sgdGhlIGxhc3QgbW92IGhpbnQKKyAg
ICAvLyBvbiB0aGlzIG5vZGUuCisgICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrID0gbm9kZUluZGV4
ICsgMTsKKyAgICBub2RlID0gMDsKKyAgICBsYXN0TW92SGludCA9IDA7CisgICAgZm9yICg7Oykg
eworICAgICAgICBpZiAoaW5kZXhJbkJsb2NrID09IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgYW4gaW5saW5lIHJldHVybi4gR2l2ZSB1cCBhbmQgZG8gYSBiYWNrd2Fy
ZHMgc3BlY3VsYXRpb24uIFRoaXMgaXMgc2FmZQorICAgICAgICAgICAgLy8gYmVjYXVzZSBhbiBp
bmxpbmUgcmV0dXJuIGhhcyBpdHMgb3duIGJ5dGVjb2RlIGluZGV4IGFuZCBpdCdzIGFsd2F5cyBz
YWZlIHRvCisgICAgICAgICAgICAvLyByZWV4ZWN1dGUgdGhhdCBieXRlY29kZS4KKyAgICAgICAg
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgICAgIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAg
ICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zTW92SGludCgpICYmIG5vZGUtPmNoaWxkMSgpID09IGN1
cnJlbnROb2RlKQorICAgICAgICAgICAgbGFzdE1vdkhpbnQgPSBub2RlOworICAgICAgICBpZiAo
bm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBpbmRleEluQmxvY2srKzsKKyAgICB9CisgICAgCisgICAgQVNTRVJU
KG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOworICAgIHJldHVy
biB0cnVlOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
QmFzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dEJhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdEJhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdEJhc2Vf
aAorI2RlZmluZSBERkdPU1JFeGl0QmFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1
ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
KworLy8gUHJvdmlkZXMgZm9yIHRoZSBPU1IgZXhpdCBwcm9maWxpbmcgZnVuY3Rpb25hbGl0eSB0
aGF0IGlzIGNvbW1vbiBiZXR3ZWVuIHRoZSBERkcKKy8vIGFuZCB0aGUgRlRMLgorCitzdHJ1Y3Qg
T1NSRXhpdEJhc2UgeworICAgIE9TUkV4aXRCYXNlKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4g
b3JpZ2luKQorICAgICAgICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1fY291bnQoMCkKKyAg
ICAgICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShvcmlnaW4pCisgICAgeworICAgIH0K
KyAgICAKKyAgICBFeGl0S2luZCBtX2tpbmQ7CisgICAgdWludDMyX3QgbV9jb3VudDsKKyAgICAK
KyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOworCisgICAgYm9vbCBj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywg
Q29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmICghbV9jb3Vu
dCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93
KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KKyAgICAKKyAgICAvLyBS
ZXR1cm5zIHRydWUgaWYgdGhlIGZvcndhcmQgY29udmVyc2lvbiBpcyByZWFsbHkgbmVlZGVkLgor
ICAgIGJvb2wgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKKyAgICAgICAgQmFzaWNCbG9j
ayosIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGJvb2wgaGFzVmFsdWVS
ZWNvdmVyeSwKKyAgICAgICAgTm9kZSomIG5leHRCQ05vZGUsIE5vZGUqJiBsYXN0TW92SGludCk7
CisKK3ByaXZhdGU6CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sp
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFeGl0QmFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50
LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgeworCit2b2lkIEV4aXRBcmd1bWVudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiYXJnIiwgYXJndW1lbnQoKSwgIiBhcyAiLCBmb3JtYXQoKSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVu
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJndW1lbnRfaAorI2Rl
ZmluZSBGVExFeGl0QXJndW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0LmgiCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
Kworc3RydWN0IEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHsKKyAgICBWYWx1ZUZvcm1hdCBm
b3JtYXQ7CisgICAgdW5zaWduZWQgYXJndW1lbnQ7Cit9OworCitjbGFzcyBFeGl0QXJndW1lbnQg
eworcHVibGljOgorICAgIEV4aXRBcmd1bWVudCgpCisgICAgeworICAgICAgICBtX3JlcHJlc2Vu
dGF0aW9uLmZvcm1hdCA9IEludmFsaWRWYWx1ZUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgRXhp
dEFyZ3VtZW50KFZhbHVlRm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgYXJndW1lbnQpCisgICAgewor
ICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgbV9yZXBy
ZXNlbnRhdGlvbi5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBFeGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24p
CisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb247CisgICAg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9yZXByZXNlbnRh
dGlvbi5mb3JtYXQgPT0gSW52YWxpZFZhbHVlRm9ybWF0OyB9CisgICAgCisgICAgVmFsdWVGb3Jt
YXQgZm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgICAg
IHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdDsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgYXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uYXJndW1lbnQ7CisgICAgfQorICAgIAorICAgIEV4
aXRBcmd1bWVudCB3aXRoRm9ybWF0KFZhbHVlRm9ybWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAg
IHJldHVybiBFeGl0QXJndW1lbnQoZm9ybWF0LCBhcmd1bWVudCgpKTsKKyAgICB9CisgICAgCisg
ICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24oKSBjb25zdCB7IHJl
dHVybiBtX3JlcHJlc2VudGF0aW9uOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9u
IG1fcmVwcmVzZW50YXRpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRBcmd1bWVudF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhp
dFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBGVEwgeworCit2b2lkIEV4aXRWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBJbnZhbGlkRXhpdFZhbHVlOgor
ICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RXhpdFZhbHVlRGVhZDoKKyAgICAgICAgb3V0LnByaW50KCJEZWFkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIkFyZ3Vt
ZW50KCIsIGV4aXRBcmd1bWVudCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBF
eGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCgiLCBjb25zdGFu
dCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6
CisgICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBGVExFeGl0VmFsdWVfaAorI2RlZmluZSBGVExFeGl0VmFsdWVfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkZUTEV4aXRBcmd1bWVudC5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
CisvLyBUaGlzIGlzIGxpa2UgVmFsdWVSZWNvdmVyeSwgYnV0IHJlc3BlY3RzIHRoZSB3YXkgdGhh
dCB0aGUgRlRMIGRvZXMgT1NSCisvLyBleGl0OiB0aGUgbGl2ZSBub24tY29uc3RhbnQgbm9uLWZs
dXNoZWQgdmFsdWVzIGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzCisvLyB0byBhIG5vcmV0dXJuIHRh
aWwgY2FsbC4gRXhpdFZhbHVlIGlzIGhlbmNlIG1vc3RseSByZXNwb25zaWJsZSBmb3IKKy8vIHRl
bGxpbmcgdXMgdGhlIG1hcHBpbmcgYmV0d2VlbiBvcGVyYW5kcyBpbiBieXRlY29kZSBhbmQgdGhl
IGFyZ3VtZW50cyB0bworLy8gdGhlIGNhbGwuCisKK2VudW0gRXhpdFZhbHVlS2luZCB7CisgICAg
SW52YWxpZEV4aXRWYWx1ZSwKKyAgICBFeGl0VmFsdWVEZWFkLAorICAgIEV4aXRWYWx1ZUFyZ3Vt
ZW50LAorICAgIEV4aXRWYWx1ZUNvbnN0YW50CisgICAgRXhpdFZhbHVlSW5KU1N0YWNrCit9Owor
CitjbGFzcyBFeGl0VmFsdWUgeworcHVibGljOgorICAgIEV4aXRWYWx1ZSgpCisgICAgICAgIDog
bV9raW5kKEludmFsaWRFeGl0VmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkRXhpdFZhbHVlOyB9Cisg
ICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBkZWFkKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1
ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVEZWFkOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGluSlNT
dGFjaygpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisg
ICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
RXhpdFZhbHVlQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC51LmNvbnN0YW50ID0gSlNWYWx1ZTo6
ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAg
c3RhdGljIEV4aXRWYWx1ZSBleGl0QXJndW1lbnQoY29uc3QgRXhpdEFyZ3VtZW50JiBhcmd1bWVu
dCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBFeGl0VmFsdWVBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0LnUuYXJndW1lbnQgPSBhcmd1
bWVudC5yZXByZXNlbnRhdGlvbigpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAg
ICAKKyAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAg
ICAKKyAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVE
ZWFkOyB9CisgICAgYm9vbCBpc0luSlNTdGFjaygpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBF
eGl0VmFsdWVJbkpTU3RhY2s7IH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gRXhpdFZhbHVlQ29uc3RhbnQ7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnQ7IH0KKyAgICAKKyAgICBF
eGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gRXhpdEFyZ3VtZW50KHUuYXJndW1lbnQpOwor
ICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0NvbnN0YW50KCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUu
Y29uc3RhbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhpdFZhbHVlS2luZCBtX2tpbmQ7CisgICAgdW5pb24g
eworICAgICAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiBhcmd1bWVudDsKKyAgICAgICAg
RW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7CisgICAgfSB1OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExF
eGl0VmFsdWVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0
dGVkVmFsdWUuaAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5j
bHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCkBAIC00MSwxOCArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAv
LyB1c2UgdGhpcyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIHNh
eSB3aGF0IG5vZGUgdGhlIHZhbHVlIGNhbWUKIC8vIGZyb20uCiAKLS8vIE5vdGUgdGhhdCB0aGlz
IGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlND
LCBleGNlcHQgdGhhdAotLy8gdW5saWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVy
eSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCi0KLWVudW0gVmFs
dWVGb3JtYXQgewotICAgIEludmFsaWRWYWx1ZUZvcm1hdCwKLSAgICBWYWx1ZUZvcm1hdEludDMy
LAotICAgIFZhbHVlRm9ybWF0VUludDMyLAotICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKLSAgICBW
YWx1ZUZvcm1hdEpTVmFsdWUsCi0gICAgVmFsdWVGb3JtYXREb3VibGUKLX07Ci0KIGNsYXNzIEZv
cm1hdHRlZFZhbHVlIHsKIHB1YmxpYzoKICAgICBGb3JtYXR0ZWRWYWx1ZSgpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE0NzYwOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDYgKzQyLDExIEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAgICAgTExWTURpc3Bv
c2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUpOwogfQogCit2b2lkIEpJVENvZGU6OmluaXRpYWxp
emVFeGl0VGh1bmtzKENvZGVSZWYgZXhpdFRodW5rcykKK3sKKyAgICBtX2V4aXRUaHVua3MgPSBl
eGl0VGh1bmtzOworfQorCiB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVDb2RlKExMVk1FeGVjdXRp
b25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbmdpbmUg
PSBlbmdpbmU7CkBAIC05Nyw2ICsxMDIsMTEgQEAgYm9vbCBKSVRDb2RlOjpjb250YWlucyh2b2lk
KikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0NvZGVQdHIgSklUQ29kZTo6ZXhpdFRodW5rcygp
Cit7CisgICAgcmV0dXJuIG1fZXhpdFRodW5rcy5jb2RlKCk7Cit9CisKIEpJVENvZGUqIEpJVENv
ZGU6OmZ0bCgpCiB7CiAgICAgcmV0dXJuIHRoaXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEyICs0OCwxNiBAQCBw
dWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKICAg
ICAKKyAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQgaW5p
dGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiwgQ29kZVJlZiBlbnRyeXBvaW50KTsK
ICAgICAKKyAgICBDb2RlUHRyIGV4aXRUaHVua3MoKTsKKyAgICAKICAgICBKSVRDb2RlKiBmdGwo
KTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIAogICAgIERGRzo6Q29t
bW9uRGF0YSBjb21tb247CisgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7
CiAgICAgCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB1c2Ugb3VyIG93biBK
SVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNob3VsZG4ndCBoYXZlIHRvCkBAIC02MSw2ICs2
NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzYxOQogICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgbV9lbmdpbmU7CiAgICAg
Q29kZVJlZiBtX2VudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBtX2V4aXRUaHVua3M7CiB9OwogCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK09TUkV4aXQ6Ok9TUkV4aXQoCisgICAgRXhp
dEtpbmQgZXhpdEtpbmQsIFZhbHVlRm9ybWF0IHByb2ZpbGVWYWx1ZUZvcm1hdCwKKyAgICBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgQ29kZU9yaWdpbiBjb2RlT3Jp
Z2luLCBpbnQgbGFzdFNldE9wZXJhbmQsCisgICAgTFZhbHVlIGV4aXRTdHViQWRkcmVzcykKKyAg
ICA6IE9TUkV4aXRCYXNlKGV4aXRLaW5kLCBjb2RlT3JpZ2luKQorICAgICwgbV9wcm9maWxlVmFs
dWVGb3JtYXQocHJvZmlsZVZhbHVlRm9ybWF0KQorICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQ
cm9maWxlKQorICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgLCBtX3BhdGNoYWJs
ZUNvZGVPZmZzZXQoMCkKKyAgICAsIG1fZXhpdFN0dWJBZGRyZXNzKGV4aXRTdHViQWRkcmVzcykK
KyAgICAsIG1fbGFzdFNldE9wZXJhbmQobGFzdFNldE9wZXJhbmQpCit7Cit9CisKK3ZvaWQgT1NS
RXhpdDo6c2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBqdW1wKQoreworICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGp1bXAubV9qdW1wLm1fbGFi
ZWwubV9vZmZzZXQ7Cit9CisKK0NvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9u
Rm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4g
Q29kZUxvY2F0aW9uSnVtcCgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAg
ICAgICAgICBmdGxDb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZnRsKCktPmV4aXRUaHVua3MoKS5k
YXRhTG9jYXRpb24oKSkgKworICAgICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQpOworfQorCit2
b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQoCisgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9j
aywgREZHOjpOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LAorICAgIGNvbnN0
IEZvcm1hdHRlZFZhbHVlICZ2YWx1ZSwgVmVjdG9yPExWYWx1ZT4mIGFyZ3VtZW50cykKK3sKKyAg
ICBOb2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGRvU2VhcmNoRm9yRm9y
d2FyZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNv
dmVyeSk7CisKKyAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29k
ZU9yaWdpbik7CisgICAgCisgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAg
ICAKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG92ZXJy
aWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7CisgICAgbV9sYXN0U2V0T3BlcmFu
ZCA9IG92ZXJyaWRkZW5PcGVyYW5kOworICAgIAorICAgIC8vIElzIHRoZSB2YWx1ZSBmb3IgdGhp
cyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZXhpdCwgb3IgaXMK
KyAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8gSWYgaXQncyBhbiBhcmd1bWVudCBhbHJlYWR5LCB0
aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsKKyAgICAvLyBvdGhlcndpc2UgYWRkIGFub3RoZXIg
YXJndW1lbnQuCisgICAgaWYgKG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5pc0FyZ3VtZW50
KCkpIHsKKyAgICAgICAgRXhpdEFyZ3VtZW50IGFyZ3VtZW50ID0gbV92YWx1ZXNbb3ZlcnJpZGRl
bk9wZXJhbmRdLmV4aXRBcmd1bWVudCgpOworICAgICAgICBhcmd1bWVudHNbZXhpdEFyZ3VtZW50
LmFyZ3VtZW50KCldID0gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgbV92YWx1ZXNbb3ZlcnJpZGRl
bk9wZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAgICAgICAgICBleGl0QXJn
dW1lbnQud2l0aEZvcm1hdCh2YWx1ZS5mb3JtYXQoKSkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICBh
cmd1bWVudHMuYXBwZW5kKHZhbHVlLnZhbHVlKCkpOworICAgIG1fdmFsdWVzW21fbGFzdFNldE9w
ZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAgICAgIEV4aXRBcmd1bWVudCh2
YWx1ZS5mb3JtYXQoKSwgYXJndW1lbnQpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPU1JF
eGl0X2gKKyNkZWZpbmUgRlRMT1NSRXhpdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1
ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKKyNpbmNs
dWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5j
bHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUgIk9wZXJhbmRz
LmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworLy8gVHJhY2tzIG9uZSBPU1IgZXhpdCBzaXRlIHdpdGhpbiB0aGUgRlRMIEpJ
VC4gT1NSIGV4aXQgaW4gRlRMIHdvcmtzIGJ5IGRlY29uc3RydWN0aW5nCisvLyB0aGUgY3Jhenkg
dGhhdCBpcyBPU1IgZG93biB0byBzaW1wbGUgU1NBIENGRyBwcmltaXRpdmVzIHRoYXQgYW55IGNv
bXBpbGVyIGJhY2tlbmQKKy8vIChpbmNsdWRpbmcgb2YgY291cnNlIExMVk0pIGNhbiBncm9rIGFu
ZCBkbyBtZWFuaW5nZnVsIHRoaW5ncyB0by4gRXhjZXB0IGZvcgorLy8gd2F0Y2hwb2ludC1iYXNl
ZCBleGl0cywgd2hpY2ggaGF2ZW4ndCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCAoc2VlIHdlYmtpdC5v
cmcvYi8xMTM2NDcpLAorLy8gYW4gZXhpdCBpcyBqdXN0IGEgY29uZGl0aW9uYWwgYnJhbmNoIGlu
IHRoZSBlbWl0dGVkIGNvZGUgd2hlcmUgb25lIGRlc3RpbmF0aW9uIGlzIHRoZQorLy8gY29udGlu
dWF0aW9uIGFuZCB0aGUgb3RoZXIgaXMgYSBiYXNpYyBibG9jayB0aGF0IHBlcmZvcm1zIGEgbm8t
cmV0dXJuIHRhaWwtY2FsbCB0byBhbgorLy8gZXhpdCB0aHVuay4gVGhpcyB0aHVuayB0YWtlcyBh
cyBpdHMgYXJndW1lbnRzIHRoZSBsaXZlIG5vbi1jb25zdGFudAorLy8gbm90LWFscmVhZHktYWNj
b3VudGVkLWZvciBieXRlY29kZSBzdGF0ZS4gVG8gYXBwcmVjaWF0ZSBob3cgdGhpcyB3b3JrcyBj
b25zaWRlciB0aGUKKy8vIGZvbGxvd2luZyBKYXZhU2NyaXB0IHByb2dyYW0sIGFuZCBpdHMgbG93
ZXJpbmcgZG93biB0byBMTFZNIElSIGluY2x1ZGluZyB0aGUgcmVsZXZhbnQKKy8vIGV4aXRzOgor
Ly8KKy8vIGZ1bmN0aW9uIGZvbyhvKSB7CisvLyAgICAgdmFyIGEgPSBvLmE7IC8vIHByZWRpY3Rl
ZCBpbnQKKy8vICAgICB2YXIgYiA9IG8uYjsKKy8vICAgICB2YXIgYyA9IG8uYzsgLy8gTkIgdGhp
cyBpcyBkZWFkCisvLyAgICAgYSA9IGEgfCA1OyAvLyBvdXIgZXhhbXBsZSBPU1IgZXhpdDogbmVl
ZCB0byBjaGVjayBpZiBhIGlzIGFuIGludAorLy8gICAgIHJldHVybiBhICsgYjsKKy8vIH0KKy8v
CisvLyBKdXN0IGNvbnNpZGVyIHRoZSAiYSB8IDUiLiBJbiB0aGUgREZHIElSLCB0aGlzIGxvb2tz
IGxpa2U6CisvLworLy8gQml0T3IoQ2hlY2s6SW50MzI6QGEsIEludDMyOjUpCisvLworLy8gV2hl
cmUgQGEgaXMgdGhlIG5vZGUgZm9yIHRoZSBHZXRMb2NhbCBub2RlIHRoYXQgZ2V0cyB0aGUgdmFs
dWUgb2YgdGhlICdhJyB2YXJpYWJsZS4KKy8vIENvbmNlcHR1YWxseSwgdGhpcyBub2RlIGNhbiBi
ZSBmdXJ0aGVyIGJyb2tlbiBkb3duIHRvIHRoZSBmb2xsb3dpbmcgKG5vdGUgdGhhdCB0aGlzCisv
LyBwYXJ0aWN1bGFyIGxvd2VyaW5nIG5ldmVyIGFjdHVhbGx5IGhhcHBlbnMgLSB3ZSBza2lwIHRo
aXMgc3RlcCBhbmQgZ28gc3RyYWlnaHQgdG8KKy8vIExMVk0gSVIgLSBidXQgaXQncyBzdGlsbCB1
c2VmdWwgdG8gc2VlIHRoaXMpOgorLy8KKy8vIGV4aXRJZihAYSBpcyBub3QgaW50MzIpOworLy8g
Y29udGludWF0aW9uOworLy8KKy8vIFdoZXJlICdleGl0SWYoKScgaXMgYSBmdW5jdGlvbiB0aGF0
IHdpbGwgZXhpdCBpZiB0aGUgYXJndW1lbnQgaXMgdHJ1ZSwgYW5kCisvLyAnY29udGludWF0aW9u
JyBpcyB0aGUgc3R1ZmYgdGhhdCB3ZSB3aWxsIGRvIGFmdGVyIHRoZSBleGl0SWYoKSBjaGVjay4g
KE5vdGUgdGhhdAorLy8gRlRMIHJlZmVycyB0byAnZXhpdElmKCknIGFzICdzcGVjdWxhdGUoKScs
IHdoaWNoIGlzIGluIGxpbmUgd2l0aCBERkcgdGVybWlub2xvZ3kuKQorLy8gVGhpcyB0aGVuIGdl
dHMgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyBMTFZNIElSLCBhc3N1bWluZyB0aGF0ICUw
IGlzIHRoZSBMTFZNCisvLyB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHZhcmlhYmxlICdhJywgYW5k
ICUxIGlzIHRoZSBMTFZNIHZhbHVlIGZvciB2YXJpYWJsZSAnYic6CisvLworLy8gICAlMiA9IC4u
LiAvLyB0aGUgcHJlZGljdGF0ZSBjb3JyZXNwb25kaW5nIHRvICdAYSBpcyBub3QgaW50MzInCisv
LyAgIGJyIGkxICUyLCBsYWJlbCAlMywgbGFiZWwgJTQKKy8vIDsgPGxhYmVsPjozCisvLyAgIGNh
bGwgdm9pZCBleGl0VGh1bmsxKCUwLCAlMSkgLy8gcGFzcyAnYScgYW5kICdiJywgc2luY2UgdGhl
eSdyZSBib3RoIGxpdmUtaW4tYnl0ZWNvZGUKKy8vICAgdW5yZWFjaGFibGUKKy8vIDsgPGxhYmVs
Pjo0CisvLyAgIC4uLiAvLyBjb2RlIGZvciB0aGUgY29udGludWF0aW9uCisvLworLy8gV2hlcmUg
J2V4aXRUaHVuazEnIGlzIHRoZSBJUiB0byBnZXQgdGhlIGV4aXQgdGh1bmsgZm9yICp0aGlzKiBP
U1IgZXhpdC4gRWFjaCBPU1IKKy8vIGV4aXQgd2lsbCBhcHBlYXIgdG8gTExWTSB0byBoYXZlIGEg
ZGlzdGluY3QgZXhpdCB0aHVuay4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBkaWRuJ3QgaGF2ZSB0
byBwYXNzICc1JywgJ28nLCBvciAnYycgdG8gdGhlIGV4aXQgdGh1bmsuIDUgaXMgYQorLy8gY29u
c3RhbnQgYW5kIHRoZSBERkcgYWxyZWFkeSBrbm93cyB0aGF0LCBhbmQgY2FuIGFscmVhZHkgdGVs
bCB0aGUgT1NSIGV4aXQgbWFjaGluZXJ5CisvLyB3aGF0IHRoYXQgY29udGFudCBpcyBhbmQgd2hp
Y2ggYnl0ZWNvZGUgdmFyaWFibGVzIChpZiBhbnkpIGl0IG5lZWRzIHRvIGJlIGRyb3BwZWQKKy8v
IGludG8uIFRoaXMgaXMgY29udmV5ZWQgdG8gdGhlIGV4aXQgc3RhdGljYWxseSwgdmlhIHRoZSBP
U1JFeGl0IGRhdGEgc3RydWN0dXJlIGJlbG93LgorLy8gU2VlIHRoZSBjb2RlIGZvciBFeGl0VmFs
dWUgZm9yIGRldGFpbHMuICdvJyBpcyBhbiBhcmd1bWVudCwgYW5kIGFyZ3VtZW50cyBhcmUgYWx3
YXlzCisvLyAiZmx1c2hlZCIgLSBpZiB5b3UgbmV2ZXIgYXNzaWduIHRoZW0gdGhlbiB0aGVpciB2
YWx1ZXMgYXJlIHN0aWxsIGluIHRoZSBhcmd1bWVudAorLy8gc3RhY2sgc2xvdHMsIGFuZCBpZiB5
b3UgZG8gYXNzaWduIHRoZW0gdGhlbiB3ZSBlYWdlcmx5IHN0b3JlIHRoZW0gaW50byB0aG9zZSBz
bG90cy4KKy8vICdjJyBpcyBkZWFkIGluIGJ5dGVjb2RlLCBhbmQgdGhlIERGRyBrbm93cyB0aGlz
OyB3ZSBzdGF0aWNhbGx5IHRlbGwgdGhlIGV4aXQgdGh1bmsKKy8vIHRoYXQgaXQncyBkZWFkIGFu
ZCBkb24ndCBoYXZlIHRvIHBhc3MgYW55dGhpbmcuIFRoZSBleGl0IHRodW5rIHdpbGwgImluaXRp
YWxpemUiIGl0cworLy8gdmFsdWUgdG8gVW5kZWZpbmVkLgorLy8KKy8vIFRoaXMgYXBwcm9hY2gg
dG8gT1NSIGV4aXQgaGFzIGEgbnVtYmVyIG9mIHZpcnR1ZXM6CisvLworLy8gLSBJdCBpcyBhbiBl
bnRpcmVseSB1bnN1cnByaXNpbmcgcmVwcmVzZW50YXRpb24gZm9yIGEgY29tcGlsZXIgdGhhdCBh
bHJlYWR5IGdyb2tzCisvLyAgIENGRy1saWtlIElScyBmb3IgQy1saWtlIGxhbmd1YWdlcy4gQWxs
IGV4aXN0aW5nIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMganVzdAorLy8gICB3b3JrLgor
Ly8KKy8vIC0gSXQgbGVuZHMgaXRzZWxmIG5hdHVyYWxseSB0byBtb2Rlcm4gYXBwcm9hY2hlcyB0
byBjb2RlIG1vdGlvbi4gRm9yIGV4YW1wbGUsIHlvdQorLy8gICBjb3VsZCBzaW5rIG9wZXJhdGlv
bnMgZnJvbSBhYm92ZSB0aGUgZXhpdCB0byBiZWxvdyBpdCwgaWYgeW91IGp1c3QgZHVwbGljYXRl
IHRoZQorLy8gICBvcGVyYXRpb24gaW50byB0aGUgT1NSIGV4aXQgYmxvY2suIFRoaXMgaXMgYm90
aCBsZWdhbCBhbmQgZGVzaXJhYmxlLiBJdCB3b3JrcworLy8gICBiZWNhdXNlIHRoZSBiYWNrZW5k
IHNlZXMgdGhlIE9TUiBleGl0IGJsb2NrIGFzIGJlaW5nIG5vIGRpZmZlcmVudCB0aGFuIGFueSBv
dGhlciwKKy8vICAgYW5kIExMVk0gYWxyZWFkeSBzdXBwb3J0cyBzaW5raW5nIGlmIGl0IHNlZXMg
dGhhdCBhIHZhbHVlIGlzIG9ubHkgcGFydGlhbGx5IHVzZWQuCisvLyAgIEhlbmNlIHRoZXJlIGV4
aXN0cyBhIHZhbHVlIHRoYXQgZG9taW5hdGVzIHRoZSBleGl0IGJ1dCBpcyBvbmx5IHVzZWQgYnkg
dGhlIGV4aXQKKy8vICAgdGh1bmsgYW5kIG5vdCBieSB0aGUgY29udGludWF0aW9uLCBzaW5raW5n
IG91Z2h0IHRvIGtpY2sgaW4gZm9yIHRoYXQgdmFsdWUuCisvLyAgIEhvaXN0aW5nIG9wZXJhdGlv
bnMgZnJvbSBiZWxvdyBpdCB0byBhYm92ZSBpdCBpcyBhbHNvIHBvc3NpYmxlLCBmb3Igc2ltaWxh
cgorLy8gICByZWFzb25zLgorLy8KKy8vIC0gVGhlIG5vLXJldHVybiB0YWlsLWNhbGwgdG8gdGhl
IE9TUiBleGl0IHRodW5rIGNhbiBiZSBzdWJqZWN0ZWQgdG8gc3BlY2lhbGl6ZWQKKy8vICAgY29k
ZS1zaXplIHJlZHVjdGlvbiBvcHRpbWl6YXRpb25zLCB0aG91Z2ggdGhpcyBpcyBvcHRpb25hbC4g
Rm9yIGV4YW1wbGUsIGluc3RlYWQKKy8vICAgb2YgYWN0dWFsbHkgZW1pdHRpbmcgYSBjYWxsIGFs
b25nIHdpdGggYWxsIHRoYXQgZ29lcyB3aXRoIGl0IChsaWtlIHBsYWNpbmcgdGhlCisvLyAgIGFy
Z3VtZW50cyBpbnRvIGFyZ3VtZW50IHBvc2l0aW9uKSwgdGhlIGJhY2tlbmQgY291bGQgY2hvb3Nl
IHRvIHNpbXBseSBpbmZvcm0gdXMKKy8vICAgd2hlcmUgaXQgaGFkIHBsYWNlZCB0aGUgYXJndW1l
bnRzIGFuZCBleHBlY3QgdGhlIGNhbGxlZSAoaS5lLiB0aGUgZXhpdCB0aHVuaykgdG8KKy8vICAg
ZmlndXJlIGl0IG91dCBmcm9tIHRoZXJlLiBJdCBjb3VsZCBhbHNvIHRlbGwgdXMgd2hhdCB3ZSBu
ZWVkIHRvIGRvIHRvIHBvcCBzdGFjaywKKy8vICAgYWx0aG91Z2ggYWdhaW4sIGl0IGRvZXNuJ3Qg
aGF2ZSB0bzsgaXQgY291bGQganVzdCBlbWl0IHRoYXQgY29kZSBub3JtYWxseS4gVGhvdWdoCisv
LyAgIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQsIHdlIGNvdWxkOyB0aGUgb25seSB0aGluZyB0
aGF0IHdvdWxkIGNoYW5nZSBvbiBvdXIgZW5kCisvLyAgIGlzIHRoYXQgd2UnZCBuZWVkIGZlZWRi
YWNrIGZyb20gdGhlIGJhY2tlbmQgYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBhcmd1bWVudHMK
Ky8vICAgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRoaW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9u
ZSB0byBwb3Agc3RhY2suIFRoaXMgd291bGQKKy8vICAgaW52b2x2ZSBzd2l0Y2hpbmcgdGhlIG1f
dmFsdWVzIGFycmF5IHRvIHVzZSBzb21ldGhpbmcgbW9yZSBha2luIHRvIFZhbHVlUmVjb3ZlcnkK
Ky8vICAgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgRXhpdFZhbHVlLCBhbGJlaXQgcG9zc2libHkg
d2l0aCBzb21lIGhhY2tzIHRvIGJldHRlcgorLy8gICB1bmRlcnN0YW5kIHRoZSBraW5kcyBvZiBw
bGFjZXMgd2hlcmUgdGhlIExMVk0gYmFja2VuZCB3b3VsZCBwdXQgdmFsdWVzLgorLy8KKy8vIC0g
SXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gYWxsb3cgdGhlIGJhY2tlbmQgdG8gZG8gaXRzIG93biBl
eGl0IGhvaXN0aW5nLCBieSB1c2luZworLy8gICBpbnRyaW5zaWNzIChvciBtZXRhLWRhdGEsIG9y
IHNvbWV0aGluZykgdG8gaW5mb3JtIHRoZSBiYWNrZW5kIHRoYXQgaXQncyBzYWZlIHRvCisvLyAg
IG1ha2UgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBtb3JlIHRydXRoeS4KKy8v
CisvLyAtIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgd2F0Y2hwb2ludHMgKHNlZSB3
ZWJraXQub3JnL2IvMTEzNjQ3KSBieSBtYWtpbmcKKy8vICAgdGhlIHByZWRpY2F0ZSBwYXNzZWQg
dG8gJ2V4aXRJZigpJyBiZSBhbiBpbnRyaW5zaWMgdGhhdCB0aGUgYmFja2VuZCBrbm93cyB0byBi
ZQorLy8gICB0cnVlIGF0IGNvbXBpbGUtdGltZS4gVGhlIGJhY2tlbmQgY291bGQgdGhlbiB0dXJu
IHRoZSBjb25kaXRpb25hbCBicmFuY2ggaW50byBhCisvLyAgIHJlcGxhY2VhYmxlIGp1bXAsIG11
Y2ggbGlrZSB0aGUgREZHIGRvZXMuCisKK3N0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRC
YXNlIHsKKyAgICBPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCwgVmFsdWVGb3JtYXQgcHJvZmls
ZVZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAorICAgICAgICBDb2Rl
T3JpZ2luLCBpbnQgbGFzdFNldE9wZXJhbmQsIExWYWx1ZSBleGl0U3R1YkFkZHJlc3MpOworICAg
IAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAgCisgICAgLy8gVGhlIGZp
cnN0IGFyZ3VtZW50IHRvIHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBw
cm9maWxlLgorICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5v
dCBJbnZhbGlkIGFuZCB3ZSdsbCBoYXZlIGEKKyAgICAvLyBtZXRob2Qgb2YgZ2V0dGluZyBhIHZh
bHVlIHByb2ZpbGUuIE5vdGUgdGhhdCBhbGwgb2YgdGhlIEV4aXRBcmd1bWVudCdzCisgICAgLy8g
YXJlIGFscmVhZHkgYXdhcmUgb2YgdGhpcyBwb3NzaWJsZSBvZmYtYnktb25lLCBzbyB0aGVyZSBp
cyBubyBuZWVkIHRvCisgICAgLy8gY29ycmVjdCB0aGVtLgorICAgIFZhbHVlRm9ybWF0IG1fcHJv
ZmlsZVZhbHVlRm9ybWF0OworICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92YWx1
ZVByb2ZpbGU7CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgCisgICAg
Ly8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhpcyBleGl0
LgorICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKKyAgICBMVmFsdWUgbV9leGl0
U3R1YkFkZHJlc3M7IC8vIEZJWE1FOiBNb3ZlIHRoaXMgb3V0IG9mIE9TUkV4aXQsIHNvIGl0IGRv
ZXNuJ3QgcG9sbHV0ZSBDb2RlQmxvY2suCisgICAgCisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7
CisgICAgCisgICAgT3BlcmFuZHM8RXhpdFZhbHVlPiBtX3ZhbHVlczsKKyAgICAKKyAgICB2b2lk
IHNldFBhdGNoYWJsZUNvZGVPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXApOwor
ICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0
bENvZGVCbG9jaykgY29uc3Q7CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKAorICAg
ICAgICBERkc6OkJhc2ljQmxvY2sqLCBERkc6Ok5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBu
b2RlSW5kZXgsCisgICAgICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiwgVmVjdG9yPExWYWx1ZT4m
IGFyZ3VtZW50cyk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9TUkV4aXRfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFZhbHVlRm9y
bWF0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkZUTDsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhbHVlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgSW52YWxpZFZhbHVlRm9ybWF0OgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdFVJbnQz
MjoKKyAgICAgICAgb3V0LnByaW50KCJVSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVmFsdWVGb3JtYXRCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRKU1ZhbHVlOgorICAgICAgICBvdXQu
cHJpbnQoIkpTVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRE
b3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMVmFsdWVGb3JtYXRfaAorI2RlZmluZSBGVExWYWx1ZUZvcm1hdF9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKworLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWlsYXIgdG8gRGF0YUZv
cm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0CisvLyB1bmxpa2UgRGF0YUZv
cm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gVUlu
dDMyIGFuZCBJbnQzMi4KKworZW51bSBWYWx1ZUZvcm1hdCB7CisgICAgSW52YWxpZFZhbHVlRm9y
bWF0LAorICAgIFZhbHVlRm9ybWF0SW50MzIsCisgICAgVmFsdWVGb3JtYXRVSW50MzIsCisgICAg
VmFsdWVGb3JtYXRCb29sZWFuLAorICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwKKyAgICBWYWx1ZUZv
cm1hdERvdWJsZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpGVEw6OlZhbHVl
Rm9ybWF0KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKworI2VuZGlmIC8vIEZUTFZhbHVlRm9ybWF0X2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196562</attachid>
            <date>2013-04-04 17:37:42 -0700</date>
            <delta_ts>2013-04-04 18:46:15 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>68487</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3NjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEzLTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBoYXZlIE9TUiBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6
CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6
T1NSRXhpdEJhc2UpOgorICAgICAgICAoT1NSRXhpdEJhc2UpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OnJlcHJlc2VudGF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRWYWx1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0VmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpkZWFkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFjayk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
Ojphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFZhbHVlOjppc0luSlNTdGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0Nv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAg
ICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChPU1JF
eGl0KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExW
YWx1ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorCiAy
MDEzLTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91
cnRoVGllcjogcHV0IERGRyBkYXRhIGludG8gYSBERkc6OkpJVENvZGUsIGFuZCBwdXQgY29tbW9u
IERGRyBhbmQgRlRMIGRhdGEgaW50byBzb21ldGhpbmcgYWNjZXNzaWJsZSBmcm9tIGJvdGggREZH
OjpKSVRDb2RlIGFuZCBGVEw6OkpJVENvZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUsNyArOTUsOCBAQCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdy
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVk
aWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPQorICAgICAgICAg
ICAgbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7
CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAg
ICByb290LT52YWx1ZXNBdEhlYWQuYXJndW1lbnQoaSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAg
IGVsc2UgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCShyZXZpc2lvbiAxNDc2MDgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01pbmlmaWVkTm9kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MSw2ICs1MSw3IEBAIGlubGluZSBib29sIGJlbG9uZ3NJbk1pbmlmaWVkR3Jh
cGgoTm9kZVQKICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVCghbmVlZHNPU1JCYWNrd2FyZFJld2lyaW5n
KHR5cGUpICYmICFuZWVkc09TUkZvcndhcmRSZXdpcmluZyh0eXBlKSk7CiAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCShyZXZpc2lvbiAxNDc2MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4Nyw2ICsyODcsMjUgQEAgaW5saW5lIE5v
ZGVGbGFncyBkZWZhdWx0RmxhZ3MoTm9kZVR5cGUgbwogICAgIH0KIH0KIAoraW5saW5lIGJvb2wg
bmVlZHNPU1JCYWNrd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9wKQoreworICAgIHJldHVybiBvcCA9
PSBVSW50MzJUb051bWJlcjsKK30KKworaW5saW5lIGJvb2wgbmVlZHNPU1JGb3J3YXJkUmV3aXJp
bmcoTm9kZVR5cGUgb3ApCit7CisgICAgc3dpdGNoIChvcCkgeworICAgIGNhc2UgSW50MzJUb0Rv
dWJsZToKKyAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgVmFsdWVUb0lu
dDMyOgorICAgIGNhc2UgVUludDMyVG9OdW1iZXI6CisgICAgY2FzZSBEb3VibGVBc0ludDMyOgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZiAvLyBFTkFC
TEUoREZHX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNw
cAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTUgKzM2LDEzIEBACiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIERGRyB7CiAKIE9TUkV4aXQ6Ok9TUkV4aXQoRXhpdEtpbmQga2luZCwgSlNW
YWx1ZVNvdXJjZSBqc1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZh
bHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqIGppdCwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXgpCi0gICAgOiBtX2pzVmFsdWVTb3VyY2UoanNWYWx1ZVNvdXJj
ZSkKKyAgICA6IE9TUkV4aXRCYXNlKGtpbmQsIGppdC0+bV9jb2RlT3JpZ2luRm9yT1NSKQorICAg
ICwgbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCiAgICAgLCBtX3ZhbHVlUHJvZmlsZSh2
YWx1ZVByb2ZpbGUpCiAgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQoMCkKICAgICAsIG1fY29k
ZU9yaWdpbihqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKLSAgICAsIG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlKG1fY29kZU9yaWdpbikKICAgICAsIG1fcmVjb3ZlcnlJbmRleChyZWNvdmVyeUlu
ZGV4KQogICAgICwgbV93YXRjaHBvaW50SW5kZXgoc3RkOjpudW1lcmljX2xpbWl0czx1bnNpZ25l
ZD46Om1heCgpKQotICAgICwgbV9raW5kKGtpbmQpCi0gICAgLCBtX2NvdW50KDApCiAgICAgLCBt
X3N0cmVhbUluZGV4KHN0cmVhbUluZGV4KQogICAgICwgbV9sYXN0U2V0T3BlcmFuZChqaXQtPm1f
bGFzdFNldE9wZXJhbmQpCiB7CkBAIC03Myw1NyArNzEsMTQgQEAgdm9pZCBPU1JFeGl0Ojpjb3Jy
ZWN0SnVtcChMaW5rQnVmZmVyJiBsaQogICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtC
dWZmZXIub2Zmc2V0T2YobGFiZWwpOwogfQogCi1ib29sIE9TUkV4aXQ6OmNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2Nr
KiBwcm9maWxlZENvZGVCbG9jaykKLXsKLSAgICBpZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2Nv
dW50KSAvIGRmZ0NvZGVCbG9jay0+b3NyRXhpdENvdW50ZXIoKSA8PSBPcHRpb25zOjpvc3JFeGl0
UHJvbWluZW5jZUZvckZyZXF1ZW50RXhpdFNpdGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIAotICAgIEZyZXF1ZW50RXhpdFNpdGUgZXhpdFNpdGU7Ci0gICAgCi0gICAgaWYgKG1fa2lu
ZCA9PSBBcmd1bWVudHNFc2NhcGVkKSB7Ci0gICAgICAgIC8vIENvdW50IHRoaXMgb25lIGdsb2Jh
bGx5LiBJdCBkb2Vzbid0IG1hdHRlciB3aGVyZSBpbiB0aGUgY29kZSBibG9jayB0aGUgYXJndW1l
bnRzIGV4Y2FwZWQ7Ci0gICAgICAgIC8vIHRoZSBmYWN0IHRoYXQgdGhleSBkaWQgaXMgbm90IGFz
c29jaWF0ZWQgd2l0aCBhbnkgcGFydGljdWxhciBpbnN0cnVjdGlvbi4KLSAgICAgICAgZXhpdFNp
dGUgPSBGcmVxdWVudEV4aXRTaXRlKG1fa2luZCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGV4aXRT
aXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29k
ZUluZGV4LCBtX2tpbmQpOwotICAgIAotICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9y
aWdpbkFuZEJhc2VsaW5lQ29kZUJsb2NrKG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBwcm9m
aWxlZENvZGVCbG9jayktPmFkZEZyZXF1ZW50RXhpdFNpdGUoZXhpdFNpdGUpOwotfQotCiB2b2lk
IE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQoQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJl
bnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGNvbnN0IFZhbHVlUmVjb3ZlcnkmIHZhbHVlUmVj
b3ZlcnkpCiB7Ci0gICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBh
IFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKLSAgICAvLyBTZXRMb2NhbCB3
aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFsdWVS
ZWNvdmVyeS4KLSAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAotICAgICAgICAmJiAhdmFsdWVSZWNv
dmVyeQotICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7Ci0gICAg
ICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwotICAgICAgICBB
U1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOwotICAg
ICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBjdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbik7Ci0gICAgfQotICAgIAotICAgIC8vIEZpbmQgdGhlIGZpcnN0
IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBs
YXN0IG1vdiBoaW50Ci0gICAgLy8gb24gdGhpcyBub2RlLgotICAgIHVuc2lnbmVkIGluZGV4SW5C
bG9jayA9IG5vZGVJbmRleCArIDE7Ci0gICAgTm9kZSogbm9kZSA9IDA7Ci0gICAgTm9kZSogbGFz
dE1vdkhpbnQgPSAwOwotICAgIGZvciAoOzspIHsKLSAgICAgICAgaWYgKGluZGV4SW5CbG9jayA9
PSBibG9jay0+c2l6ZSgpKSB7Ci0gICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlubGluZSByZXR1
cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBUaGlzIGlzIHNhZmUK
LSAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMgaXRzIG93biBieXRl
Y29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bwotICAgICAgICAgICAgLy8gcmVleGVj
dXRlIHRoYXQgYnl0ZWNvZGUuCi0gICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1w
KTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBub2RlID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7Ci0gICAgICAgIGlmIChub2RlLT5jb250YWluc01vdkhpbnQoKSAm
JiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKLSAgICAgICAgICAgIGxhc3RNb3ZIaW50
ID0gbm9kZTsKLSAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgaW5kZXhJbkJsb2NrKys7Ci0g
ICAgfQotICAgIAorICAgIE5vZGUqIG5vZGU7CisgICAgTm9kZSogbGFzdE1vdkhpbnQ7CisgICAg
ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3VycmVudE5vZGUsIG5vZGVJbmRl
eCwgISF2YWx1ZVJlY292ZXJ5KTsKKwogICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1
cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAKICAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5j
b2RlT3JpZ2luOwogICAgIAogICAgIGlmICghdmFsdWVSZWNvdmVyeSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShyZXZpc2lvbiAxNDc2MDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDExLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQs
NyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgi
CiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCiAj
aW5jbHVkZSAiREZHVmFsdWVSZWNvdmVyeU92ZXJyaWRlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKICNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC04
NCw3ICs4NSw3IEBAIHByaXZhdGU6CiAvLwogLy8gVGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhv
dyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRoIGJ5CiAvLyBnb2luZyBpbnRvIGJhc2VsaW5l
IGNvZGUuCi1zdHJ1Y3QgT1NSRXhpdCB7CitzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0
QmFzZSB7CiAgICAgT1NSRXhpdChFeGl0S2luZCwgSlNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVKSVQqLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwg
dW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IFVJTlRfTUFYKTsKICAgICAKICAgICBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgbV9jb2RlOwpAQCAtOTQsMjEgKzk1LDEwIEBAIHN0cnVjdCBPU1JFeGl0IHsK
IAogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKICAgICBDb2RlT3JpZ2luIG1f
Y29kZU9yaWdpbjsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOwog
ICAgIAogICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKICAgICB1bnNpZ25lZCBtX3dhdGNo
cG9pbnRJbmRleDsKICAgICAKLSAgICBFeGl0S2luZCBtX2tpbmQ7Ci0gICAgdWludDMyX3QgbV9j
b3VudDsKLSAgICAKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKENv
ZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQotICAg
IHsKLSAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2luZElzQ291bnRhYmxlKG1fa2luZCkp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjb25zaWRlckFkZGlu
Z0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJsb2NrLCBwcm9maWxlZENvZGVCbG9jayk7
Ci0gICAgfQotCiAgICAgdm9pZCBzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1hY3JvQXNzZW1ibGVy
OjpQYXRjaGFibGVKdW1wKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBnZXRQYXRjaGFibGVD
b2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7CiAgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRp
b25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwpAQCAtMTIwLDkgKzExMCw2IEBAIHN0cnVj
dCBPU1JFeGl0IHsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAgICAKICAgICBSZWZQdHI8
VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZTsKLQotcHJpdmF0
ZToKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhDb2RlQmxv
Y2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayk7CiB9OwogCiBz
dHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKKwor
I2lmIEVOQUJMRShERkdfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisK
K2Jvb2wgT1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhD
b2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKK3sK
KyAgICBpZiAoc3RhdGljX2Nhc3Q8ZG91YmxlPihtX2NvdW50KSAvIGRmZ0NvZGVCbG9jay0+b3Ny
RXhpdENvdW50ZXIoKSA8PSBPcHRpb25zOjpvc3JFeGl0UHJvbWluZW5jZUZvckZyZXF1ZW50RXhp
dFNpdGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIAorICAgIEZyZXF1ZW50RXhpdFNp
dGUgZXhpdFNpdGU7CisgICAgCisgICAgaWYgKG1fa2luZCA9PSBBcmd1bWVudHNFc2NhcGVkKSB7
CisgICAgICAgIC8vIENvdW50IHRoaXMgb25lIGdsb2JhbGx5LiBJdCBkb2Vzbid0IG1hdHRlciB3
aGVyZSBpbiB0aGUgY29kZSBibG9jayB0aGUgYXJndW1lbnRzIGV4Y2FwZWQ7CisgICAgICAgIC8v
IHRoZSBmYWN0IHRoYXQgdGhleSBkaWQgaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgcGFydGlj
dWxhciBpbnN0cnVjdGlvbi4KKyAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1f
a2luZCk7CisgICAgfSBlbHNlCisgICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZSht
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZS5ieXRlY29kZUluZGV4LCBtX2tpbmQpOworICAgIAor
ICAgIHJldHVybiBiYXNlbGluZUNvZGVCbG9ja0Zvck9yaWdpbkFuZEJhc2VsaW5lQ29kZUJsb2Nr
KG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLCBwcm9maWxlZENvZGVCbG9jayktPmFkZEZyZXF1
ZW50RXhpdFNpdGUoZXhpdFNpdGUpOworfQorCitib29sIE9TUkV4aXRCYXNlOjpkb1NlYXJjaEZv
ckZvcndhcmRDb252ZXJzaW9uKAorICAgIEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50
Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgTm9k
ZSomIG5vZGUsIE5vZGUqJiBsYXN0TW92SGludCkKK3sKKyAgICAvLyBDaGVjayB0aGF0IGVpdGhl
ciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVjZWRpbmcgbm9kZSB3
YXMgYQorICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29kZSBvcmlnaW4sIG9yIHRoYXQg
d2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5LgorICAgIGlmICghQVNTRVJUX0RJU0FCTEVE
CisgICAgICAgICYmICFoYXNWYWx1ZVJlY292ZXJ5CisgICAgICAgICYmICFjdXJyZW50Tm9kZS0+
Y29udGFpbnNNb3ZIaW50KCkpIHsKKyAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBibG9jay0+YXQo
bm9kZUluZGV4IC0gMSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNldExvY2Fs
LT5jb250YWluc01vdkhpbnQoKSk7CisgICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNl
dExvY2FsLT5jb2RlT3JpZ2luID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICB9Cisg
ICAgCisgICAgLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIG5leHQgYnl0ZWNvZGUgaW5z
dHJ1Y3Rpb24uIEFsc28gdHJhY2sgdGhlIGxhc3QgbW92IGhpbnQKKyAgICAvLyBvbiB0aGlzIG5v
ZGUuCisgICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrID0gbm9kZUluZGV4ICsgMTsKKyAgICBub2Rl
ID0gMDsKKyAgICBsYXN0TW92SGludCA9IDA7CisgICAgZm9yICg7OykgeworICAgICAgICBpZiAo
aW5kZXhJbkJsb2NrID09IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgIC8vIFRoaXMgaXMg
YW4gaW5saW5lIHJldHVybi4gR2l2ZSB1cCBhbmQgZG8gYSBiYWNrd2FyZHMgc3BlY3VsYXRpb24u
IFRoaXMgaXMgc2FmZQorICAgICAgICAgICAgLy8gYmVjYXVzZSBhbiBpbmxpbmUgcmV0dXJuIGhh
cyBpdHMgb3duIGJ5dGVjb2RlIGluZGV4IGFuZCBpdCdzIGFsd2F5cyBzYWZlIHRvCisgICAgICAg
ICAgICAvLyByZWV4ZWN1dGUgdGhhdCBieXRlY29kZS4KKyAgICAgICAgICAgIEFTU0VSVChub2Rl
LT5vcCgpID09IEp1bXApOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgICAgIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKKyAgICAgICAgaWYgKG5vZGUt
PmNvbnRhaW5zTW92SGludCgpICYmIG5vZGUtPmNoaWxkMSgpID09IGN1cnJlbnROb2RlKQorICAg
ICAgICAgICAgbGFzdE1vdkhpbnQgPSBub2RlOworICAgICAgICBpZiAobm9kZS0+Y29kZU9yaWdp
biAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBpbmRleEluQmxvY2srKzsKKyAgICB9CisgICAgCisgICAgQVNTRVJUKG5vZGUtPmNvZGVPcmln
aW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOworICAgIHJldHVybiB0cnVlOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdEJhc2VfaAorI2RlZmluZSBERkdP
U1JFeGl0QmFzZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShE
RkdfSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9m
aWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gUHJvdmlkZXMg
Zm9yIHRoZSBPU1IgZXhpdCBwcm9maWxpbmcgZnVuY3Rpb25hbGl0eSB0aGF0IGlzIGNvbW1vbiBi
ZXR3ZWVuIHRoZSBERkcKKy8vIGFuZCB0aGUgRlRMLgorCitzdHJ1Y3QgT1NSRXhpdEJhc2Ugewor
ICAgIE9TUkV4aXRCYXNlKEV4aXRLaW5kIGtpbmQsIENvZGVPcmlnaW4gb3JpZ2luKQorICAgICAg
ICA6IG1fa2luZChraW5kKQorICAgICAgICAsIG1fY291bnQoMCkKKyAgICAgICAgLCBtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZShvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBFeGl0
S2luZCBtX2tpbmQ7CisgICAgdWludDMyX3QgbV9jb3VudDsKKyAgICAKKyAgICBDb2RlT3JpZ2lu
IG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlOworCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9m
aWxlZENvZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJ
c0NvdW50YWJsZShtX2tpbmQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywg
cHJvZmlsZWRDb2RlQmxvY2spOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhlIGZvcndhcmQgY29udmVyc2lvbiBpcyByZWFsbHkgbmVlZGVkLgorICAgIGJvb2wgZG9TZWFy
Y2hGb3JGb3J3YXJkQ29udmVyc2lvbigKKyAgICAgICAgQmFzaWNCbG9jayosIE5vZGUqIGN1cnJl
bnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKKyAgICAg
ICAgTm9kZSomIG5leHRCQ05vZGUsIE5vZGUqJiBsYXN0TW92SGludCk7CisKK3ByaXZhdGU6Cisg
ICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBk
ZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRp
ZiAvLyBERkdPU1JFeGl0QmFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxNDc2MDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTc3Nyw3ICsxNzc3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5
cGVzKAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAogICAgICAgICBWaXJ0dWFsUmVn
aXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5w
cmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJp
YWJsZUFjY2Vzc0RhdGEtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAKICAgICAgICAgSlNW
YWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJl
c3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzEsNyArMTMxLDcgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMklu
SlNTdGFjayk7Ci0gICAgICAgIGlmIChpc0FycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwg
aXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShDZWxsSW5K
U1N0YWNrKTsKICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQog
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2spOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uY3BwCShyZXZpc2lvbiAxNDc2MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcg
QEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAg
ICBpZiAobm9kZSAmJiBub2RlLT5vcCgpID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAg
ICBpZiAobm9kZSAmJiBuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKICAg
ICAgICAgICAgICAgICBNaW5pZmllZElEIGlkID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAg
ICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIGNv
ZGVCbG9jaywgZ3JhcGguYXQoaWQpKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBA
IC0yNTcsNiArMjU3LDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgK
ICAgICAgICAgICAgICAgICAgICAgICAgIGRvdWJsZUFzSW50MzJJRCA9IGlkOwogICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKG5vZGUt
Pm9wKCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0QXJndW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnQuaCIKKworI2lmIEVO
QUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQg
RXhpdEFyZ3VtZW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJhcmciLCBhcmd1bWVudCgpLCAiIGFzICIsIGZvcm1hdCgpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRBcmd1bWVudF9oCisjZGVmaW5lIEZUTEV4aXRB
cmd1bWVudF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExf
SklUKQorCisjaW5jbHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgRXhp
dEFyZ3VtZW50UmVwcmVzZW50YXRpb24geworICAgIFZhbHVlRm9ybWF0IGZvcm1hdDsKKyAgICB1
bnNpZ25lZCBhcmd1bWVudDsKK307CisKK2NsYXNzIEV4aXRBcmd1bWVudCB7CitwdWJsaWM6Cisg
ICAgRXhpdEFyZ3VtZW50KCkKKyAgICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24uZm9ybWF0
ID0gSW52YWxpZFZhbHVlRm9ybWF0OworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQoVmFs
dWVGb3JtYXQgZm9ybWF0LCB1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIG1fcmVw
cmVzZW50YXRpb24uZm9ybWF0ID0gZm9ybWF0OworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmFy
Z3VtZW50ID0gYXJndW1lbnQ7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEV4aXRBcmd1bWVu
dChFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikKKyAgICB7CisgICAg
ICAgIG1fcmVwcmVzZW50YXRpb24gPSByZXByZXNlbnRhdGlvbjsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9
PSBJbnZhbGlkVmFsdWVGb3JtYXQ7IH0KKyAgICAKKyAgICBWYWx1ZUZvcm1hdCBmb3JtYXQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fcmVw
cmVzZW50YXRpb24uZm9ybWF0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMpOworICAgICAgICByZXR1cm4gbV9y
ZXByZXNlbnRhdGlvbi5hcmd1bWVudDsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50IHdp
dGhGb3JtYXQoVmFsdWVGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEV4aXRB
cmd1bWVudChmb3JtYXQsIGFyZ3VtZW50KCkpOworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1l
bnRSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcmVz
ZW50YXRpb247IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gbV9yZXByZXNlbnRh
dGlvbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKwor
I2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K3ZvaWQgRXhpdFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICBjYXNlIEludmFsaWRFeGl0VmFsdWU6CisgICAgICAgIG91dC5w
cmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVEZWFk
OgorICAgICAgICBvdXQucHJpbnQoIkRlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnQoIiwgZXhpdEFy
Z3VtZW50KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0
YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50KCIsIGNvbnN0YW50KCksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgb3V0
LnByaW50KCJJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTEV4aXRWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRWYWx1ZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMRXhpdEFy
Z3VtZW50LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMgaXMg
bGlrZSBWYWx1ZVJlY292ZXJ5LCBidXQgcmVzcGVjdHMgdGhlIHdheSB0aGF0IHRoZSBGVEwgZG9l
cyBPU1IKKy8vIGV4aXQ6IHRoZSBsaXZlIG5vbi1jb25zdGFudCBub24tZmx1c2hlZCB2YWx1ZXMg
YXJlIHBhc3NlZCBhcyBhcmd1bWVudHMKKy8vIHRvIGEgbm9yZXR1cm4gdGFpbCBjYWxsLiBFeGl0
VmFsdWUgaXMgaGVuY2UgbW9zdGx5IHJlc3BvbnNpYmxlIGZvcgorLy8gdGVsbGluZyB1cyB0aGUg
bWFwcGluZyBiZXR3ZWVuIG9wZXJhbmRzIGluIGJ5dGVjb2RlIGFuZCB0aGUgYXJndW1lbnRzIHRv
CisvLyB0aGUgY2FsbC4KKworZW51bSBFeGl0VmFsdWVLaW5kIHsKKyAgICBJbnZhbGlkRXhpdFZh
bHVlLAorICAgIEV4aXRWYWx1ZURlYWQsCisgICAgRXhpdFZhbHVlQXJndW1lbnQsCisgICAgRXhp
dFZhbHVlQ29uc3RhbnQKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2ssCisgICAgRXhpdFZhbHVlSW5K
U1N0YWNrQXNJbnQzMiwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0Jvb2xlYW4sCisgICAgRXhp
dFZhbHVlSW5KU1N0YWNrQXNEb3VibGUKK307CisKK2NsYXNzIEV4aXRWYWx1ZSB7CitwdWJsaWM6
CisgICAgRXhpdFZhbHVlKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZEV4aXRWYWx1ZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9r
aW5kID09IEludmFsaWRFeGl0VmFsdWU7IH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGRl
YWQoKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEV4aXRWYWx1ZURlYWQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNrKCkKKyAgICB7CisgICAgICAgIEV4aXRW
YWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2s7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFs
dWUgaW5KU1N0YWNrQXNJbnQzMigpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpT
U3RhY2tBc0Jvb2xlYW4oKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFja0FzQm9vbGVhbjsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3Rh
Y2tBc0RvdWJsZSgpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgY29uc3RhbnQoSlNW
YWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29uc3Rh
bnQgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGV4aXRBcmd1bWVudChjb25zdCBFeGl0QXJn
dW1lbnQmIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUFyZ3VtZW50OworICAgICAgICByZXN1bHQudS5h
cmd1bWVudCA9IGFyZ3VtZW50LnJlcHJlc2VudGF0aW9uKCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIEV4aXRWYWx1ZUtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4ga2luZCgp
ID09IEV4aXRWYWx1ZURlYWQ7IH0KKyAgICBib29sIGlzSW5KU1N0YWNrU29tZWhvdygpIGNvbnN0
CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEV4aXRWYWx1
ZUluSlNTdGFjazoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAg
ICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzQm9vbGVhbjoKKyAgICAgICAgY2FzZSBFeGl0
VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
ICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVD
b25zdGFudDsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBFeGl0VmFsdWVBcmd1bWVudDsgfQorICAgIAorICAgIEV4aXRBcmd1bWVudCBleGl0QXJndW1l
bnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQXJndW1lbnQoKSk7CisgICAgICAg
IHJldHVybiBFeGl0QXJndW1lbnQodS5hcmd1bWVudCk7CisgICAgfQorICAgIAorICAgIEpTVmFs
dWUgY29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS5jb25zdGFudCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBFeGl0VmFsdWVLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIEV4aXRBcmd1bWVu
dFJlcHJlc2VudGF0aW9uIGFyZ3VtZW50OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25zdGFu
dDsKKyAgICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRWYWx1ZV9oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCShyZXZpc2lvbiAx
NDc2MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5o
IgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTQxLDE4ICs0Miw2IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIC8vIHVzZSB0aGlzIGluIHNpdHVhdGlv
bnMgd2hlcmUgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gc2F5IHdoYXQgbm9kZSB0aGUgdmFsdWUg
Y2FtZQogLy8gZnJvbS4KIAotLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWlsYXIg
dG8gRGF0YUZvcm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0Ci0vLyB1bmxp
a2UgRGF0YUZvcm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVzIGJl
dHdlZW4gVUludDMyIGFuZCBJbnQzMi4KLQotZW51bSBWYWx1ZUZvcm1hdCB7Ci0gICAgSW52YWxp
ZFZhbHVlRm9ybWF0LAotICAgIFZhbHVlRm9ybWF0SW50MzIsCi0gICAgVmFsdWVGb3JtYXRVSW50
MzIsCi0gICAgVmFsdWVGb3JtYXRCb29sZWFuLAotICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwKLSAg
ICBWYWx1ZUZvcm1hdERvdWJsZQotfTsKLQogY2xhc3MgRm9ybWF0dGVkVmFsdWUgewogcHVibGlj
OgogICAgIEZvcm1hdHRlZFZhbHVlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAgSklU
Q29kZTo6fkpJVENvZGUoKQogICAgICAgICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2Vu
Z2luZSk7CiB9CiAKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29kZVJlZiBl
eGl0VGh1bmtzKQoreworICAgIG1fZXhpdFRodW5rcyA9IGV4aXRUaHVua3M7Cit9CisKIHZvaWQg
SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmUsIENv
ZGVSZWYgZW50cnlwb2ludCkKIHsKICAgICBtX2VuZ2luZSA9IGVuZ2luZTsKQEAgLTk3LDYgKzEw
MiwxMSBAQCBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorQ29kZVB0ciBKSVRDb2RlOjpleGl0VGh1bmtzKCkKK3sKKyAgICByZXR1cm4gbV9leGl0
VGh1bmtzLmNvZGUoKTsKK30KKwogSklUQ29kZSogSklUQ29kZTo6ZnRsKCkKIHsKICAgICByZXR1
cm4gdGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZp
c2lvbiAxNDc2MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6
ZSgpOwogICAgIGJvb2wgY29udGFpbnModm9pZCopOwogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6
ZUV4aXRUaHVua3MoQ29kZVJlZik7CiAgICAgdm9pZCBpbml0aWFsaXplQ29kZShMTFZNRXhlY3V0
aW9uRW5naW5lUmVmLCBDb2RlUmVmIGVudHJ5cG9pbnQpOwogICAgIAorICAgIENvZGVQdHIgZXhp
dFRodW5rcygpOworICAgIAogICAgIEpJVENvZGUqIGZ0bCgpOwogICAgIERGRzo6Q29tbW9uRGF0
YSogZGZnQ29tbW9uKCk7CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKKyAgICBT
ZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICAKIHByaXZhdGU6CiAgICAg
Ly8gRklYTUU6IExMVk0gc2hvdWxkIHVzZSBvdXIgb3duIEpJVCBtZW1vcnkgYWxsb2NhdG9yLCBh
bmQgd2Ugc2hvdWxkbid0IGhhdmUgdG8KQEAgLTYxLDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjE5CiAgICAgTExW
TUV4ZWN1dGlvbkVuZ2luZVJlZiBtX2VuZ2luZTsKICAgICBDb2RlUmVmIG1fZW50cnlwb2ludDsK
KyAgICBDb2RlUmVmIG1fZXhpdFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxNDc2MDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsNyBAQCBwdWJs
aWM6CiAgICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgu
bV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJh
bmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKICAgICAg
ICAgLCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZh
cmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2UsIHN0
YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9zdGF0
ZShzdGF0ZS5ncmFwaCkKICAgICB7CiAgICAgfQpAQCAtMTUxLDggKzE1Miw5IEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCkKICAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBTZXQgdXAgdGhlIE9TUiBzdG9yeSBoZXJlLgotICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIC8vIFdo
aWxlIGNoZWNraW5nIGFyZ3VtZW50cywgZXZlcnl0aGluZyBpcyBpbiB0aGUgc3RhY2suCisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAKICAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJz
KCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNb
aV07CkBAIC0xNzAsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVCghdmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKTsKICAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUt
PnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewog
ICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBu
b2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKQEAgLTIxNiwxMyArMjE4LDcxIEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIG1ha2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJlYWQuCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGxvd0Jsb2NrLCBtX25leHRMb3dCbG9jayk7CiAgICAgICAgIAotICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIHRyYWNrIHRoZSBPU1Igc2l0dWF0aW9uIGhlcmUuCi0gICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAg
ICAgICAgICAgIGlmICghbm9kZSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NE
YXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGlj
dGlvbigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1l
bnRzQWxpYXMoKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoQXJndW1lbnRzU291cmNlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5l
cmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShTb3VyY2VJc0RlYWQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFp
bnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgaGF2ZSBiZWVu
IGZsdXNoZWQgdG8gdGhlIEpTU3RhY2sgaW4gc29tZSBmb3JtIG9yCisgICAgICAgICAgICAgICAg
Ly8gYW5vdGhlci4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFi
bGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0g
VmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNo
b3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5z
aG91bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMp
OworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFs
dWVTb3VyY2UoQm9vbGVhbkluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBtX2ludDMyVmFsdWVzLmNsZWFyKCk7CiAgICAgICAg
IG1fanNWYWx1ZVZhbHVlcy5jbGVhcigpOwogICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuY2xlYXIo
KTsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmNsZWFyKCk7CisgICAgICAgIG1fdGltZVRvTGl2
ZS5jbGVhcigpOwogICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwogICAgICAgICBt
X3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CkBAIC0yNDAsOSArMzAwLDYgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBt
X3N0YXRlLnN0YXJ0RXhlY3V0aW5nKG1fbm9kZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIW1f
bm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IElt
cGxlbWVudCBPU1IgbWFnaWMgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzYyMwotICAgICAgICAKICAgICAgICAgbV9kaXJlY3Rpb24gPSAobV9ub2RlLT5m
bGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgPyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2Fy
ZFNwZWN1bGF0aW9uOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsK
QEAgLTI1OCw2ICszMTUsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAg
ICAgICAgICAgIGNvbXBpbGVTZXRMb2NhbCgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAgY29tcGlsZVpv
bWJpZUhpbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vdkhpbnRBbmRD
aGVjazoKICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKTsKICAgICAgICAgICAg
IGJyZWFrOwpAQCAtMzUyLDYgKzQxNSwxMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1f
Z3JhcGgsIG1fbm9kZSwgdXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmhhc1Jl
c3VsdCgpKQorICAgICAgICAgICAgbV90aW1lVG9MaXZlLmFkZChtX25vZGUsIG1fbm9kZS0+YWRq
dXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZm
ZWN0cykKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKICAg
ICB9CkBAIC0zNjgsOCArNDM2LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxl
R2V0TG9jYWwoKQogICAgIHsKKyAgICAgICAgLy8gR2V0TG9jYWwgaXMgb25lIG9mIHRoZSBmZXcg
bm9kZXMgdGhhdCBtYXkgYmUgbGVmdCBiZWhpbmQsIHdpdGggIXNob3VsZEdlbmVyYXRlKCkuCisg
ICAgICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIEFi
c3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25l
KSB7CkBAIC00MjAsMTMgKzQ5MiwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGls
ZVNldExvY2FsKCkKICAgICB7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAg
ICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZh
cmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgYm9vbCBuZWVk
c0ZsdXNoaW5nID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobV9ub2RlKTsKICAgICAgICAg
Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4KLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAg
ICAKICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewogICAg
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAg
ICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91YmxlcyBpbiBGVEwuCkBAIC00MzgsMjEg
KzUwOSwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1f
bm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2Nh
bHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5l
ZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAg
ICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+
bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+
bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlm
IChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9v
dXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICBpZiAobmVl
ZHNGbHVzaGluZykgewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBh
ZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2sp
OworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsK
ICAgICAgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNoaWxkMSgpKSwg
bV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAg
ICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGlu
ZykgewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KGxvd0pTVmFsdWUobV9ub2Rl
LT5jaGlsZDEoKSksIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2Uo
VmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ2MCwxOCArNTM3LDMyIEBAIHByaXZh
dGU6CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7
CiAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShWYWx1
ZUluSlNTdGFjayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICBpZiAobmVlZHNGbHVz
aGluZykgewogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJp
YWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxv
Y2FsKCldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoKQorICAgIHsKKyAgICAgICAgb2JzZXJ2ZU1v
dkhpbnQobV9ub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlWm9tYmllSGludCgp
CisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX25vZGUtPnZhcmlh
YmxlQWNjZXNzRGF0YSgpOworICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gZGF0YS0+bG9jYWwo
KTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXNbZGF0YS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShT
b3VyY2VJc0RlYWQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hl
Y2soKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGludCBmb3IgT1NS
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIzCisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CiAgICAgICAgIHNwZWN1bGF0ZSht
X25vZGUtPmNoaWxkMSgpKTsKICAgICB9CiAgICAgCkBAIC04NjUsNiArOTU2LDI1IEBAIHByaXZh
dGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgdm9pZCB1c2UoTm9kZSosIEVkZ2UgZWRn
ZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRl
ciA9IG1fdGltZVRvTGl2ZS0+ZmluZChlZGdlLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChpdGVy
ICE9IG1fdGltZVRvTGl2ZS0+ZW5kKCkpOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUpOwor
ICAgICAgICBpdGVyLT52YWx1ZS0tOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVNb3ZI
aW50KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZI
aW50KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAgICAg
ICAgCisgICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgCisgICAg
ICAgIG1fbGFzdFNldE9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICBtX3ZhbHVlU291cmNlc1tv
cGVyYW5kXSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAg
IAogICAgIHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoRXhpdEtpbmQsIExWYWx1ZSwgTm9kZSosIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKICAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2Ug
PSBtX291dC5uZXdCbG9jaygpOwpAQCAtMTE2NSwxMSArMTI3NSwxNCBAQCBwcml2YXRlOgogICAg
IEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9qc1ZhbHVlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9k
ZSosIExWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4g
bV9zdG9yYWdlVmFsdWVzOworICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX3RpbWVUb0xp
dmU7CiAgICAgCiAgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2Fsc0Jvb2xlYW47CiAgICAgT3Bl
cmFuZHM8TFZhbHVlPiBtX2xvY2FsczMyOwogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHM2
NDsKICAgICAKKyAgICBPcGVyYW5kczxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7CisgICAg
CiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2Nr
OwogICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hCbG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworT1NSRXhpdDo6T1NSRXhp
dCgKKyAgICBFeGl0S2luZCBleGl0S2luZCwgVmFsdWVGb3JtYXQgcHJvZmlsZVZhbHVlRm9ybWF0
LAorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sIGludCBsYXN0U2V0T3BlcmFuZCwKKyAgICBMVmFsdWUgZXhpdFN0dWJB
ZGRyZXNzKQorICAgIDogT1NSRXhpdEJhc2UoZXhpdEtpbmQsIGNvZGVPcmlnaW4pCisgICAgLCBt
X3Byb2ZpbGVWYWx1ZUZvcm1hdChwcm9maWxlVmFsdWVGb3JtYXQpCisgICAgLCBtX3ZhbHVlUHJv
ZmlsZSh2YWx1ZVByb2ZpbGUpCisgICAgLCBtX2NvZGVPcmlnaW4oY29kZU9yaWdpbikKKyAgICAs
IG1fcGF0Y2hhYmxlQ29kZU9mZnNldCgwKQorICAgICwgbV9leGl0U3R1YkFkZHJlc3MoZXhpdFN0
dWJBZGRyZXNzKQorICAgICwgbV9sYXN0U2V0T3BlcmFuZChsYXN0U2V0T3BlcmFuZCkKK3sKK30K
Kwordm9pZCBPU1JFeGl0OjpzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjpQ
YXRjaGFibGVKdW1wIGp1bXApCit7CisgICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0ganVtcC5t
X2p1bXAubV9sYWJlbC5tX29mZnNldDsKK30KKworQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAorewor
ICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wKAorICAgICAgICByZWludGVycHJldF9jYXN0PGNo
YXIqPigKKyAgICAgICAgICAgIGZ0bENvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5mdGwoKS0+ZXhp
dFRodW5rcygpLmRhdGFMb2NhdGlvbigpKSArCisgICAgICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNl
dCk7Cit9CisKK3ZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZCgKKyAgICBERkc6OkJhc2lj
QmxvY2sqIGJsb2NrLCBERkc6Ok5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgs
CisgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUgJnZhbHVlLCBWZWN0b3I8TFZhbHVlPiYgYXJndW1l
bnRzKQoreworICAgIE5vZGUqIG5vZGU7CisgICAgTm9kZSogbGFzdE1vdkhpbnQ7CisgICAgZG9T
ZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3VycmVudE5vZGUsIG5vZGVJbmRleCwg
ISF2YWx1ZVJlY292ZXJ5KTsKKworICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJl
bnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAKKyAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2Rl
T3JpZ2luOworICAgIAorICAgIGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpbnQgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0TW92SGludC0+bG9jYWwoKTsKKyAgICBtX2xh
c3RTZXRPcGVyYW5kID0gb3ZlcnJpZGRlbk9wZXJhbmQ7CisgICAgCisgICAgLy8gSXMgdGhlIHZh
bHVlIGZvciB0aGlzIG9wZXJhbmQgYmVpbmcgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBl
eGl0LCBvciBpcworICAgIC8vIGl0IHNvbWV0aGluZyBlbHNlPyBJZiBpdCdzIGFuIGFyZ3VtZW50
IGFscmVhZHksIHRoZW4gcmVwbGFjZSB0aGF0IGFyZ3VtZW50OworICAgIC8vIG90aGVyd2lzZSBh
ZGQgYW5vdGhlciBhcmd1bWVudC4KKyAgICBpZiAobV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRd
LmlzQXJndW1lbnQoKSkgeworICAgICAgICBFeGl0QXJndW1lbnQgYXJndW1lbnQgPSBtX3ZhbHVl
c1tvdmVycmlkZGVuT3BlcmFuZF0uZXhpdEFyZ3VtZW50KCk7CisgICAgICAgIGFyZ3VtZW50c1tl
eGl0QXJndW1lbnQuYXJndW1lbnQoKV0gPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICBtX3ZhbHVl
c1tvdmVycmlkZGVuT3BlcmFuZF0gPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKKyAgICAgICAg
ICAgIGV4aXRBcmd1bWVudC53aXRoRm9ybWF0KHZhbHVlLmZvcm1hdCgpKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVudHMuc2l6
ZSgpOworICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUudmFsdWUoKSk7CisgICAgbV92YWx1ZXNb
bV9sYXN0U2V0T3BlcmFuZF0gPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKKyAgICAgICAgRXhp
dEFyZ3VtZW50KHZhbHVlLmZvcm1hdCgpLCBhcmd1bWVudCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTE9TUkV4aXRfaAorI2RlZmluZSBGVExPU1JFeGl0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFz
ZS5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFs
dWUuaCIKKyNpbmNsdWRlICJNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCisjaW5jbHVk
ZSAiT3BlcmFuZHMuaCIKKyNpbmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUcmFja3Mgb25lIE9TUiBleGl0IHNpdGUgd2l0aGlu
IHRoZSBGVEwgSklULiBPU1IgZXhpdCBpbiBGVEwgd29ya3MgYnkgZGVjb25zdHJ1Y3RpbmcKKy8v
IHRoZSBjcmF6eSB0aGF0IGlzIE9TUiBkb3duIHRvIHNpbXBsZSBTU0EgQ0ZHIHByaW1pdGl2ZXMg
dGhhdCBhbnkgY29tcGlsZXIgYmFja2VuZAorLy8gKGluY2x1ZGluZyBvZiBjb3Vyc2UgTExWTSkg
Y2FuIGdyb2sgYW5kIGRvIG1lYW5pbmdmdWwgdGhpbmdzIHRvLiBFeGNlcHQgZm9yCisvLyB3YXRj
aHBvaW50LWJhc2VkIGV4aXRzLCB3aGljaCBoYXZlbid0IHlldCBiZWVuIGltcGxlbWVudGVkIChz
ZWUgd2Via2l0Lm9yZy9iLzExMzY0NyksCisvLyBhbiBleGl0IGlzIGp1c3QgYSBjb25kaXRpb25h
bCBicmFuY2ggaW4gdGhlIGVtaXR0ZWQgY29kZSB3aGVyZSBvbmUgZGVzdGluYXRpb24gaXMgdGhl
CisvLyBjb250aW51YXRpb24gYW5kIHRoZSBvdGhlciBpcyBhIGJhc2ljIGJsb2NrIHRoYXQgcGVy
Zm9ybXMgYSBuby1yZXR1cm4gdGFpbC1jYWxsIHRvIGFuCisvLyBleGl0IHRodW5rLiBUaGlzIHRo
dW5rIHRha2VzIGFzIGl0cyBhcmd1bWVudHMgdGhlIGxpdmUgbm9uLWNvbnN0YW50CisvLyBub3Qt
YWxyZWFkeS1hY2NvdW50ZWQtZm9yIGJ5dGVjb2RlIHN0YXRlLiBUbyBhcHByZWNpYXRlIGhvdyB0
aGlzIHdvcmtzIGNvbnNpZGVyIHRoZQorLy8gZm9sbG93aW5nIEphdmFTY3JpcHQgcHJvZ3JhbSwg
YW5kIGl0cyBsb3dlcmluZyBkb3duIHRvIExMVk0gSVIgaW5jbHVkaW5nIHRoZSByZWxldmFudAor
Ly8gZXhpdHM6CisvLworLy8gZnVuY3Rpb24gZm9vKG8pIHsKKy8vICAgICB2YXIgYSA9IG8uYTsg
Ly8gcHJlZGljdGVkIGludAorLy8gICAgIHZhciBiID0gby5iOworLy8gICAgIHZhciBjID0gby5j
OyAvLyBOQiB0aGlzIGlzIGRlYWQKKy8vICAgICBhID0gYSB8IDU7IC8vIG91ciBleGFtcGxlIE9T
UiBleGl0OiBuZWVkIHRvIGNoZWNrIGlmIGEgaXMgYW4gaW50CisvLyAgICAgcmV0dXJuIGEgKyBi
OworLy8gfQorLy8KKy8vIEp1c3QgY29uc2lkZXIgdGhlICJhIHwgNSIuIEluIHRoZSBERkcgSVIs
IHRoaXMgbG9va3MgbGlrZToKKy8vCisvLyBCaXRPcihDaGVjazpJbnQzMjpAYSwgSW50MzI6NSkK
Ky8vCisvLyBXaGVyZSBAYSBpcyB0aGUgbm9kZSBmb3IgdGhlIEdldExvY2FsIG5vZGUgdGhhdCBn
ZXRzIHRoZSB2YWx1ZSBvZiB0aGUgJ2EnIHZhcmlhYmxlLgorLy8gQ29uY2VwdHVhbGx5LCB0aGlz
IG5vZGUgY2FuIGJlIGZ1cnRoZXIgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyAobm90ZSB0
aGF0IHRoaXMKKy8vIHBhcnRpY3VsYXIgbG93ZXJpbmcgbmV2ZXIgYWN0dWFsbHkgaGFwcGVucyAt
IHdlIHNraXAgdGhpcyBzdGVwIGFuZCBnbyBzdHJhaWdodCB0bworLy8gTExWTSBJUiAtIGJ1dCBp
dCdzIHN0aWxsIHVzZWZ1bCB0byBzZWUgdGhpcyk6CisvLworLy8gZXhpdElmKEBhIGlzIG5vdCBp
bnQzMik7CisvLyBjb250aW51YXRpb247CisvLworLy8gV2hlcmUgJ2V4aXRJZigpJyBpcyBhIGZ1
bmN0aW9uIHRoYXQgd2lsbCBleGl0IGlmIHRoZSBhcmd1bWVudCBpcyB0cnVlLCBhbmQKKy8vICdj
b250aW51YXRpb24nIGlzIHRoZSBzdHVmZiB0aGF0IHdlIHdpbGwgZG8gYWZ0ZXIgdGhlIGV4aXRJ
ZigpIGNoZWNrLiAoTm90ZSB0aGF0CisvLyBGVEwgcmVmZXJzIHRvICdleGl0SWYoKScgYXMgJ3Nw
ZWN1bGF0ZSgpJywgd2hpY2ggaXMgaW4gbGluZSB3aXRoIERGRyB0ZXJtaW5vbG9neS4pCisvLyBU
aGlzIHRoZW4gZ2V0cyBicm9rZW4gZG93biB0byB0aGUgZm9sbG93aW5nIExMVk0gSVIsIGFzc3Vt
aW5nIHRoYXQgJTAgaXMgdGhlIExMVk0KKy8vIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdmFyaWFi
bGUgJ2EnLCBhbmQgJTEgaXMgdGhlIExMVk0gdmFsdWUgZm9yIHZhcmlhYmxlICdiJzoKKy8vCisv
LyAgICUyID0gLi4uIC8vIHRoZSBwcmVkaWN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gJ0BhIGlzIG5v
dCBpbnQzMicKKy8vICAgYnIgaTEgJTIsIGxhYmVsICUzLCBsYWJlbCAlNAorLy8gOyA8bGFiZWw+
OjMKKy8vICAgY2FsbCB2b2lkIGV4aXRUaHVuazEoJTAsICUxKSAvLyBwYXNzICdhJyBhbmQgJ2In
LCBzaW5jZSB0aGV5J3JlIGJvdGggbGl2ZS1pbi1ieXRlY29kZQorLy8gICB1bnJlYWNoYWJsZQor
Ly8gOyA8bGFiZWw+OjQKKy8vICAgLi4uIC8vIGNvZGUgZm9yIHRoZSBjb250aW51YXRpb24KKy8v
CisvLyBXaGVyZSAnZXhpdFRodW5rMScgaXMgdGhlIElSIHRvIGdldCB0aGUgZXhpdCB0aHVuayBm
b3IgKnRoaXMqIE9TUiBleGl0LiBFYWNoIE9TUgorLy8gZXhpdCB3aWxsIGFwcGVhciB0byBMTFZN
IHRvIGhhdmUgYSBkaXN0aW5jdCBleGl0IHRodW5rLgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGRp
ZG4ndCBoYXZlIHRvIHBhc3MgJzUnLCAnbycsIG9yICdjJyB0byB0aGUgZXhpdCB0aHVuay4gNSBp
cyBhCisvLyBjb25zdGFudCBhbmQgdGhlIERGRyBhbHJlYWR5IGtub3dzIHRoYXQsIGFuZCBjYW4g
YWxyZWFkeSB0ZWxsIHRoZSBPU1IgZXhpdCBtYWNoaW5lcnkKKy8vIHdoYXQgdGhhdCBjb250YW50
IGlzIGFuZCB3aGljaCBieXRlY29kZSB2YXJpYWJsZXMgKGlmIGFueSkgaXQgbmVlZHMgdG8gYmUg
ZHJvcHBlZAorLy8gaW50by4gVGhpcyBpcyBjb252ZXllZCB0byB0aGUgZXhpdCBzdGF0aWNhbGx5
LCB2aWEgdGhlIE9TUkV4aXQgZGF0YSBzdHJ1Y3R1cmUgYmVsb3cuCisvLyBTZWUgdGhlIGNvZGUg
Zm9yIEV4aXRWYWx1ZSBmb3IgZGV0YWlscy4gJ28nIGlzIGFuIGFyZ3VtZW50LCBhbmQgYXJndW1l
bnRzIGFyZSBhbHdheXMKKy8vICJmbHVzaGVkIiAtIGlmIHlvdSBuZXZlciBhc3NpZ24gdGhlbSB0
aGVuIHRoZWlyIHZhbHVlcyBhcmUgc3RpbGwgaW4gdGhlIGFyZ3VtZW50CisvLyBzdGFjayBzbG90
cywgYW5kIGlmIHlvdSBkbyBhc3NpZ24gdGhlbSB0aGVuIHdlIGVhZ2VybHkgc3RvcmUgdGhlbSBp
bnRvIHRob3NlIHNsb3RzLgorLy8gJ2MnIGlzIGRlYWQgaW4gYnl0ZWNvZGUsIGFuZCB0aGUgREZH
IGtub3dzIHRoaXM7IHdlIHN0YXRpY2FsbHkgdGVsbCB0aGUgZXhpdCB0aHVuaworLy8gdGhhdCBp
dCdzIGRlYWQgYW5kIGRvbid0IGhhdmUgdG8gcGFzcyBhbnl0aGluZy4gVGhlIGV4aXQgdGh1bmsg
d2lsbCAiaW5pdGlhbGl6ZSIgaXRzCisvLyB2YWx1ZSB0byBVbmRlZmluZWQuCisvLworLy8gVGhp
cyBhcHByb2FjaCB0byBPU1IgZXhpdCBoYXMgYSBudW1iZXIgb2YgdmlydHVlczoKKy8vCisvLyAt
IEl0IGlzIGFuIGVudGlyZWx5IHVuc3VycHJpc2luZyByZXByZXNlbnRhdGlvbiBmb3IgYSBjb21w
aWxlciB0aGF0IGFscmVhZHkgZ3Jva3MKKy8vICAgQ0ZHLWxpa2UgSVJzIGZvciBDLWxpa2UgbGFu
Z3VhZ2VzLiBBbGwgZXhpc3RpbmcgYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucyBqdXN0Cisv
LyAgIHdvcmsuCisvLworLy8gLSBJdCBsZW5kcyBpdHNlbGYgbmF0dXJhbGx5IHRvIG1vZGVybiBh
cHByb2FjaGVzIHRvIGNvZGUgbW90aW9uLiBGb3IgZXhhbXBsZSwgeW91CisvLyAgIGNvdWxkIHNp
bmsgb3BlcmF0aW9ucyBmcm9tIGFib3ZlIHRoZSBleGl0IHRvIGJlbG93IGl0LCBpZiB5b3UganVz
dCBkdXBsaWNhdGUgdGhlCisvLyAgIG9wZXJhdGlvbiBpbnRvIHRoZSBPU1IgZXhpdCBibG9jay4g
VGhpcyBpcyBib3RoIGxlZ2FsIGFuZCBkZXNpcmFibGUuIEl0IHdvcmtzCisvLyAgIGJlY2F1c2Ug
dGhlIGJhY2tlbmQgc2VlcyB0aGUgT1NSIGV4aXQgYmxvY2sgYXMgYmVpbmcgbm8gZGlmZmVyZW50
IHRoYW4gYW55IG90aGVyLAorLy8gICBhbmQgTExWTSBhbHJlYWR5IHN1cHBvcnRzIHNpbmtpbmcg
aWYgaXQgc2VlcyB0aGF0IGEgdmFsdWUgaXMgb25seSBwYXJ0aWFsbHkgdXNlZC4KKy8vICAgSGVu
Y2UgdGhlcmUgZXhpc3RzIGEgdmFsdWUgdGhhdCBkb21pbmF0ZXMgdGhlIGV4aXQgYnV0IGlzIG9u
bHkgdXNlZCBieSB0aGUgZXhpdAorLy8gICB0aHVuayBhbmQgbm90IGJ5IHRoZSBjb250aW51YXRp
b24sIHNpbmtpbmcgb3VnaHQgdG8ga2ljayBpbiBmb3IgdGhhdCB2YWx1ZS4KKy8vICAgSG9pc3Rp
bmcgb3BlcmF0aW9ucyBmcm9tIGJlbG93IGl0IHRvIGFib3ZlIGl0IGlzIGFsc28gcG9zc2libGUs
IGZvciBzaW1pbGFyCisvLyAgIHJlYXNvbnMuCisvLworLy8gLSBUaGUgbm8tcmV0dXJuIHRhaWwt
Y2FsbCB0byB0aGUgT1NSIGV4aXQgdGh1bmsgY2FuIGJlIHN1YmplY3RlZCB0byBzcGVjaWFsaXpl
ZAorLy8gICBjb2RlLXNpemUgcmVkdWN0aW9uIG9wdGltaXphdGlvbnMsIHRob3VnaCB0aGlzIGlz
IG9wdGlvbmFsLiBGb3IgZXhhbXBsZSwgaW5zdGVhZAorLy8gICBvZiBhY3R1YWxseSBlbWl0dGlu
ZyBhIGNhbGwgYWxvbmcgd2l0aCBhbGwgdGhhdCBnb2VzIHdpdGggaXQgKGxpa2UgcGxhY2luZyB0
aGUKKy8vICAgYXJndW1lbnRzIGludG8gYXJndW1lbnQgcG9zaXRpb24pLCB0aGUgYmFja2VuZCBj
b3VsZCBjaG9vc2UgdG8gc2ltcGx5IGluZm9ybSB1cworLy8gICB3aGVyZSBpdCBoYWQgcGxhY2Vk
IHRoZSBhcmd1bWVudHMgYW5kIGV4cGVjdCB0aGUgY2FsbGVlIChpLmUuIHRoZSBleGl0IHRodW5r
KSB0bworLy8gICBmaWd1cmUgaXQgb3V0IGZyb20gdGhlcmUuIEl0IGNvdWxkIGFsc28gdGVsbCB1
cyB3aGF0IHdlIG5lZWQgdG8gZG8gdG8gcG9wIHN0YWNrLAorLy8gICBhbHRob3VnaCBhZ2Fpbiwg
aXQgZG9lc24ndCBoYXZlIHRvOyBpdCBjb3VsZCBqdXN0IGVtaXQgdGhhdCBjb2RlIG5vcm1hbGx5
LiBUaG91Z2gKKy8vICAgd2UgZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldCwgd2UgY291bGQ7IHRoZSBv
bmx5IHRoaW5nIHRoYXQgd291bGQgY2hhbmdlIG9uIG91ciBlbmQKKy8vICAgaXMgdGhhdCB3ZSdk
IG5lZWQgZmVlZGJhY2sgZnJvbSB0aGUgYmFja2VuZCBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhl
IGFyZ3VtZW50cworLy8gICBhbmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdGhpbmdzIHRoYXQgbmVl
ZCB0byBiZSBkb25lIHRvIHBvcCBzdGFjay4gVGhpcyB3b3VsZAorLy8gICBpbnZvbHZlIHN3aXRj
aGluZyB0aGUgbV92YWx1ZXMgYXJyYXkgdG8gdXNlIHNvbWV0aGluZyBtb3JlIGFraW4gdG8gVmFs
dWVSZWNvdmVyeQorLy8gICByYXRoZXIgdGhhbiB0aGUgY3VycmVudCBFeGl0VmFsdWUsIGFsYmVp
dCBwb3NzaWJseSB3aXRoIHNvbWUgaGFja3MgdG8gYmV0dGVyCisvLyAgIHVuZGVyc3RhbmQgdGhl
IGtpbmRzIG9mIHBsYWNlcyB3aGVyZSB0aGUgTExWTSBiYWNrZW5kIHdvdWxkIHB1dCB2YWx1ZXMu
CisvLworLy8gLSBJdCBjb3VsZCBiZSBleHRlbmRlZCB0byBhbGxvdyB0aGUgYmFja2VuZCB0byBk
byBpdHMgb3duIGV4aXQgaG9pc3RpbmcsIGJ5IHVzaW5nCisvLyAgIGludHJpbnNpY3MgKG9yIG1l
dGEtZGF0YSwgb3Igc29tZXRoaW5nKSB0byBpbmZvcm0gdGhlIGJhY2tlbmQgdGhhdCBpdCdzIHNh
ZmUgdG8KKy8vICAgbWFrZSB0aGUgcHJlZGljYXRlIHBhc3NlZCB0byAnZXhpdElmKCknIG1vcmUg
dHJ1dGh5LgorLy8KKy8vIC0gSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCB3YXRjaHBv
aW50cyAoc2VlIHdlYmtpdC5vcmcvYi8xMTM2NDcpIGJ5IG1ha2luZworLy8gICB0aGUgcHJlZGlj
YXRlIHBhc3NlZCB0byAnZXhpdElmKCknIGJlIGFuIGludHJpbnNpYyB0aGF0IHRoZSBiYWNrZW5k
IGtub3dzIHRvIGJlCisvLyAgIHRydWUgYXQgY29tcGlsZS10aW1lLiBUaGUgYmFja2VuZCBjb3Vs
ZCB0aGVuIHR1cm4gdGhlIGNvbmRpdGlvbmFsIGJyYW5jaCBpbnRvIGEKKy8vICAgcmVwbGFjZWFi
bGUganVtcCwgbXVjaCBsaWtlIHRoZSBERkcgZG9lcy4KKworc3RydWN0IE9TUkV4aXQgOiBwdWJs
aWMgT1NSRXhpdEJhc2UgeworICAgIE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kLCBWYWx1ZUZv
cm1hdCBwcm9maWxlVmFsdWVGb3JtYXQsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsCisg
ICAgICAgIENvZGVPcmlnaW4sIGludCBsYXN0U2V0T3BlcmFuZCwgTFZhbHVlIGV4aXRTdHViQWRk
cmVzcyk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICAKKyAg
ICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3
ZSB3aXNoIHRvIHByb2ZpbGUuCisgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0
IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQorICAgIC8vIG1ldGhvZCBvZiBn
ZXR0aW5nIGEgdmFsdWUgcHJvZmlsZS4gTm90ZSB0aGF0IGFsbCBvZiB0aGUgRXhpdEFyZ3VtZW50
J3MKKyAgICAvLyBhcmUgYWxyZWFkeSBhd2FyZSBvZiB0aGlzIHBvc3NpYmxlIG9mZi1ieS1vbmUs
IHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKyAgICAvLyBjb3JyZWN0IHRoZW0uCisgICAgVmFsdWVG
b3JtYXQgbV9wcm9maWxlVmFsdWVGb3JtYXQ7CisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJv
ZmlsZSBtX3ZhbHVlUHJvZmlsZTsKKyAgICAKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsK
KyAgICAKKyAgICAvLyBPZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZv
ciB0aGlzIGV4aXQuCisgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIExW
YWx1ZSBtX2V4aXRTdHViQWRkcmVzczsgLy8gRklYTUU6IE1vdmUgdGhpcyBvdXQgb2YgT1NSRXhp
dCwgc28gaXQgZG9lc24ndCBwb2xsdXRlIENvZGVCbG9jay4KKyAgICAKKyAgICBpbnQgbV9sYXN0
U2V0T3BlcmFuZDsKKyAgICAKKyAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOworICAg
IAorICAgIHZvaWQgc2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hh
YmxlSnVtcCk7CisgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENv
ZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb0Zv
cndhcmQoCisgICAgICAgIERGRzo6QmFzaWNCbG9jayosIERGRzo6Tm9kZSogY3VycmVudE5vZGUs
IHVuc2lnbmVkIG5vZGVJbmRleCwKKyAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUmLCBWZWN0
b3I8TFZhbHVlPiYgYXJndW1lbnRzKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT1NSRXhpdF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RlRMVmFsdWVGb3JtYXQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6RlRMOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgVmFsdWVGb3JtYXQgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0
KSB7CisgICAgY2FzZSBJbnZhbGlkVmFsdWVGb3JtYXQ6CisgICAgICAgIG91dC5wcmludCgiSW52
YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAg
ICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
Rm9ybWF0VUludDMyOgorICAgICAgICBvdXQucHJpbnQoIlVJbnQzMiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdEJvb2xlYW46CisgICAgICAgIG91dC5wcmludCgiQm9v
bGVhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdEpTVmFsdWU6Cisg
ICAgICAgIG91dC5wcmludCgiSlNWYWx1ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
YWx1ZUZvcm1hdERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExWYWx1ZUZvcm1hdF9oCisjZGVmaW5lIEZUTFZh
bHVlRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCisvLyBOb3RlIHRoYXQgdGhpcyBpcyBhd2t3YXJkbHkgc2ltaWxh
ciB0byBEYXRhRm9ybWF0IGluIG90aGVyIHBhcnRzIG9mIEpTQywgZXhjZXB0IHRoYXQKKy8vIHVu
bGlrZSBEYXRhRm9ybWF0IGFuZCBsaWtlIFZhbHVlUmVjb3ZlcnksIGl0IGRpc3Rpbmd1aXNoZXMg
YmV0d2VlbiBVSW50MzIgYW5kIEludDMyLgorCitlbnVtIFZhbHVlRm9ybWF0IHsKKyAgICBJbnZh
bGlkVmFsdWVGb3JtYXQsCisgICAgVmFsdWVGb3JtYXRJbnQzMiwKKyAgICBWYWx1ZUZvcm1hdFVJ
bnQzMiwKKyAgICBWYWx1ZUZvcm1hdEJvb2xlYW4sCisgICAgVmFsdWVGb3JtYXRKU1ZhbHVlLAor
ICAgIFZhbHVlRm9ybWF0RG91YmxlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkZUTDo6VmFsdWVGb3JtYXQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMVmFsdWVGb3JtYXRfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFZhbHVlU291
cmNlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCit2b2lkIFZhbHVlU291cmNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIFNvdXJjZU5vdFNldDoKKyAgICAg
ICAgb3V0LnByaW50KCJTb3VyY2VOb3RTZXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiVmFsdWVJbkpTU3RhY2siKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzJJbkpTU3RhY2s6CisgICAgICAgIG91dC5wcmlu
dCgiSW50MzJJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlSW5K
U1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluSlNTdGFjayIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZUluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIlZhbHVl
SW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzJJbkxvY2FsczoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnQzMkluTG9jYWxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEJvb2xlYW5JbkxvY2FsczoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuSW5Mb2NhbHMi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6CisgICAgICAgIG91
dC5wcmludCgiRG91YmxlSW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJn
dW1lbnRzU291cmNlOgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50c1NvdXJjZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CisgICAgICAgIG91dC5wcmludCgi
U291cmNlSXNEZWFkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEhhdmVOb2RlOgorICAg
ICAgICBvdXQucHJpbnQoIk5vZGUoIiwgbm9kZSgpLCAiKSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExWYWx1ZVNvdXJjZV9oCisjZGVmaW5lIEZUTFZhbHVl
U291cmNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworZW51bSBWYWx1ZVNvdXJj
ZUtpbmQgeworICAgIFNvdXJjZU5vdFNldCwKKyAgICBWYWx1ZUluSlNTdGFjaywKKyAgICBJbnQz
MkluSlNTdGFjaywKKyAgICBEb3VibGVJbkpTU3RhY2ssCisgICAgVmFsdWVJbkxvY2FscywKKyAg
ICBJbnQzMkluTG9jYWxzLAorICAgIEJvb2xlYW5JbkxvY2FscywKKyAgICBEb3VibGVJbkxvY2Fs
cywKKyAgICBBcmd1bWVudHNTb3VyY2UsCisgICAgU291cmNlSXNEZWFkLAorICAgIEhhdmVOb2Rl
Cit9OworCitjbGFzcyBWYWx1ZVNvdXJjZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQor
ICAgICAgICA6IG1fdmFsdWUoU291cmNlTm90U2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZXhwbGljaXQgVmFsdWVTb3VyY2UoVmFsdWVTb3VyY2VLaW5kIGtpbmQpCisgICAgICAgIDogbV92
YWx1ZShraW5kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2Uo
REZHOjpOb2RlKiBub2RlKQorICAgICAgICA6IG1fdmFsdWUoYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4obm9kZSkpCisgICAgeworICAgIH0KKyAgICAKKyAgICBWYWx1ZVNvdXJjZUtpbmQoKSBraW5k
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlIDwgc3RhdGljX2Nhc3Q8dWludHB0
cl90PihIYXZlTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVTb3Vy
Y2VLaW5kPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEhhdmVOb2RlOworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBTb3VyY2VOb3RT
ZXQ7IH0KKyAgICAKKyAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
REZHOjpOb2RlKj4obV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVpbnRwdHJfdCBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExWYWx1ZVNvdXJjZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196565</attachid>
            <date>2013-04-04 18:46:15 -0700</date>
            <delta_ts>2013-04-05 16:47:51 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84101</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3NjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEzLTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBoYXZlIE9TUiBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6
CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6
T1NSRXhpdEJhc2UpOgorICAgICAgICAoT1NSRXhpdEJhc2UpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OnJlcHJlc2VudGF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRWYWx1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0VmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpkZWFkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFjayk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
Ojphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFZhbHVlOjppc0luSlNTdGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0Nv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAg
ICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChPU1JF
eGl0KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExW
YWx1ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorCiAy
MDEzLTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91
cnRoVGllcjogcHV0IERGRyBkYXRhIGludG8gYSBERkc6OkpJVENvZGUsIGFuZCBwdXQgY29tbW9u
IERGRyBhbmQgRlRMIGRhdGEgaW50byBzb21ldGhpbmcgYWNjZXNzaWJsZSBmcm9tIGJvdGggREZH
OjpKSVRDb2RlIGFuZCBGVEw6OkpJVENvZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxNDc2MDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDYgKzE5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBseU9mZnNldChsYWJlbC5t
X2xhYmVsKS5tX29mZnNldDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBvZmZzZXRPZihQYXRjaGFi
bGVKdW1wIGp1bXApCisgICAgeworICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQoanVtcC5tX2p1
bXAubV9sYWJlbCkubV9vZmZzZXQ7CisgICAgfQorCiAgICAgLy8gVXBvbiBjb21wbGV0aW9uIG9m
IGFsbCBwYXRjaGluZyAnRklOQUxJWkVfQ09ERSgpJyBzaG91bGQgYmUgY2FsbGVkIG9uY2UgdG8K
ICAgICAvLyBjb21wbGV0ZSBnZW5lcmF0aW9uIG9mIHRoZSBjb2RlLiBBbHRlcm5hdGl2ZWx5LCBj
YWxsCiAgICAgLy8gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYg
eW91IGhhdmUgeW91ciBvd24gd2F5IG9mCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDcgKzk1LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0KKyAgICAgICAgICAg
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwog
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAg
cm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChTcGVjSW50MzIpOwogICAgICAgICBl
bHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMTQ3NjA4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNiArNTEsNyBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBo
KE5vZGVUCiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoIW5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyh0
eXBlKSAmJiAhbmVlZHNPU1JGb3J3YXJkUmV3aXJpbmcodHlwZSkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNiArMjg3LDI1IEBAIGlubGluZSBOb2Rl
RmxhZ3MgZGVmYXVsdEZsYWdzKE5vZGVUeXBlIG8KICAgICB9CiB9CiAKK2lubGluZSBib29sIG5l
ZWRzT1NSQmFja3dhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKK3sKKyAgICByZXR1cm4gb3AgPT0g
VUludDMyVG9OdW1iZXI7Cit9CisKK2lubGluZSBib29sIG5lZWRzT1NSRm9yd2FyZFJld2lyaW5n
KE5vZGVUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEludDMyVG9Eb3Vi
bGU6CisgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJ
KHJldmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1
ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNp
Z25lZCByZWNvdmVyeUluZGV4KQotICAgIDogbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2Up
CisgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKKyAgICAs
IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFs
dWVQcm9maWxlKQogICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX2NvZGVP
cmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCi0gICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZShtX2NvZGVPcmlnaW4pCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRl
eCkKICAgICAsIG1fd2F0Y2hwb2ludEluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKLSAgICAsIG1fa2luZChraW5kKQotICAgICwgbV9jb3VudCgwKQogICAgICwgbV9z
dHJlYW1JbmRleChzdHJlYW1JbmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xh
c3RTZXRPcGVyYW5kKQogewpAQCAtNzMsNTcgKzcxLDE0IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVj
dEp1bXAoTGlua0J1ZmZlciYgbGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVm
ZmVyLm9mZnNldE9mKGxhYmVsKTsKIH0KIAotYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2spCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3Vu
dCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFBy
b21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOwotICAgIAotICAgIGlmIChtX2tpbmQg
PT0gQXJndW1lbnRzRXNjYXBlZCkgewotICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxs
eS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50
cyBleGNhcGVkOwotICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3Nv
Y2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRl
ID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOwotICAgIH0gZWxzZQotICAgICAgICBleGl0U2l0
ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJ
bmRleCwgbV9raW5kKTsKLSAgICAKLSAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmls
ZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKLX0KLQogdm9pZCBP
U1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50
Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292
ZXJ5KQogewotICAgIC8vIENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBT
ZXRMb2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0
aCB0aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVj
b3ZlcnkuCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIXZhbHVlUmVjb3Zl
cnkKLSAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAg
ICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBu
b2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbi4gQWxzbyB0cmFjayB0aGUgbGFz
dCBtb3YgaGludAotICAgIC8vIG9uIHRoaXMgbm9kZS4KLSAgICB1bnNpZ25lZCBpbmRleEluQmxv
Y2sgPSBub2RlSW5kZXggKyAxOwotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIE5vZGUqIGxhc3RN
b3ZIaW50ID0gMDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sgPT0g
YmxvY2stPnNpemUoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0dXJu
LiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZlCi0g
ICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0ZWNv
ZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhlY3V0
ZSB0aGF0IGJ5dGVjb2RlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IGJsb2NrLT5h
dChpbmRleEluQmxvY2spOwotICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYg
bm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0TW92SGludCA9
IG5vZGU7Ci0gICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAg
IH0KLSAgICAKKyAgICBOb2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGRv
U2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgs
ICEhdmFsdWVSZWNvdmVyeSk7CisKICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCiAgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29k
ZU9yaWdpbjsKICAgICAKICAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgog
I2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODQs
NyArODUsNyBAQCBwcml2YXRlOgogLy8KIC8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cg
dG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8gZ29pbmcgaW50byBiYXNlbGluZSBj
b2RlLgotc3RydWN0IE9TUkV4aXQgeworc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJh
c2UgewogICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG1fY29kZTsKQEAgLTk0LDIxICs5NSwxMCBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAK
ICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgQ29kZU9yaWdpbiBtX2Nv
ZGVPcmlnaW47Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAg
ICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CiAgICAgdW5zaWduZWQgbV93YXRjaHBv
aW50SW5kZXg7CiAgICAgCi0gICAgRXhpdEtpbmQgbV9raW5kOwotICAgIHVpbnQzMl90IG1fY291
bnQ7Ci0gICAgCi0gICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2Rl
QmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKLSAgICB7
Ci0gICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdB
c0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOwot
ICAgIH0KLQogICAgIHZvaWQgc2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29k
ZU9mZnNldEFzSnVtcCgpIGNvbnN0OwogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9u
Rm9yUmVwYXRjaChDb2RlQmxvY2sqKSBjb25zdDsKQEAgLTEyMCw5ICsxMTAsNiBAQCBzdHJ1Y3Qg
T1NSRXhpdCB7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgCiAgICAgUmVmUHRyPFZh
bHVlUmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2Nr
KiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwogfTsKIAogc3Ry
dWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCiti
b29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCit7Cisg
ICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4
aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRT
aXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGcmVxdWVudEV4aXRTaXRl
IGV4aXRTaXRlOworICAgIAorICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgewor
ICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hl
cmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOworICAgICAgICAvLyB0
aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3Vs
YXIgaW5zdHJ1Y3Rpb24uCisgICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tp
bmQpOworICAgIH0gZWxzZQorICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKKyAgICAKKyAg
ICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayht
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVu
dEV4aXRTaXRlKGV4aXRTaXRlKTsKK30KKworYm9vbCBPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JG
b3J3YXJkQ29udmVyc2lvbigKKyAgICBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5v
ZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAorICAgIE5vZGUq
JiBub2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpCit7CisgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIg
dGhlIGN1cnJlbnQgbm9kZSBpcyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2Fz
IGEKKyAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdl
J3ZlIHByb3ZpZGVkIGEgdmFsdWVSZWNvdmVyeS4KKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICAmJiAhaGFzVmFsdWVSZWNvdmVyeQorICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNv
bnRhaW5zTW92SGludCgpKSB7CisgICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5v
ZGVJbmRleCAtIDEpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+
Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRM
b2NhbC0+Y29kZU9yaWdpbiA9PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAg
IAorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3Ry
dWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBoaW50CisgICAgLy8gb24gdGhpcyBub2Rl
LgorICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7CisgICAgbm9kZSA9
IDA7CisgICAgbGFzdE1vdkhpbnQgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGlu
ZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBU
aGlzIGlzIHNhZmUKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMg
aXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bworICAgICAgICAg
ICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBKdW1wKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgIGlmIChub2RlLT5j
b250YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKKyAgICAg
ICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4g
IT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aW5kZXhJbkJsb2NrKys7CisgICAgfQorICAgIAorICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2lu
ICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkV4aXRCYXNlX2gKKyNkZWZpbmUgREZHT1NS
RXhpdEJhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFByb3ZpZGVzIGZv
ciB0aGUgT1NSIGV4aXQgcHJvZmlsaW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gYmV0
d2VlbiB0aGUgREZHCisvLyBhbmQgdGhlIEZUTC4KKworc3RydWN0IE9TUkV4aXRCYXNlIHsKKyAg
ICBPU1JFeGl0QmFzZShFeGl0S2luZCBraW5kLCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdEtp
bmQgbV9raW5kOworICAgIHVpbnQzMl90IG1fY291bnQ7CisgICAgCisgICAgQ29kZU9yaWdpbiBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXND
b3VudGFibGUobV9raW5kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHBy
b2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBmb3J3YXJkIGNvbnZlcnNpb24gaXMgcmVhbGx5IG5lZWRlZC4KKyAgICBib29sIGRvU2VhcmNo
Rm9yRm9yd2FyZENvbnZlcnNpb24oCisgICAgICAgIEJhc2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50
Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgICAg
IE5vZGUqJiBuZXh0QkNOb2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpOworCitwcml2YXRlOgorICAg
IGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZn
Q29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHT1NSRXhpdEJhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3NzcsNyArMTc3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBl
cygKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJl
ZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogCiAgICAgICAgIEpTVmFs
dWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMx
LDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50MzJJbkpT
U3RhY2spOwotICAgICAgICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlz
Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQ2VsbEluSlNT
dGFjayk7CiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5KU1N0YWNrKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmNwcAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBA
IHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKG5vZGUgJiYgbm9kZS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAg
aWYgKG5vZGUgJiYgbmVlZHNPU1JCYWNrd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7CiAgICAg
ICAgICAgICAgICAgTWluaWZpZWRJRCBpZCA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAg
ICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBjb2Rl
QmxvY2ssIGdyYXBoLmF0KGlkKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MjU3LDYgKzI1Nyw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGVBc0ludDMySUQgPSBpZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFuZWVkc09TUkZvcndhcmRSZXdpcmluZyhub2RlLT5v
cCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdEFyZ3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50LmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4
aXRBcmd1bWVudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiYXJnIiwgYXJndW1lbnQoKSwgIiBhcyAiLCBmb3JtYXQoKSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJndW1lbnRfaAorI2RlZmluZSBGVExFeGl0QXJn
dW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc3RydWN0IEV4aXRB
cmd1bWVudFJlcHJlc2VudGF0aW9uIHsKKyAgICBWYWx1ZUZvcm1hdCBmb3JtYXQ7CisgICAgdW5z
aWduZWQgYXJndW1lbnQ7Cit9OworCitjbGFzcyBFeGl0QXJndW1lbnQgeworcHVibGljOgorICAg
IEV4aXRBcmd1bWVudCgpCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9
IEludmFsaWRWYWx1ZUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50KFZhbHVl
Rm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAgICAgICBtX3JlcHJl
c2VudGF0aW9uLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbi5hcmd1
bWVudCA9IGFyZ3VtZW50OworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBFeGl0QXJndW1lbnQo
RXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pCisgICAgeworICAgICAg
ICBtX3JlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb247CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPT0g
SW52YWxpZFZhbHVlRm9ybWF0OyB9CisgICAgCisgICAgVmFsdWVGb3JtYXQgZm9ybWF0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgICAgIHJldHVybiBtX3JlcHJl
c2VudGF0aW9uLmZvcm1hdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fcmVw
cmVzZW50YXRpb24uYXJndW1lbnQ7CisgICAgfQorICAgIAorICAgIEV4aXRBcmd1bWVudCB3aXRo
Rm9ybWF0KFZhbHVlRm9ybWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBFeGl0QXJn
dW1lbnQoZm9ybWF0LCBhcmd1bWVudCgpKTsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcHJlc2Vu
dGF0aW9uOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIG1fcmVwcmVzZW50YXRp
b247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRBcmd1bWVudF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
I2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisKK0V4aXRUaHVu
a0dlbmVyYXRvcjo6RXhpdFRodW5rR2VuZXJhdG9yKFN0YXRlJiBzdGF0ZSkKKyAgICA6IENDYWxs
SGVscGVycygmc3RhdGUuZ3JhcGgubV9nbG9iYWxEYXRhLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9j
aykKK3sKK30KKworRXhpdFRodW5rR2VuZXJhdG9yOjp+RXhpdFRodW5rR2VuZXJhdG9yKCkKK3sK
K30KKwordm9pZCBFeGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCwg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbykKK3sKKyAgICBpbmZvLm1fdGh1bmtMYWJlbCA9
IGxhYmVsKCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoaW5kZXgpLCBHUFJJbmZvOjpub25BcmdH
UlAwKTsKKyAgICBpbmZvLm1fdGh1bmtKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRv
ci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1
bmtHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFRodW5r
R2VuZXJhdG9yX2gKKyNkZWZpbmUgRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdD
Q2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFz
cyBPU1JFeGl0Q29tcGlsYXRpb25JbmZvOworY2xhc3MgU3RhdGU7CisKK2NsYXNzIEV4aXRUaHVu
a0dlbmVyYXRvciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgeworcHVibGljOgorICAgIEV4aXRUaHVu
a0dlbmVyYXRvcihTdGF0ZSYgc3RhdGUpOworICAgIH5FeGl0VGh1bmtHZW5lcmF0b3IoKTsKKyAg
ICAKKyAgICB2b2lkIGVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCwgT1NSRXhpdENvbXBpbGF0aW9u
SW5mbyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGh1bmtHZW5lcmF0b3JfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKwordm9pZCBFeGl0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgSW52YWxpZEV4aXRWYWx1ZToKKyAgICAg
ICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRW
YWx1ZURlYWQ6CisgICAgICAgIG91dC5wcmludCgiRGVhZCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudCgi
LCBleGl0QXJndW1lbnQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZh
bHVlQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQoIiwgY29uc3RhbnQoKSwg
IikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAg
ICAgICBvdXQucHJpbnQoIkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMRXhpdFZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFZhbHVlX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJG
VExFeGl0QXJndW1lbnQuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8g
VGhpcyBpcyBsaWtlIFZhbHVlUmVjb3ZlcnksIGJ1dCByZXNwZWN0cyB0aGUgd2F5IHRoYXQgdGhl
IEZUTCBkb2VzIE9TUgorLy8gZXhpdDogdGhlIGxpdmUgbm9uLWNvbnN0YW50IG5vbi1mbHVzaGVk
IHZhbHVlcyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cworLy8gdG8gYSBub3JldHVybiB0YWlsIGNh
bGwuIEV4aXRWYWx1ZSBpcyBoZW5jZSBtb3N0bHkgcmVzcG9uc2libGUgZm9yCisvLyB0ZWxsaW5n
IHVzIHRoZSBtYXBwaW5nIGJldHdlZW4gb3BlcmFuZHMgaW4gYnl0ZWNvZGUgYW5kIHRoZSBhcmd1
bWVudHMgdG8KKy8vIHRoZSBjYWxsLgorCitlbnVtIEV4aXRWYWx1ZUtpbmQgeworICAgIEludmFs
aWRFeGl0VmFsdWUsCisgICAgRXhpdFZhbHVlRGVhZCwKKyAgICBFeGl0VmFsdWVBcmd1bWVudCwK
KyAgICBFeGl0VmFsdWVDb25zdGFudAorICAgIEV4aXRWYWx1ZUluSlNTdGFjaywKKyAgICBFeGl0
VmFsdWVJbkpTU3RhY2tBc0ludDMyLAorICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzQm9vbGVhbiwK
KyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZQorfTsKKworY2xhc3MgRXhpdFZhbHVlIHsK
K3B1YmxpYzoKKyAgICBFeGl0VmFsdWUoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkRXhpdFZh
bHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQgPT0gSW52YWxpZEV4aXRWYWx1ZTsgfQorICAgIAorICAgIHN0YXRpYyBFeGl0
VmFsdWUgZGVhZCgpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gRXhpdFZhbHVlRGVhZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3RhY2soKQorICAgIHsKKyAgICAg
ICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUlu
SlNTdGFjazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGlj
IEV4aXRWYWx1ZSBpbkpTU3RhY2tBc0ludDMyKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMy
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZh
bHVlIGluSlNTdGFja0FzQm9vbGVhbigpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNCb29sZWFuOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVl
IGluSlNTdGFja0FzRG91YmxlKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBjb25z
dGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUNvbnN0YW50OworICAgICAgICByZXN1bHQu
dS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgZXhpdEFyZ3VtZW50KGNvbnN0
IEV4aXRBcmd1bWVudCYgYXJndW1lbnQpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlQXJndW1lbnQ7CisgICAgICAgIHJl
c3VsdC51LmFyZ3VtZW50ID0gYXJndW1lbnQucmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVlS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gRXhpdFZhbHVlRGVhZDsgfQorICAgIGJvb2wgaXNJbkpTU3RhY2tTb21laG93
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2Ug
RXhpdFZhbHVlSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50
MzI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNCb29sZWFuOgorICAgICAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IEV4
aXRWYWx1ZUNvbnN0YW50OyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4g
a2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50OyB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50IGV4
aXRBcmd1bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNBcmd1bWVudCgpKTsK
KyAgICAgICAgcmV0dXJuIEV4aXRBcmd1bWVudCh1LmFyZ3VtZW50KTsKKyAgICB9CisgICAgCisg
ICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNDb25z
dGFudCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh1LmNvbnN0YW50KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIEV4aXRWYWx1ZUtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAgICAgICAgRXhp
dEFyZ3VtZW50UmVwcmVzZW50YXRpb24gYXJndW1lbnQ7CisgICAgICAgIEVuY29kZWRKU1ZhbHVl
IGNvbnN0YW50OworICAgIH0gdTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFZhbHVlX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgJKHJl
dmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVk
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVOQUJMRShGVExf
SklUKQogCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgorI2luY2x1ZGUgIkZUTFZhbHVl
Rm9ybWF0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDEsMTgg
KzQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogLy8gdXNlIHRoaXMgaW4g
c2l0dWF0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBnb29kIHdheSB0byBzYXkgd2hhdCBub2RlIHRo
ZSB2YWx1ZSBjYW1lCiAvLyBmcm9tLgogCi0vLyBOb3RlIHRoYXQgdGhpcyBpcyBhd2t3YXJkbHkg
c2ltaWxhciB0byBEYXRhRm9ybWF0IGluIG90aGVyIHBhcnRzIG9mIEpTQywgZXhjZXB0IHRoYXQK
LS8vIHVubGlrZSBEYXRhRm9ybWF0IGFuZCBsaWtlIFZhbHVlUmVjb3ZlcnksIGl0IGRpc3Rpbmd1
aXNoZXMgYmV0d2VlbiBVSW50MzIgYW5kIEludDMyLgotCi1lbnVtIFZhbHVlRm9ybWF0IHsKLSAg
ICBJbnZhbGlkVmFsdWVGb3JtYXQsCi0gICAgVmFsdWVGb3JtYXRJbnQzMiwKLSAgICBWYWx1ZUZv
cm1hdFVJbnQzMiwKLSAgICBWYWx1ZUZvcm1hdEJvb2xlYW4sCi0gICAgVmFsdWVGb3JtYXRKU1Zh
bHVlLAotICAgIFZhbHVlRm9ybWF0RG91YmxlCi19OwotCiBjbGFzcyBGb3JtYXR0ZWRWYWx1ZSB7
CiBwdWJsaWM6CiAgICAgRm9ybWF0dGVkVmFsdWUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxNDc2MDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0Miwx
MSBAQCBKSVRDb2RlOjp+SklUQ29kZSgpCiAgICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9uRW5n
aW5lKG1fZW5naW5lKTsKIH0KIAordm9pZCBKSVRDb2RlOjppbml0aWFsaXplRXhpdFRodW5rcyhD
b2RlUmVmIGV4aXRUaHVua3MpCit7CisgICAgbV9leGl0VGh1bmtzID0gZXhpdFRodW5rczsKK30K
Kwogdm9pZCBKSVRDb2RlOjppbml0aWFsaXplQ29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVu
Z2luZSwgQ29kZVJlZiBlbnRyeXBvaW50KQogewogICAgIG1fZW5naW5lID0gZW5naW5lOwpAQCAt
OTcsNiArMTAyLDExIEBAIGJvb2wgSklUQ29kZTo6Y29udGFpbnModm9pZCopCiAgICAgcmV0dXJu
IGZhbHNlOwogfQogCitDb2RlUHRyIEpJVENvZGU6OmV4aXRUaHVua3MoKQoreworICAgIHJldHVy
biBtX2V4aXRUaHVua3MuY29kZSgpOworfQorCiBKSVRDb2RlKiBKSVRDb2RlOjpmdGwoKQogewog
ICAgIHJldHVybiB0aGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRD
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgJKHJldmlzaW9uIDE0NzYwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTYgQEAgcHVibGljOgogICAgIHNp
emVfdCBzaXplKCk7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKik7CiAgICAgCisgICAgdm9pZCBp
bml0aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmKTsKICAgICB2b2lkIGluaXRpYWxpemVDb2RlKExM
Vk1FeGVjdXRpb25FbmdpbmVSZWYsIENvZGVSZWYgZW50cnlwb2ludCk7CiAgICAgCisgICAgQ29k
ZVB0ciBleGl0VGh1bmtzKCk7CisgICAgCiAgICAgSklUQ29kZSogZnRsKCk7CiAgICAgREZHOjpD
b21tb25EYXRhKiBkZmdDb21tb24oKTsKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9u
OworICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAgIAogcHJpdmF0
ZToKICAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdXNlIG91ciBvd24gSklUIG1lbW9yeSBhbGxv
Y2F0b3IsIGFuZCB3ZSBzaG91bGRuJ3QgaGF2ZSB0bwpAQCAtNjEsNiArNjUsNyBAQCBwcml2YXRl
OgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MTkK
ICAgICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIG1fZW5naW5lOwogICAgIENvZGVSZWYgbV9lbnRy
eXBvaW50OworICAgIENvZGVSZWYgbV9leGl0VGh1bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1Rv
TExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE0NzYwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwx
MCBAQAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTEFic3Ry
YWN0SGVhcFJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIK
ICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgor
I2luY2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNTcsNiArNTksOCBAQCBwdWJsaWM6CiAgICAg
ICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3Nb
MF0tPnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwg
c3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xv
Y2FsczY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0
SGVhZCkKKyAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBo
Lm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9leGl0VGh1bmtHZW5l
cmF0b3Ioc3RhdGUpCiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKICAgICB7CiAgICAg
fQpAQCAtODAsNiArODQsOSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2xvY2FsczY0W2luZGV4
XSA9IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50NjQpOwogICAgICAgICB9
CiAgICAgICAgIAorICAgICAgICBtX2luaXRpYWxpemF0aW9uID0gYXBwZW5kQmFzaWNCbG9jayht
X2Z0bFN0YXRlLmZ1bmN0aW9uKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXph
dGlvbik7CisgICAgICAgIAogICAgICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnBhcmFtKDApOwog
ICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIp
OwogICAgICAgICBtX3RhZ01hc2sgPSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOwpAQCAtMTA2
LDYgKzExMyw4IEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBi
bG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Js
b2NrSW5kZXgpCiAgICAgICAgICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
IAorICAgICAgICBsaW5rT1NSRXhpdHMoKTsKIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0
aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgbV9mdGxTdGF0ZS5kdW1wU3RhdGUoImFmdGVyIGxv
d2VyaW5nIik7CkBAIC0xNTEsOCArMTYwLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHRy
YW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFNldCB1
cCB0aGUgT1NSIHN0b3J5IGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcgYXJndW1l
bnRzLCBldmVyeXRoaW5nIGlzIGluIHRoZSBzdGFjay4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNv
dXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CiAgICAgICAg
ICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKQEAgLTE3MCw3ICsxODAs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9z
c2libGUoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YXJpYWJsZS0+c2hv
dWxkVXNlRG91YmxlRm9ybWF0KCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1l
bnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90SW50MzIoanNW
YWx1ZSkpOwpAQCAtMjE2LDEzICsyMjYsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gbWFrZSBJ
UiBkdW1wcyBlYXNpZXIgdG8gcmVhZC4KICAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ss
IG1fbmV4dExvd0Jsb2NrKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
dHJhY2sgdGhlIE9TUiBzaXR1YXRpb24gaGVyZS4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBpbml0aWFsaXplT1NSRXhp
dFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIG1faW50MzJWYWx1ZXMuY2xlYXIo
KTsKICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmNsZWFyKCk7CiAgICAgICAgIG1fYm9vbGVhblZh
bHVlcy5jbGVhcigpOwogICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuY2xlYXIoKTsKKyAgICAgICAg
bV90aW1lVG9MaXZlLmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBtX3N0YXRlLnJlc2V0KCk7
CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJsb2NrKTsKQEAgLTI0MCw5
ICsyNTAsNiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRl
RWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKICAgICAgICAgCi0gICAg
ICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuOyAv
LyBGSVhNRTogSW1wbGVtZW50IE9TUiBtYWdpYyBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCi0gICAgICAgIAogICAgICAgICBtX2RpcmVjdGlvbiA9
IChtX25vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlv
biA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+b3AoKSkgewpAQCAtMjU4LDYgKzI2NSwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNl
dExvY2FsOgogICAgICAgICAgICAgY29tcGlsZVNldExvY2FsKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgICAg
ICBjb21waWxlWm9tYmllSGludCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TW92SGludEFuZENoZWNrOgogICAgICAgICAgICAgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTIsNiArMzY1LDExIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgREZHX05PREVfRE9fVE9f
Q0hJTERSRU4obV9ncmFwaCwgbV9ub2RlLCB1c2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1f
bm9kZS0+aGFzUmVzdWx0KCkpCisgICAgICAgICAgICBtX3RpbWVUb0xpdmUuYWRkKG1fbm9kZSwg
bV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAKICAgICAgICAgaWYgKHNob3Vs
ZEV4ZWN1dGVFZmZlY3RzKQogICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlRWZmZWN0cyhub2Rl
SW5kZXgpOwogICAgIH0KQEAgLTM2OCw4ICszODYsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIGNvbXBpbGVHZXRMb2NhbCgpCiAgICAgeworICAgICAgICAvLyBHZXRMb2NhbCBpcyBvbmUg
b2YgdGhlIGZldyBub2RlcyB0aGF0IG1heSBiZSBsZWZ0IGJlaGluZCwgd2l0aCAhc2hvdWxkR2Vu
ZXJhdGUoKS4KKyAgICAgICAgaWYgKCFtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsK
ICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJh
bmQodmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHByZWRpY3Rpb24g
PT0gU3BlY05vbmUpIHsKQEAgLTQyMCwxMyArNDQyLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAg
dm9pZCBjb21waWxlU2V0TG9jYWwoKQogICAgIHsKKyAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9u
b2RlKTsKKyAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAg
ICBib29sIG5lZWRzRmx1c2hpbmcgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhtX25vZGUp
OwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGludCBmb3IgT1NS
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIzCi0gICAgICAgIAogICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJs
ZSgpKSB7CiAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgp
KSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBkb3VibGVzIGluIEZUTC4K
QEAgLTQzOCwyMSArNDU5LDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0g
bG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZh
bHVlLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAg
ICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGlu
ZykgewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9y
KHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
W3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAg
ICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAg
ICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAg
ICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3Jl
NjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoQ2Vs
bEluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkgewogICAgICAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9kZS0+
Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwot
ICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgICAgIGlmIChu
ZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQobG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOwor
ICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBW
YWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDYwLDE4ICs0ODcs
MzIgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVkKCkpIHsKICAgICAg
ICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkp
KTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVl
U291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgIGlm
IChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRy
ZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1t2
YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTW92SGludCgpCisgICAgeworICAgICAg
ICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVa
b21iaWVIaW50KCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9IG1f
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBk
YXRhLT5sb2NhbCgpOworICAgICAgICBtX3ZhbHVlU291cmNlc1tkYXRhLT5sb2NhbCgpXSA9IFZh
bHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU1v
dkhpbnRBbmRDaGVjaygpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBNb3ZI
aW50IGZvciBPU1IuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM2MjMKKyAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2RlKTsKICAgICAgICAg
c3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgIH0KICAgICAKQEAgLTExMDUsNiArMTE0
NiwyMDIgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UsIGxvd0NlbGwo
ZWRnZSkpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHVzZShOb2RlKiwgRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90
aW1lVG9MaXZlLT5maW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90
aW1lVG9MaXZlLT5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZSk7CisgICAgICAg
IGl0ZXItPnZhbHVlLS07CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRT
dGF0ZUZvckJsb2NrKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVT
b3VyY2VzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJs
b2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2
YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5pc0FyZ3VtZW50c0FsaWFzKCkpIHsKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAg
Ly8gVGhpcyB2YWx1ZSB3aWxsIGhhdmUgYmVlbiBmbHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNv
bWUgZm9ybSBvcgorICAgICAgICAgICAgICAgIC8vIGFub3RoZXIuCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVl
U291cmNlKERvdWJsZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMklu
SlNTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAg
ICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
TG9jYWxzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0g
PSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEJvb2xlYW5JbkxvY2Fscyk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IGFwcGVuZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxv
d1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAorICAgICAgICBT
cGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIGNvbnN0IEZvcm1hdHRlZFZhbHVlJikKKyAg
ICB7CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoCisgICAgICAg
ICAgICBPU1JFeGl0KAorICAgICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBt
X2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKKyAgICAg
ICAgICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4sIG1fbGFzdFNldE9wZXJhbmQsIG1fdmFsdWVT
b3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBtX2Z0bFN0YXRlLm9zckV4aXQuYXBwZW5k
KE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIAorICAgICAgICBPU1JFeGl0JiBl
eGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKKyAgICAgICAgT1NSRXhp
dENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhpdC5sYXN0KCk7CisKKyAg
ICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZhaWxDYXNlLCBjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7CisgICAgICAg
IGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0
LmludFB0cik7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgRXhp
dEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgVmFs
dWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUlu
SlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpp
bkpTU3RhY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50
MzJJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbjMyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIERvdWJsZUluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ld
ID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxzOgorICAgICAgICAgICAgICAgIGFkZEV4
aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1
ZUZvcm1hdEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2FsczY0W2ldKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDMySW5Mb2NhbHM6CisgICAgICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMs
IGksIFZhbHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldChtX2xvY2FsczMyW2ldKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2FsczoKKyAgICAg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFy
Z3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFu
W2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZUlu
TG9jYWxzOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91YmxlcyBpbiBG
VEwuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzYyNAorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFyZ3VtZW50c1Nv
dXJjZToKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50b21Bcmd1bWVu
dHMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzk4NgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNvdXJjZUlzRGVh
ZDoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhdmVOb2RlOiB7Cisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBmdW4hCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0LAor
ICAgICAgICBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjpleGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50KGZvcm1hdCwgYXJndW1lbnRzLnNp
emUoKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsaW5rT1NSRXhpdHMoKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9zckV4aXRUaHVuayA9CisgICAgICAgICAgICBnbG9iYWxEYXRhKCkuZ2V0Q1RJU3R1Yihv
c3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwgdGFyZ2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLmNvZGUoKSk7CisgICAg
ICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhtX2luaXRpYWxpemF0aW9uKTsKKyAgICAgICAg
CisgICAgICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigKKyAgICAgICAgICAgICZnbG9iYWxEYXRh
KCksICZtX2V4aXRUaHVua0dlbmVyYXRvciwgbV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywK
KyAgICAgICAgICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBPU1JF
eGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9mdGxTdGF0ZS5vc3JFeGl0W2ldOworICAgICAg
ICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdFtpXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGluZm8ubV90aHVua0p1bXAs
IHRhcmdldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LnNldCgKKyAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cigKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKKyAg
ICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGV4
aXQubV90aHVua0p1bXApOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgb2JzZXJ2
ZU1vdkhpbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlLT5jb250YWlu
c01vdkhpbnQoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgpICE9IFpvbWJpZUhpbnQpOwor
ICAgICAgICAKKyAgICAgICAgaW50IG9wZXJhbmQgPSBub2RlLT5sb2NhbCgpOworICAgICAgICAK
KyAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG9wZXJhbmQ7CisgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW29wZXJhbmRdID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICB9
CisgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2VsbCogdGFyZ2V0KQogICAgIHsK
ICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ud2Vha1JlZmVyZW5jZXMuYXBwZW5k
KApAQCAtMTE1MSw2ICsxMzg4LDcgQEAgcHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAg
CiAgICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKKyAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxp
emF0aW9uOwogICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsK
ICAgICAKICAgICBMVmFsdWUgbV9jYWxsRnJhbWU7CkBAIC0xMTY1LDExICsxNDAzLDE2IEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAg
SGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2Rl
KiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+
IG1fdGltZVRvTGl2ZTsKICAgICAKICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzQm9vbGVh
bjsKICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzMzI7CiAgICAgT3BlcmFuZHM8TFZhbHVl
PiBtX2xvY2FsczY0OwogICAgIAorICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291
cmNlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICBFeGl0VGh1bmtHZW5lcmF0b3Ig
bV9leGl0VGh1bmtHZW5lcmF0b3I7CisgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwog
ICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwogICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hC
bG9jazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT1NS
RXhpdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworT1NSRXhpdDo6T1NSRXhpdCgKKyAgICBFeGl0S2luZCBleGl0S2luZCwgVmFs
dWVGb3JtYXQgcHJvZmlsZVZhbHVlRm9ybWF0LAorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUgdmFsdWVQcm9maWxlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCisgICAgaW50IGxhc3RT
ZXRPcGVyYW5kLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZM
b2NhbHMpCisgICAgOiBPU1JFeGl0QmFzZShleGl0S2luZCwgY29kZU9yaWdpbikKKyAgICAsIG1f
cHJvZmlsZVZhbHVlRm9ybWF0KHByb2ZpbGVWYWx1ZUZvcm1hdCkKKyAgICAsIG1fdmFsdWVQcm9m
aWxlKHZhbHVlUHJvZmlsZSkKKyAgICAsIG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwg
bV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGxhc3RTZXRP
cGVyYW5kKQorICAgICwgbV92YWx1ZXMobnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxz
KQoreworfQorCitDb2RlTG9jYXRpb25KdW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0
Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIENvZGVMb2Nh
dGlvbkp1bXAoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICAgICAg
ZnRsQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmZ0bCgpLT5leGl0VGh1bmtzKCkuZGF0YUxvY2F0
aW9uKCkpICsKKyAgICAgICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KTsKK30KKwordm9pZCBPU1JF
eGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKAorICAgIERGRzo6QmFzaWNCbG9jayogYmxvY2ssIERGRzo6
Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwKKyAgICBjb25zdCBGb3JtYXR0
ZWRWYWx1ZSAmdmFsdWUsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cykKK3sKKyAgICBOb2Rl
KiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGRvU2VhcmNoRm9yRm9yd2FyZENv
bnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSk7
CisKKyAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdp
bik7CisgICAgCisgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAKKyAg
ICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG92ZXJyaWRkZW5P
cGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG92
ZXJyaWRkZW5PcGVyYW5kOworICAgIAorICAgIC8vIElzIHRoZSB2YWx1ZSBmb3IgdGhpcyBvcGVy
YW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZXhpdCwgb3IgaXMKKyAgICAv
LyBpdCBzb21ldGhpbmcgZWxzZT8gSWYgaXQncyBhbiBhcmd1bWVudCBhbHJlYWR5LCB0aGVuIHJl
cGxhY2UgdGhhdCBhcmd1bWVudDsKKyAgICAvLyBvdGhlcndpc2UgYWRkIGFub3RoZXIgYXJndW1l
bnQuCisgICAgaWYgKG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5pc0FyZ3VtZW50KCkpIHsK
KyAgICAgICAgRXhpdEFyZ3VtZW50IGFyZ3VtZW50ID0gbV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJh
bmRdLmV4aXRBcmd1bWVudCgpOworICAgICAgICBhcmd1bWVudHNbZXhpdEFyZ3VtZW50LmFyZ3Vt
ZW50KCldID0gdmFsdWUudmFsdWUoKTsKKyAgICAgICAgbV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJh
bmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAgICAgICAgICBleGl0QXJndW1lbnQu
d2l0aEZvcm1hdCh2YWx1ZS5mb3JtYXQoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IAorICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICBhcmd1bWVu
dHMuYXBwZW5kKHZhbHVlLnZhbHVlKCkpOworICAgIG1fdmFsdWVzW21fbGFzdFNldE9wZXJhbmRd
ID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAgICAgIEV4aXRBcmd1bWVudCh2YWx1ZS5m
b3JtYXQoKSwgYXJndW1lbnQpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPU1JFeGl0X2gK
KyNkZWZpbmUgRlRMT1NSRXhpdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lm
IEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRG
R0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKKyNpbmNsdWRlICJG
VExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50TGlzdC5oIgorI2lu
Y2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVBy
b2ZpbGUuaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRyYWNrcyBvbmUgT1NS
IGV4aXQgc2l0ZSB3aXRoaW4gdGhlIEZUTCBKSVQuIE9TUiBleGl0IGluIEZUTCB3b3JrcyBieSBk
ZWNvbnN0cnVjdGluZworLy8gdGhlIGNyYXp5IHRoYXQgaXMgT1NSIGRvd24gdG8gc2ltcGxlIFNT
QSBDRkcgcHJpbWl0aXZlcyB0aGF0IGFueSBjb21waWxlciBiYWNrZW5kCisvLyAoaW5jbHVkaW5n
IG9mIGNvdXJzZSBMTFZNKSBjYW4gZ3JvayBhbmQgZG8gbWVhbmluZ2Z1bCB0aGluZ3MgdG8uIEV4
Y2VwdCBmb3IKKy8vIHdhdGNocG9pbnQtYmFzZWQgZXhpdHMsIHdoaWNoIGhhdmVuJ3QgeWV0IGJl
ZW4gaW1wbGVtZW50ZWQgKHNlZSB3ZWJraXQub3JnL2IvMTEzNjQ3KSwKKy8vIGFuIGV4aXQgaXMg
anVzdCBhIGNvbmRpdGlvbmFsIGJyYW5jaCBpbiB0aGUgZW1pdHRlZCBjb2RlIHdoZXJlIG9uZSBk
ZXN0aW5hdGlvbiBpcyB0aGUKKy8vIGNvbnRpbnVhdGlvbiBhbmQgdGhlIG90aGVyIGlzIGEgYmFz
aWMgYmxvY2sgdGhhdCBwZXJmb3JtcyBhIG5vLXJldHVybiB0YWlsLWNhbGwgdG8gYW4KKy8vIGV4
aXQgdGh1bmsuIFRoaXMgdGh1bmsgdGFrZXMgYXMgaXRzIGFyZ3VtZW50cyB0aGUgbGl2ZSBub24t
Y29uc3RhbnQKKy8vIG5vdC1hbHJlYWR5LWFjY291bnRlZC1mb3IgYnl0ZWNvZGUgc3RhdGUuIFRv
IGFwcHJlY2lhdGUgaG93IHRoaXMgd29ya3MgY29uc2lkZXIgdGhlCisvLyBmb2xsb3dpbmcgSmF2
YVNjcmlwdCBwcm9ncmFtLCBhbmQgaXRzIGxvd2VyaW5nIGRvd24gdG8gTExWTSBJUiBpbmNsdWRp
bmcgdGhlIHJlbGV2YW50CisvLyBleGl0czoKKy8vCisvLyBmdW5jdGlvbiBmb28obykgeworLy8g
ICAgIHZhciBhID0gby5hOyAvLyBwcmVkaWN0ZWQgaW50CisvLyAgICAgdmFyIGIgPSBvLmI7Cisv
LyAgICAgdmFyIGMgPSBvLmM7IC8vIE5CIHRoaXMgaXMgZGVhZAorLy8gICAgIGEgPSBhIHwgNTsg
Ly8gb3VyIGV4YW1wbGUgT1NSIGV4aXQ6IG5lZWQgdG8gY2hlY2sgaWYgYSBpcyBhbiBpbnQKKy8v
ICAgICByZXR1cm4gYSArIGI7CisvLyB9CisvLworLy8gSnVzdCBjb25zaWRlciB0aGUgImEgfCA1
Ii4gSW4gdGhlIERGRyBJUiwgdGhpcyBsb29rcyBsaWtlOgorLy8KKy8vIEJpdE9yKENoZWNrOklu
dDMyOkBhLCBJbnQzMjo1KQorLy8KKy8vIFdoZXJlIEBhIGlzIHRoZSBub2RlIGZvciB0aGUgR2V0
TG9jYWwgbm9kZSB0aGF0IGdldHMgdGhlIHZhbHVlIG9mIHRoZSAnYScgdmFyaWFibGUuCisvLyBD
b25jZXB0dWFsbHksIHRoaXMgbm9kZSBjYW4gYmUgZnVydGhlciBicm9rZW4gZG93biB0byB0aGUg
Zm9sbG93aW5nIChub3RlIHRoYXQgdGhpcworLy8gcGFydGljdWxhciBsb3dlcmluZyBuZXZlciBh
Y3R1YWxseSBoYXBwZW5zIC0gd2Ugc2tpcCB0aGlzIHN0ZXAgYW5kIGdvIHN0cmFpZ2h0IHRvCisv
LyBMTFZNIElSIC0gYnV0IGl0J3Mgc3RpbGwgdXNlZnVsIHRvIHNlZSB0aGlzKToKKy8vCisvLyBl
eGl0SWYoQGEgaXMgbm90IGludDMyKTsKKy8vIGNvbnRpbnVhdGlvbjsKKy8vCisvLyBXaGVyZSAn
ZXhpdElmKCknIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGV4aXQgaWYgdGhlIGFyZ3VtZW50IGlz
IHRydWUsIGFuZAorLy8gJ2NvbnRpbnVhdGlvbicgaXMgdGhlIHN0dWZmIHRoYXQgd2Ugd2lsbCBk
byBhZnRlciB0aGUgZXhpdElmKCkgY2hlY2suIChOb3RlIHRoYXQKKy8vIEZUTCByZWZlcnMgdG8g
J2V4aXRJZigpJyBhcyAnc3BlY3VsYXRlKCknLCB3aGljaCBpcyBpbiBsaW5lIHdpdGggREZHIHRl
cm1pbm9sb2d5LikKKy8vIFRoaXMgdGhlbiBnZXRzIGJyb2tlbiBkb3duIHRvIHRoZSBmb2xsb3dp
bmcgTExWTSBJUiwgYXNzdW1pbmcgdGhhdCAlMCBpcyB0aGUgTExWTQorLy8gdmFsdWUgY29ycmVz
cG9uZGluZyB0byB2YXJpYWJsZSAnYScsIGFuZCAlMSBpcyB0aGUgTExWTSB2YWx1ZSBmb3IgdmFy
aWFibGUgJ2InOgorLy8KKy8vICAgJTIgPSAuLi4gLy8gdGhlIHByZWRpY3RhdGUgY29ycmVzcG9u
ZGluZyB0byAnQGEgaXMgbm90IGludDMyJworLy8gICBiciBpMSAlMiwgbGFiZWwgJTMsIGxhYmVs
ICU0CisvLyA7IDxsYWJlbD46MworLy8gICBjYWxsIHZvaWQgZXhpdFRodW5rMSglMCwgJTEpIC8v
IHBhc3MgJ2EnIGFuZCAnYicsIHNpbmNlIHRoZXkncmUgYm90aCBsaXZlLWluLWJ5dGVjb2RlCisv
LyAgIHVucmVhY2hhYmxlCisvLyA7IDxsYWJlbD46NAorLy8gICAuLi4gLy8gY29kZSBmb3IgdGhl
IGNvbnRpbnVhdGlvbgorLy8KKy8vIFdoZXJlICdleGl0VGh1bmsxJyBpcyB0aGUgSVIgdG8gZ2V0
IHRoZSBleGl0IHRodW5rIGZvciAqdGhpcyogT1NSIGV4aXQuIEVhY2ggT1NSCisvLyBleGl0IHdp
bGwgYXBwZWFyIHRvIExMVk0gdG8gaGF2ZSBhIGRpc3RpbmN0IGV4aXQgdGh1bmsuCisvLworLy8g
Tm90ZSB0aGF0IHRoaXMgZGlkbid0IGhhdmUgdG8gcGFzcyAnNScsICdvJywgb3IgJ2MnIHRvIHRo
ZSBleGl0IHRodW5rLiA1IGlzIGEKKy8vIGNvbnN0YW50IGFuZCB0aGUgREZHIGFscmVhZHkga25v
d3MgdGhhdCwgYW5kIGNhbiBhbHJlYWR5IHRlbGwgdGhlIE9TUiBleGl0IG1hY2hpbmVyeQorLy8g
d2hhdCB0aGF0IGNvbnRhbnQgaXMgYW5kIHdoaWNoIGJ5dGVjb2RlIHZhcmlhYmxlcyAoaWYgYW55
KSBpdCBuZWVkcyB0byBiZSBkcm9wcGVkCisvLyBpbnRvLiBUaGlzIGlzIGNvbnZleWVkIHRvIHRo
ZSBleGl0IHN0YXRpY2FsbHksIHZpYSB0aGUgT1NSRXhpdCBkYXRhIHN0cnVjdHVyZSBiZWxvdy4K
Ky8vIFNlZSB0aGUgY29kZSBmb3IgRXhpdFZhbHVlIGZvciBkZXRhaWxzLiAnbycgaXMgYW4gYXJn
dW1lbnQsIGFuZCBhcmd1bWVudHMgYXJlIGFsd2F5cworLy8gImZsdXNoZWQiIC0gaWYgeW91IG5l
dmVyIGFzc2lnbiB0aGVtIHRoZW4gdGhlaXIgdmFsdWVzIGFyZSBzdGlsbCBpbiB0aGUgYXJndW1l
bnQKKy8vIHN0YWNrIHNsb3RzLCBhbmQgaWYgeW91IGRvIGFzc2lnbiB0aGVtIHRoZW4gd2UgZWFn
ZXJseSBzdG9yZSB0aGVtIGludG8gdGhvc2Ugc2xvdHMuCisvLyAnYycgaXMgZGVhZCBpbiBieXRl
Y29kZSwgYW5kIHRoZSBERkcga25vd3MgdGhpczsgd2Ugc3RhdGljYWxseSB0ZWxsIHRoZSBleGl0
IHRodW5rCisvLyB0aGF0IGl0J3MgZGVhZCBhbmQgZG9uJ3QgaGF2ZSB0byBwYXNzIGFueXRoaW5n
LiBUaGUgZXhpdCB0aHVuayB3aWxsICJpbml0aWFsaXplIiBpdHMKKy8vIHZhbHVlIHRvIFVuZGVm
aW5lZC4KKy8vCisvLyBUaGlzIGFwcHJvYWNoIHRvIE9TUiBleGl0IGhhcyBhIG51bWJlciBvZiB2
aXJ0dWVzOgorLy8KKy8vIC0gSXQgaXMgYW4gZW50aXJlbHkgdW5zdXJwcmlzaW5nIHJlcHJlc2Vu
dGF0aW9uIGZvciBhIGNvbXBpbGVyIHRoYXQgYWxyZWFkeSBncm9rcworLy8gICBDRkctbGlrZSBJ
UnMgZm9yIEMtbGlrZSBsYW5ndWFnZXMuIEFsbCBleGlzdGluZyBhbmFseXNlcyBhbmQgdHJhbnNm
b3JtYXRpb25zIGp1c3QKKy8vICAgd29yay4KKy8vCisvLyAtIEl0IGxlbmRzIGl0c2VsZiBuYXR1
cmFsbHkgdG8gbW9kZXJuIGFwcHJvYWNoZXMgdG8gY29kZSBtb3Rpb24uIEZvciBleGFtcGxlLCB5
b3UKKy8vICAgY291bGQgc2luayBvcGVyYXRpb25zIGZyb20gYWJvdmUgdGhlIGV4aXQgdG8gYmVs
b3cgaXQsIGlmIHlvdSBqdXN0IGR1cGxpY2F0ZSB0aGUKKy8vICAgb3BlcmF0aW9uIGludG8gdGhl
IE9TUiBleGl0IGJsb2NrLiBUaGlzIGlzIGJvdGggbGVnYWwgYW5kIGRlc2lyYWJsZS4gSXQgd29y
a3MKKy8vICAgYmVjYXVzZSB0aGUgYmFja2VuZCBzZWVzIHRoZSBPU1IgZXhpdCBibG9jayBhcyBi
ZWluZyBubyBkaWZmZXJlbnQgdGhhbiBhbnkgb3RoZXIsCisvLyAgIGFuZCBMTFZNIGFscmVhZHkg
c3VwcG9ydHMgc2lua2luZyBpZiBpdCBzZWVzIHRoYXQgYSB2YWx1ZSBpcyBvbmx5IHBhcnRpYWxs
eSB1c2VkLgorLy8gICBIZW5jZSB0aGVyZSBleGlzdHMgYSB2YWx1ZSB0aGF0IGRvbWluYXRlcyB0
aGUgZXhpdCBidXQgaXMgb25seSB1c2VkIGJ5IHRoZSBleGl0CisvLyAgIHRodW5rIGFuZCBub3Qg
YnkgdGhlIGNvbnRpbnVhdGlvbiwgc2lua2luZyBvdWdodCB0byBraWNrIGluIGZvciB0aGF0IHZh
bHVlLgorLy8gICBIb2lzdGluZyBvcGVyYXRpb25zIGZyb20gYmVsb3cgaXQgdG8gYWJvdmUgaXQg
aXMgYWxzbyBwb3NzaWJsZSwgZm9yIHNpbWlsYXIKKy8vICAgcmVhc29ucy4KKy8vCisvLyAtIFRo
ZSBuby1yZXR1cm4gdGFpbC1jYWxsIHRvIHRoZSBPU1IgZXhpdCB0aHVuayBjYW4gYmUgc3ViamVj
dGVkIHRvIHNwZWNpYWxpemVkCisvLyAgIGNvZGUtc2l6ZSByZWR1Y3Rpb24gb3B0aW1pemF0aW9u
cywgdGhvdWdoIHRoaXMgaXMgb3B0aW9uYWwuIEZvciBleGFtcGxlLCBpbnN0ZWFkCisvLyAgIG9m
IGFjdHVhbGx5IGVtaXR0aW5nIGEgY2FsbCBhbG9uZyB3aXRoIGFsbCB0aGF0IGdvZXMgd2l0aCBp
dCAobGlrZSBwbGFjaW5nIHRoZQorLy8gICBhcmd1bWVudHMgaW50byBhcmd1bWVudCBwb3NpdGlv
biksIHRoZSBiYWNrZW5kIGNvdWxkIGNob29zZSB0byBzaW1wbHkgaW5mb3JtIHVzCisvLyAgIHdo
ZXJlIGl0IGhhZCBwbGFjZWQgdGhlIGFyZ3VtZW50cyBhbmQgZXhwZWN0IHRoZSBjYWxsZWUgKGku
ZS4gdGhlIGV4aXQgdGh1bmspIHRvCisvLyAgIGZpZ3VyZSBpdCBvdXQgZnJvbSB0aGVyZS4gSXQg
Y291bGQgYWxzbyB0ZWxsIHVzIHdoYXQgd2UgbmVlZCB0byBkbyB0byBwb3Agc3RhY2ssCisvLyAg
IGFsdGhvdWdoIGFnYWluLCBpdCBkb2Vzbid0IGhhdmUgdG87IGl0IGNvdWxkIGp1c3QgZW1pdCB0
aGF0IGNvZGUgbm9ybWFsbHkuIFRob3VnaAorLy8gICB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgeWV0
LCB3ZSBjb3VsZDsgdGhlIG9ubHkgdGhpbmcgdGhhdCB3b3VsZCBjaGFuZ2Ugb24gb3VyIGVuZAor
Ly8gICBpcyB0aGF0IHdlJ2QgbmVlZCBmZWVkYmFjayBmcm9tIHRoZSBiYWNrZW5kIGFib3V0IHRo
ZSBsb2NhdGlvbiBvZiB0aGUgYXJndW1lbnRzCisvLyAgIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRo
ZSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRvbmUgdG8gcG9wIHN0YWNrLiBUaGlzIHdvdWxkCisv
LyAgIGludm9sdmUgc3dpdGNoaW5nIHRoZSBtX3ZhbHVlcyBhcnJheSB0byB1c2Ugc29tZXRoaW5n
IG1vcmUgYWtpbiB0byBWYWx1ZVJlY292ZXJ5CisvLyAgIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50
IEV4aXRWYWx1ZSwgYWxiZWl0IHBvc3NpYmx5IHdpdGggc29tZSBoYWNrcyB0byBiZXR0ZXIKKy8v
ICAgdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgcGxhY2VzIHdoZXJlIHRoZSBMTFZNIGJhY2tlbmQg
d291bGQgcHV0IHZhbHVlcy4KKy8vCisvLyAtIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIGFsbG93
IHRoZSBiYWNrZW5kIHRvIGRvIGl0cyBvd24gZXhpdCBob2lzdGluZywgYnkgdXNpbmcKKy8vICAg
aW50cmluc2ljcyAob3IgbWV0YS1kYXRhLCBvciBzb21ldGhpbmcpIHRvIGluZm9ybSB0aGUgYmFj
a2VuZCB0aGF0IGl0J3Mgc2FmZSB0bworLy8gICBtYWtlIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRv
ICdleGl0SWYoKScgbW9yZSB0cnV0aHkuCisvLworLy8gLSBJdCBjb3VsZCBiZSBleHRlbmRlZCB0
byBzdXBwb3J0IHdhdGNocG9pbnRzIChzZWUgd2Via2l0Lm9yZy9iLzExMzY0NykgYnkgbWFraW5n
CisvLyAgIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0SWYoKScgYmUgYW4gaW50cmluc2lj
IHRoYXQgdGhlIGJhY2tlbmQga25vd3MgdG8gYmUKKy8vICAgdHJ1ZSBhdCBjb21waWxlLXRpbWUu
IFRoZSBiYWNrZW5kIGNvdWxkIHRoZW4gdHVybiB0aGUgY29uZGl0aW9uYWwgYnJhbmNoIGludG8g
YQorLy8gICByZXBsYWNlYWJsZSBqdW1wLCBtdWNoIGxpa2UgdGhlIERGRyBkb2VzLgorCitzdHJ1
Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CisgICAgT1NSRXhpdCgKKyAgICAgICAg
RXhpdEtpbmQsIFZhbHVlRm9ybWF0IHByb2ZpbGVWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZSwKKyAgICAgICAgQ29kZU9yaWdpbiwgaW50IGxhc3RTZXRPcGVyYW5kLCB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2Nh
bHMpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAgCisgICAg
Ly8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ug
d2lzaCB0byBwcm9maWxlLgorICAgIC8vIElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3
aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3ZSdsbCBoYXZlIGEKKyAgICAvLyBtZXRob2Qgb2YgZ2V0
dGluZyBhIHZhbHVlIHByb2ZpbGUuIE5vdGUgdGhhdCBhbGwgb2YgdGhlIEV4aXRBcmd1bWVudCdz
CisgICAgLy8gYXJlIGFscmVhZHkgYXdhcmUgb2YgdGhpcyBwb3NzaWJsZSBvZmYtYnktb25lLCBz
byB0aGVyZSBpcyBubyBuZWVkIHRvCisgICAgLy8gY29ycmVjdCB0aGVtLgorICAgIFZhbHVlRm9y
bWF0IG1fcHJvZmlsZVZhbHVlRm9ybWF0OworICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUgbV92YWx1ZVByb2ZpbGU7CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Cisg
ICAgCisgICAgLy8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3Ig
dGhpcyBleGl0LgorICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKKyAgICAKKyAg
ICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICAKKyAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1f
dmFsdWVzOworICAgIAorICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRj
aChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CisgICAgCisgICAgdm9pZCBjb252ZXJ0
VG9Gb3J3YXJkKAorICAgICAgICBERkc6OkJhc2ljQmxvY2sqLCBERkc6Ok5vZGUqIGN1cnJlbnRO
b2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsCisgICAgICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiwg
RXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT1NSRXhp
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0
aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGF0aW9uSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorI2RlZmluZSBGVExPU1JFeGl0
Q29tcGlsYXRpb25JbmZvX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitz
dHJ1Y3QgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyB7CisgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5m
bygpCisgICAgICAgIDogbV90aHVua0FkZHJlc3MoMCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RodW5rTGFiZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6
OlBhdGNoYWJsZUp1bXAgbV90aHVua0p1bXA7CisgICAgTFZhbHVlIG1fdGh1bmtBZGRyZXNzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICsz
Myw3IEBACiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25z
LmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxh
dGlvbkluZm8uaCIKICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDksNiArNTAsNyBAQCBwdWJsaWM6CiAgICAgTE1vZHVs
ZSBtb2R1bGU7CiAgICAgTFZhbHVlIGZ1bmN0aW9uOwogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRD
b2RlOworICAgIFZlY3RvcjxPU1JFeGl0Q29tcGlsYXRpb25JbmZvPiBvc3JFeGl0OwogICAgIAog
ICAgIHZvaWQgZHVtcFN0YXRlKGNvbnN0IGNoYXIqIHdoZW4pOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZU
TFRodW5rc19oCisjZGVmaW5lIEZUTFRodW5rc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVz
cGFjZSBGVEwgeworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExUSHVua3NfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExW
YWx1ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBWYWx1ZUZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsK
KyAgICBjYXNlIEludmFsaWRWYWx1ZUZvcm1hdDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAg
IG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3Jt
YXRVSW50MzI6CisgICAgICAgIG91dC5wcmludCgiVUludDMyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZToKKyAgICAg
ICAgb3V0LnByaW50KCJKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
Rm9ybWF0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlRm9ybWF0X2gKKyNkZWZpbmUgRlRMVmFsdWVG
b3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRv
IERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAorLy8gdW5saWtl
IERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3
ZWVuIFVJbnQzMiBhbmQgSW50MzIuCisKK2VudW0gVmFsdWVGb3JtYXQgeworICAgIEludmFsaWRW
YWx1ZUZvcm1hdCwKKyAgICBWYWx1ZUZvcm1hdEludDMyLAorICAgIFZhbHVlRm9ybWF0VUludDMy
LAorICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKKyAgICBWYWx1ZUZvcm1hdEpTVmFsdWUsCisgICAg
VmFsdWVGb3JtYXREb3VibGUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6RlRM
OjpWYWx1ZUZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExWYWx1ZUZvcm1hdF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVTb3VyY2Uu
aCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU291cmNlTm90U2V0OgorICAgICAgICBv
dXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1
ZUluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluSlNTdGFjayIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnQzMkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJbkpTU3Rh
Y2s6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiVmFsdWVJbkxv
Y2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluTG9jYWxzOgorICAgICAg
ICBvdXQucHJpbnQoIkludDMySW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Qm9vbGVhbkluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2FscyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJbkxvY2FsczoKKyAgICAgICAgb3V0LnBy
aW50KCJEb3VibGVJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVu
dHNTb3VyY2U6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFNvdXJjZUlzRGVhZDoKKyAgICAgICAgb3V0LnByaW50KCJTb3Vy
Y2VJc0RlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAg
IG91dC5wcmludCgiTm9kZSgiLCBub2RlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlU291cmNlX2gKKyNkZWZpbmUgRlRMVmFsdWVTb3Vy
Y2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitlbnVtIFZhbHVlU291cmNlS2lu
ZCB7CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVlSW5KU1N0YWNrLAorICAgIEludDMySW5K
U1N0YWNrLAorICAgIERvdWJsZUluSlNTdGFjaywKKyAgICBWYWx1ZUluTG9jYWxzLAorICAgIElu
dDMySW5Mb2NhbHMsCisgICAgQm9vbGVhbkluTG9jYWxzLAorICAgIERvdWJsZUluTG9jYWxzLAor
ICAgIEFyZ3VtZW50c1NvdXJjZSwKKyAgICBTb3VyY2VJc0RlYWQsCisgICAgSGF2ZU5vZGUKK307
CisKK2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAg
ICAgIDogbV92YWx1ZShTb3VyY2VOb3RTZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBs
aWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKKyAgICAgICAgOiBtX3ZhbHVl
KGtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShERkc6
Ok5vZGUqIG5vZGUpCisgICAgICAgIDogbV92YWx1ZShiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihu
b2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhbHVlU291cmNlS2luZCgpIGtpbmQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUgPCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KEhhdmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtp
bmQ+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFNvdXJjZU5vdFNldDsg
fQorICAgIAorICAgIERGRzo6Tm9kZSogbm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxERkc6
Ok5vZGUqPihtX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdWludHB0cl90IG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTFZhbHVlU291cmNlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196700</attachid>
            <date>2013-04-05 16:47:51 -0700</date>
            <delta_ts>2013-04-05 17:11:32 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>109348</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3NjY0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEzLTA0LTA0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RlRMIHNob3VsZCBoYXZlIE9TUiBleGl0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6
CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChP
U1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6
IEFkZGVkLgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6
T1NSRXhpdEJhc2UpOgorICAgICAgICAoT1NSRXhpdEJhc2UpOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OnJlcHJlc2VudGF0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRWYWx1ZS5o
OiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0VmFsdWUpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpkZWFkKToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFjayk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
Ojphcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpraW5kKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFZhbHVlOjppc0luSlNTdGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0Nv
bnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAg
ICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChPU1JF
eGl0KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdURik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExW
YWx1ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorCiAy
MDEzLTA0LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91
cnRoVGllcjogcHV0IERGRyBkYXRhIGludG8gYSBERkc6OkpJVENvZGUsIGFuZCBwdXQgY29tbW9u
IERGRyBhbmQgRlRMIGRhdGEgaW50byBzb21ldGhpbmcgYWNjZXNzaWJsZSBmcm9tIGJvdGggREZH
OjpKSVRDb2RlIGFuZCBGVEw6OkpJVENvZGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxNDc2MDgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDYgKzE5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBseU9mZnNldChsYWJlbC5t
X2xhYmVsKS5tX29mZnNldDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBvZmZzZXRPZihQYXRjaGFi
bGVKdW1wIGp1bXApCisgICAgeworICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQoanVtcC5tX2p1
bXAubV9sYWJlbCkubV9vZmZzZXQ7CisgICAgfQorCiAgICAgLy8gVXBvbiBjb21wbGV0aW9uIG9m
IGFsbCBwYXRjaGluZyAnRklOQUxJWkVfQ09ERSgpJyBzaG91bGQgYmUgY2FsbGVkIG9uY2UgdG8K
ICAgICAvLyBjb21wbGV0ZSBnZW5lcmF0aW9uIG9mIHRoZSBjb2RlLiBBbHRlcm5hdGl2ZWx5LCBj
YWxsCiAgICAgLy8gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYg
eW91IGhhdmUgeW91ciBvd24gd2F5IG9mCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDcgKzk1LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgog
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGlj
dGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0KKyAgICAgICAgICAg
IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwog
ICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAg
cm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNldChTcGVjSW50MzIpOwogICAgICAgICBl
bHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMTQ3NjA4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTEsNiArNTEsNyBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBo
KE5vZGVUCiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoIW5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyh0
eXBlKSAmJiAhbmVlZHNPU1JGb3J3YXJkUmV3aXJpbmcodHlwZSkpOwogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgfQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTQ3NjA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODcsNiArMjg3LDI1IEBAIGlubGluZSBOb2Rl
RmxhZ3MgZGVmYXVsdEZsYWdzKE5vZGVUeXBlIG8KICAgICB9CiB9CiAKK2lubGluZSBib29sIG5l
ZWRzT1NSQmFja3dhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKK3sKKyAgICByZXR1cm4gb3AgPT0g
VUludDMyVG9OdW1iZXI7Cit9CisKK2lubGluZSBib29sIG5lZWRzT1NSRm9yd2FyZFJld2lyaW5n
KE5vZGVUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEludDMyVG9Eb3Vi
bGU6CisgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFZhbHVlVG9JbnQz
MjoKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJ
KHJldmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICszNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFs
dWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1
ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNp
Z25lZCByZWNvdmVyeUluZGV4KQotICAgIDogbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2Up
CisgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKKyAgICAs
IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFs
dWVQcm9maWxlKQogICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX2NvZGVP
cmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCi0gICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZShtX2NvZGVPcmlnaW4pCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRl
eCkKICAgICAsIG1fd2F0Y2hwb2ludEluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+
OjptYXgoKSkKLSAgICAsIG1fa2luZChraW5kKQotICAgICwgbV9jb3VudCgwKQogICAgICwgbV9z
dHJlYW1JbmRleChzdHJlYW1JbmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xh
c3RTZXRPcGVyYW5kKQogewpAQCAtNzMsNTcgKzcxLDE0IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVj
dEp1bXAoTGlua0J1ZmZlciYgbGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVm
ZmVyLm9mZnNldE9mKGxhYmVsKTsKIH0KIAotYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2spCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3Vu
dCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFBy
b21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOwotICAgIAotICAgIGlmIChtX2tpbmQg
PT0gQXJndW1lbnRzRXNjYXBlZCkgewotICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxs
eS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50
cyBleGNhcGVkOwotICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3Nv
Y2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRl
ID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOwotICAgIH0gZWxzZQotICAgICAgICBleGl0U2l0
ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJ
bmRleCwgbV9raW5kKTsKLSAgICAKLSAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmls
ZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKLX0KLQogdm9pZCBP
U1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50
Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292
ZXJ5KQogewotICAgIC8vIENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBT
ZXRMb2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0
aCB0aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVj
b3ZlcnkuCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIXZhbHVlUmVjb3Zl
cnkKLSAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAg
ICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAgQVNT
RVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAg
ICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gY3VycmVu
dE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBu
b2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbi4gQWxzbyB0cmFjayB0aGUgbGFz
dCBtb3YgaGludAotICAgIC8vIG9uIHRoaXMgbm9kZS4KLSAgICB1bnNpZ25lZCBpbmRleEluQmxv
Y2sgPSBub2RlSW5kZXggKyAxOwotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIE5vZGUqIGxhc3RN
b3ZIaW50ID0gMDsKLSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sgPT0g
YmxvY2stPnNpemUoKSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0dXJu
LiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZlCi0g
ICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0ZWNv
ZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhlY3V0
ZSB0aGF0IGJ5dGVjb2RlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IGJsb2NrLT5h
dChpbmRleEluQmxvY2spOwotICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYg
bm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0TW92SGludCA9
IG5vZGU7Ci0gICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2Rl
T3JpZ2luKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAg
IH0KLSAgICAKKyAgICBOb2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGRv
U2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgs
ICEhdmFsdWVSZWNvdmVyeSk7CisKICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJy
ZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCiAgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29k
ZU9yaWdpbjsKICAgICAKICAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcg
QEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgog
I2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgogI2lu
Y2x1ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODQs
NyArODUsNyBAQCBwcml2YXRlOgogLy8KIC8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cg
dG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8gZ29pbmcgaW50byBiYXNlbGluZSBj
b2RlLgotc3RydWN0IE9TUkV4aXQgeworc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJh
c2UgewogICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVu
c2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG1fY29kZTsKQEAgLTk0LDIxICs5NSwxMCBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAK
ICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgQ29kZU9yaWdpbiBtX2Nv
ZGVPcmlnaW47Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAg
ICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7CiAgICAgdW5zaWduZWQgbV93YXRjaHBv
aW50SW5kZXg7CiAgICAgCi0gICAgRXhpdEtpbmQgbV9raW5kOwotICAgIHVpbnQzMl90IG1fY291
bnQ7Ci0gICAgCi0gICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2Rl
QmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKLSAgICB7
Ci0gICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdB
c0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOwot
ICAgIH0KLQogICAgIHZvaWQgc2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6
UGF0Y2hhYmxlSnVtcCk7CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29k
ZU9mZnNldEFzSnVtcCgpIGNvbnN0OwogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9u
Rm9yUmVwYXRjaChDb2RlQmxvY2sqKSBjb25zdDsKQEAgLTEyMCw5ICsxMTAsNiBAQCBzdHJ1Y3Qg
T1NSRXhpdCB7CiAgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgCiAgICAgUmVmUHRyPFZh
bHVlUmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7Ci0KLXByaXZhdGU6
Ci0gICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2Nr
KiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwogfTsKIAogc3Ry
dWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCiti
b29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCit7Cisg
ICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4
aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRT
aXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGcmVxdWVudEV4aXRTaXRl
IGV4aXRTaXRlOworICAgIAorICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgewor
ICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hl
cmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOworICAgICAgICAvLyB0
aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3Vs
YXIgaW5zdHJ1Y3Rpb24uCisgICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tp
bmQpOworICAgIH0gZWxzZQorICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKKyAgICAKKyAg
ICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayht
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVu
dEV4aXRTaXRlKGV4aXRTaXRlKTsKK30KKworYm9vbCBPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JG
b3J3YXJkQ29udmVyc2lvbigKKyAgICBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5v
ZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAorICAgIE5vZGUq
JiBub2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpCit7CisgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIg
dGhlIGN1cnJlbnQgbm9kZSBpcyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2Fz
IGEKKyAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdl
J3ZlIHByb3ZpZGVkIGEgdmFsdWVSZWNvdmVyeS4KKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAor
ICAgICAgICAmJiAhaGFzVmFsdWVSZWNvdmVyeQorICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNv
bnRhaW5zTW92SGludCgpKSB7CisgICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5v
ZGVJbmRleCAtIDEpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+
Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRM
b2NhbC0+Y29kZU9yaWdpbiA9PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAg
IAorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3Ry
dWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBoaW50CisgICAgLy8gb24gdGhpcyBub2Rl
LgorICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7CisgICAgbm9kZSA9
IDA7CisgICAgbGFzdE1vdkhpbnQgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGlu
ZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGFu
IGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBU
aGlzIGlzIHNhZmUKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMg
aXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bworICAgICAgICAg
ICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+
b3AoKSA9PSBKdW1wKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
ICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgIGlmIChub2RlLT5j
b250YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKKyAgICAg
ICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4g
IT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
aW5kZXhJbkJsb2NrKys7CisgICAgfQorICAgIAorICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2lu
ICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkV4aXRCYXNlX2gKKyNkZWZpbmUgREZHT1NS
RXhpdEJhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFByb3ZpZGVzIGZv
ciB0aGUgT1NSIGV4aXQgcHJvZmlsaW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gYmV0
d2VlbiB0aGUgREZHCisvLyBhbmQgdGhlIEZUTC4KKworc3RydWN0IE9TUkV4aXRCYXNlIHsKKyAg
ICBPU1JFeGl0QmFzZShFeGl0S2luZCBraW5kLCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAg
OiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGUob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdEtp
bmQgbV9raW5kOworICAgIHVpbnQzMl90IG1fY291bnQ7CisgICAgCisgICAgQ29kZU9yaWdpbiBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXND
b3VudGFibGUobV9raW5kKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0
dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHBy
b2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRo
ZSBmb3J3YXJkIGNvbnZlcnNpb24gaXMgcmVhbGx5IG5lZWRlZC4KKyAgICBib29sIGRvU2VhcmNo
Rm9yRm9yd2FyZENvbnZlcnNpb24oCisgICAgICAgIEJhc2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50
Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgICAg
IE5vZGUqJiBuZXh0QkNOb2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpOworCitwcml2YXRlOgorICAg
IGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZn
Q29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYg
Ly8gREZHT1NSRXhpdEJhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3NzcsNyArMTc3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBl
cygKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJl
ZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFi
bGVBY2Nlc3NEYXRhLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogCiAgICAgICAgIEpTVmFs
dWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNz
Rm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMx
LDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50MzJJbkpT
U3RhY2spOwotICAgICAgICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlz
Q2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQ2VsbEluSlNT
dGFjayk7CiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5KU1N0YWNrKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFt
LmNwcAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBA
IHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
aWYgKG5vZGUgJiYgbm9kZS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAg
aWYgKG5vZGUgJiYgbmVlZHNPU1JCYWNrd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7CiAgICAg
ICAgICAgICAgICAgTWluaWZpZWRJRCBpZCA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAg
ICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBjb2Rl
QmxvY2ssIGdyYXBoLmF0KGlkKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
MjU3LDYgKzI1Nyw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAg
ICAgICAgICAgICAgICAgICAgICAgICBkb3VibGVBc0ludDMySUQgPSBpZDsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKCFuZWVkc09TUkZvcndhcmRSZXdpcmluZyhub2RlLT5v
cCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAxNDc2MDgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODQsNiAr
ODQsMTEgQEAgc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcgogewogICAg
IHJldHVybiBMTFZNRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIHBhcmFtQ291
bnQsIHZhcmlhZGljaXR5ID09IFZhcmlhZGljKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFZlY3Rv
clR5cGU+CitpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIGNvbnN0
IFZlY3RvclR5cGUmIHZlY3RvciwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCit7CisgICAgcmV0
dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUo
KSwgdmFyaWFkaWNpdHkpOworfQogc3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5
cGUgcmV0dXJuVHlwZSwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkgPSBOb3RWYXJpYWRpYykKIHsK
ICAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIDAsIDAsIHZhcmlhZGljaXR5KTsK
QEAgLTk4LDYgKzEwMyw4IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBl
IHIKICAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIDIsIHZh
cmlhZGljaXR5KTsKIH0KIAorc3RhdGljIGlubGluZSBMVHlwZSB0eXBlT2YoTFZhbHVlIHZhbHVl
KSB7IHJldHVybiBMTFZNVHlwZU9mKHZhbHVlKTsgfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVk
IG1kS2luZElEKGNvbnN0IGNoYXIqIHN0cmluZykgeyByZXR1cm4gTExWTUdldE1ES2luZElEKHN0
cmluZywgc3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhj
b25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0aCkgeyByZXR1cm4gTExWTU1EU3RyaW5n
KHN0cmluZywgbGVuZ3RoKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoY29uc3Qg
Y2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsg
fQpAQCAtMTU1LDYgKzE2MiwxMSBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1
aWxkZXIgCiB7CiAgICAgcmV0dXJuIExMVk1CdWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFy
Z3MsIG51bUFyZ3MsICIiKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+Citpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNv
bnN0IFZlY3RvclR5cGUmIHZlY3RvcikKK3sKKyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIs
IGZ1bmN0aW9uLCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUoKSk7Cit9CiBzdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uKQog
ewogICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIDAsIDApOwpAQCAtMTY4
LDYgKzE4MCw4IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKICAg
ICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyIH07CiAgICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMik7CiB9CitlbnVtIFRhaWxDYWxsTW9kZSB7IElzTm90
VGFpbENhbGwsIElzVGFpbENhbGwgfTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRUYWlsQ2FsbChM
VmFsdWUgY2FsbCwgVGFpbENhbGxNb2RlIG1vZGUpIHsgTExWTVNldFRhaWxDYWxsKGNhbGwsIG1v
ZGUgPT0gSXNUYWlsQ2FsbCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZh
bHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBMTFZNQnVpbGRFeHRyYWN0VmFsdWUoYnVpbGRlciwgYWdnVmFsLCBpbmRleCwgIiIpOyB9
CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNlbGVjdChMQnVpbGRlciBidWlsZGVyLCBMVmFs
dWUgY29uZGl0aW9uLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gTExW
TUJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRpdGlvbiwgdGFrZW4sIG5vdFRha2VuLCAiIik7IH0K
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQnIoTEJ1aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxv
Y2sgZGVzdGluYXRpb24pIHsgcmV0dXJuIExMVk1CdWlsZEJyKGJ1aWxkZXIsIGRlc3RpbmF0aW9u
KTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFy
Z3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGVExFeGl0QXJndW1lbnQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdEFyZ3VtZW50OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJhcmciLCBhcmd1bWVudCgp
LCAiIGFzICIsIGZvcm1hdCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdEFyZ3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0QXJndW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTEV4aXRBcmd1bWVudF9oCisjZGVmaW5lIEZUTEV4aXRBcmd1bWVudF9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRM
VmFsdWVGb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRp
b24geworICAgIFZhbHVlRm9ybWF0IGZvcm1hdDsKKyAgICB1bnNpZ25lZCBhcmd1bWVudDsKK307
CisKK2NsYXNzIEV4aXRBcmd1bWVudCB7CitwdWJsaWM6CisgICAgRXhpdEFyZ3VtZW50KCkKKyAg
ICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24uZm9ybWF0ID0gSW52YWxpZFZhbHVlRm9ybWF0
OworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQoVmFsdWVGb3JtYXQgZm9ybWF0LCB1bnNp
Z25lZCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24uZm9ybWF0ID0g
Zm9ybWF0OworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmFyZ3VtZW50ID0gYXJndW1lbnQ7Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IEV4aXRBcmd1bWVudChFeGl0QXJndW1lbnRSZXByZXNl
bnRhdGlvbiByZXByZXNlbnRhdGlvbikKKyAgICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24g
PSByZXByZXNlbnRhdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9PSBJbnZhbGlkVmFsdWVGb3JtYXQ7
IH0KKyAgICAKKyAgICBWYWx1ZUZvcm1hdCBmb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZm9ybWF0Owor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoKnRoaXMpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5hcmd1bWVu
dDsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50IHdpdGhGb3JtYXQoVmFsdWVGb3JtYXQg
Zm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3Vt
ZW50KCkpOworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiByZXBy
ZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcmVzZW50YXRpb247IH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhp
dEFyZ3VtZW50UmVwcmVzZW50YXRpb24gbV9yZXByZXNlbnRhdGlvbjsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYg
Ly8gRlRMRXhpdEFyZ3VtZW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKworRXhpdFRodW5rR2VuZXJhdG9yOjpFeGl0VGh1
bmtHZW5lcmF0b3IoU3RhdGUmIHN0YXRlKQorICAgIDogQ0NhbGxIZWxwZXJzKCZzdGF0ZS5ncmFw
aC5tX2dsb2JhbERhdGEsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrKQoreworfQorCitFeGl0VGh1
bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3IoKQoreworfQorCit2b2lkIEV4aXRUaHVu
a0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4LCBPU1JFeGl0Q29tcGlsYXRpb25J
bmZvJiBpbmZvKQoreworICAgIGluZm8ubV90aHVua0xhYmVsID0gbGFiZWwoKTsKKyAgICBtb3Zl
KFRydXN0ZWRJbW0zMihpbmRleCksIEdQUkluZm86Om5vbkFyZ0dSUDApOworICAgIGluZm8ubV90
aHVua0p1bXAgPSBwYXRjaGFibGVKdW1wKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0VGh1bmtHZW5lcmF0b3JfaAorI2RlZmlu
ZSBGVExFeGl0VGh1bmtHZW5lcmF0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVycy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIE9TUkV4aXRDb21waWxhdGlv
bkluZm87CitjbGFzcyBTdGF0ZTsKKworY2xhc3MgRXhpdFRodW5rR2VuZXJhdG9yIDogcHVibGlj
IENDYWxsSGVscGVycyB7CitwdWJsaWM6CisgICAgRXhpdFRodW5rR2VuZXJhdG9yKFN0YXRlJiBz
dGF0ZSk7CisgICAgfkV4aXRUaHVua0dlbmVyYXRvcigpOworICAgIAorICAgIHZvaWQgZW1pdFRo
dW5rKHVuc2lnbmVkIGluZGV4LCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJik7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTEV4aXRUaHVua0dlbmVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgp
KSB7CisgICAgY2FzZSBJbnZhbGlkRXhpdFZhbHVlOgorICAgICAgICBvdXQucHJpbnQoIkludmFs
aWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAg
b3V0LnByaW50KCJEZWFkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUFy
Z3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50KCIsIGV4aXRBcmd1bWVudCgpLCAi
KSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAg
ICAgb3V0LnByaW50KCJDb25zdGFudCgiLCBjb25zdGFudCgpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiSW5K
U1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0VmFs
dWVfaAorI2RlZmluZSBGVExFeGl0VmFsdWVfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudC5oIgor
I2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUaGlzIGlzIGxpa2UgVmFsdWVS
ZWNvdmVyeSwgYnV0IHJlc3BlY3RzIHRoZSB3YXkgdGhhdCB0aGUgRlRMIGRvZXMgT1NSCisvLyBl
eGl0OiB0aGUgbGl2ZSBub24tY29uc3RhbnQgbm9uLWZsdXNoZWQgdmFsdWVzIGFyZSBwYXNzZWQg
YXMgYXJndW1lbnRzCisvLyB0byBhIG5vcmV0dXJuIHRhaWwgY2FsbC4gRXhpdFZhbHVlIGlzIGhl
bmNlIG1vc3RseSByZXNwb25zaWJsZSBmb3IKKy8vIHRlbGxpbmcgdXMgdGhlIG1hcHBpbmcgYmV0
d2VlbiBvcGVyYW5kcyBpbiBieXRlY29kZSBhbmQgdGhlIGFyZ3VtZW50cyB0bworLy8gdGhlIGNh
bGwuCisKK2VudW0gRXhpdFZhbHVlS2luZCB7CisgICAgSW52YWxpZEV4aXRWYWx1ZSwKKyAgICBF
eGl0VmFsdWVEZWFkLAorICAgIEV4aXRWYWx1ZUFyZ3VtZW50LAorICAgIEV4aXRWYWx1ZUNvbnN0
YW50CisgICAgRXhpdFZhbHVlSW5KU1N0YWNrLAorICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50
MzIsCisgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNCb29sZWFuLAorICAgIEV4aXRWYWx1ZUluSlNT
dGFja0FzRG91YmxlCit9OworCitjbGFzcyBFeGl0VmFsdWUgeworcHVibGljOgorICAgIEV4aXRW
YWx1ZSgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRFeGl0VmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZh
bGlkRXhpdFZhbHVlOyB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBkZWFkKCkKKyAgICB7
CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0
VmFsdWVEZWFkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgRXhpdFZhbHVlIGluSlNTdGFjaygpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGluSlNTdGFj
a0FzSW50MzIoKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNrQXNCb29s
ZWFuKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2tBc0Jvb2xlYW47CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNrQXNEb3VibGUo
KQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGNvbnN0YW50KEpTVmFsdWUgdmFsdWUp
CisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gRXhpdFZhbHVlQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC51LmNvbnN0YW50ID0gSlNWYWx1
ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIEV4aXRWYWx1ZSBleGl0QXJndW1lbnQoY29uc3QgRXhpdEFyZ3VtZW50JiBhcmd1
bWVudCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBFeGl0VmFsdWVBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0LnUuYXJndW1lbnQgPSBh
cmd1bWVudC5yZXByZXNlbnRhdGlvbigpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0K
KyAgICAKKyAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFs
dWVEZWFkOyB9CisgICAgYm9vbCBpc0luSlNTdGFja1NvbWVob3coKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6
CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICAgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2tBc0Jvb2xlYW46CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrQXNEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIGlz
Q29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQ29uc3RhbnQ7IH0K
KyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVl
QXJndW1lbnQ7IH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gRXhp
dEFyZ3VtZW50KHUuYXJndW1lbnQpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NvbnN0YW50KCkpOworICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhpdFZhbHVl
S2luZCBtX2tpbmQ7CisgICAgdW5pb24geworICAgICAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRh
dGlvbiBhcmd1bWVudDsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7CisgICAgfSB1
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VmFsdWVfaApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAkocmV2aXNpb24gMTQ3NjA4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJG
VExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIKIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MSwxOCArNDIsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAvLyB1c2UgdGhpcyBpbiBzaXR1YXRpb25zIHdoZXJlIHRo
ZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIHNheSB3aGF0IG5vZGUgdGhlIHZhbHVlIGNhbWUKIC8vIGZy
b20uCiAKLS8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERhdGFGb3Jt
YXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAotLy8gdW5saWtlIERhdGFGb3Jt
YXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFVJbnQz
MiBhbmQgSW50MzIuCi0KLWVudW0gVmFsdWVGb3JtYXQgewotICAgIEludmFsaWRWYWx1ZUZvcm1h
dCwKLSAgICBWYWx1ZUZvcm1hdEludDMyLAotICAgIFZhbHVlRm9ybWF0VUludDMyLAotICAgIFZh
bHVlRm9ybWF0Qm9vbGVhbiwKLSAgICBWYWx1ZUZvcm1hdEpTVmFsdWUsCi0gICAgVmFsdWVGb3Jt
YXREb3VibGUKLX07Ci0KIGNsYXNzIEZvcm1hdHRlZFZhbHVlIHsKIHB1YmxpYzoKICAgICBGb3Jt
YXR0ZWRWYWx1ZSgpCkBAIC04MSw2ICs3MCwxMyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBtX3Zh
bHVlOwogfTsKIAorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBub1ZhbHVlKCkgeyByZXR1
cm4gRm9ybWF0dGVkVmFsdWUoKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBpbnQz
MlZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRJ
bnQzMiwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIHVJbnQzMlZhbHVl
KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRVSW50MzIs
IHZhbHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBib29sZWFuVmFsdWUoTFZh
bHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEJvb2xlYW4sIHZh
bHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBqc1ZhbHVlVmFsdWUoTFZhbHVl
IHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEpTVmFsdWUsIHZhbHVl
KTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBkb3VibGVWYWx1ZShMVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1ZSk7IH0K
KwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9u
IDE0NzYwOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAg
ICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUpOwogfQogCit2b2lkIEpJVENv
ZGU6OmluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYgZXhpdFRodW5rcykKK3sKKyAgICBtX2V4
aXRUaHVua3MgPSBleGl0VGh1bmtzOworfQorCiB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVDb2Rl
KExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGVudHJ5cG9pbnQpCiB7CiAg
ICAgbV9lbmdpbmUgPSBlbmdpbmU7CkBAIC05Nyw2ICsxMDIsMTEgQEAgYm9vbCBKSVRDb2RlOjpj
b250YWlucyh2b2lkKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0NvZGVQdHIgSklUQ29kZTo6
ZXhpdFRodW5rcygpCit7CisgICAgcmV0dXJuIG1fZXhpdFRodW5rcy5jb2RlKCk7Cit9CisKIEpJ
VENvZGUqIEpJVENvZGU6OmZ0bCgpCiB7CiAgICAgcmV0dXJuIHRoaXM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTQ3NjA5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDEy
ICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGNvbnRhaW5z
KHZvaWQqKTsKICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwog
ICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiwgQ29kZVJlZiBl
bnRyeXBvaW50KTsKICAgICAKKyAgICBDb2RlUHRyIGV4aXRUaHVua3MoKTsKKyAgICAKICAgICBK
SVRDb2RlKiBmdGwoKTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIAog
ICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CisgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQs
IDg+IG9zckV4aXQ7CiAgICAgCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB1
c2Ugb3VyIG93biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNob3VsZG4ndCBoYXZlIHRv
CkBAIC02MSw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYxOQogICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgbV9l
bmdpbmU7CiAgICAgQ29kZVJlZiBtX2VudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBtX2V4aXRUaHVu
a3M7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTQ3NjA5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDEwIEBACiAKICNpbmNsdWRlICJERkdBYnN0cmFjdFN0
YXRlLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgorI2luY2x1ZGUg
IkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZhbHVlLmgi
CiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVk
ZSAiT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC00
MSw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAvLyBVc2luZyB0aGlzIGluc3RlYWQg
b2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIExMVk0sIGJ5IGNyZWF0
aW5nCiAvLyBzaWduaWZpY2FudGx5IGxlc3MgZGVhZCBjb2RlLgogI2RlZmluZSBGVExfVFlQRV9D
SEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRp
b24pIGRvIHsgXAotICAgICAgICBMVmFsdWUgX2Z0Y19sb3dWYWx1ZSA9IChsb3dWYWx1ZSk7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBfZnRj
X2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBF
ZGdlIF9mdGNfaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCA9
ICh0eXBlc1Bhc3NlZFRocm91Z2gpOyAgXAogICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNUeXBl
Q2hlY2soX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoKSkgXApAQCAtNTcs
NiArNTksOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9wZXJhbmRzTGlr
ZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBt
X2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxl
c0F0SGVhZCkKICAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgu
bV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX3ZhbHVlU291cmNlcyhP
cGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCisg
ICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAgICAgICwgbV9zdGF0ZShz
dGF0ZS5ncmFwaCkKICAgICB7CiAgICAgfQpAQCAtODAsMTQgKzg0LDE0IEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVy
LCBtX291dC5pbnQ2NCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIG1faW5pdGlhbGl6
YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuZnVuY3Rpb24pOworICAgICAgICBt
X291dC5qdW1wKG1faW5pdGlhbGl6YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhtX2lu
aXRpYWxpemF0aW9uKTsKKyAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0gbV9vdXQucGFy
YW0oMCk7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50NjQoVGFnVHlw
ZU51bWJlcik7CiAgICAgICAgIG1fdGFnTWFzayA9IG1fb3V0LmNvbnN0SW50NjQoVGFnTWFzayk7
CiAgICAgICAgIAotICAgICAgICBtX2Fib3J0RnVuY3Rpb24gPSBjb25zdEludFRvUHRyKAotICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWJvcnQpLAotICAgICAgICAgICAgcG9pbnRlclR5
cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlKSkpOwotICAgICAgICAKICAgICAgICAgZm9y
IChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nr
cy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgbV9oaWdoQmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgaWYgKCFtX2hpZ2hC
bG9jaykKQEAgLTk4LDE0ICsxMDIsMTcgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgY2xv
c2VPdmVyRmx1c2hlZExvY2FsT3BzKCk7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9s
b2d1ZSwgbV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKKyAgICAgICAg
bV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbiwgbV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9i
bG9ja3NbMF0uZ2V0KCkpKTsKIAogICAgICAgICB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCk7
CiAgICAgICAgIAotICAgICAgICBtX291dC5qdW1wKG1fYmxvY2tzLmdldChtX2dyYXBoLm1fYmxv
Y2tzWzBdLmdldCgpKSk7CisgICAgICAgIC8vIExlYXZlIHRoZSBpbml0aWFsaXphdGlvbiBibG9j
ayBoYW5naW5nLCBzaW5jZSB3ZSB3aWxsIGFkZCB0byBpdCBsYXRlci4KICAgICAgICAgCiAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgu
bV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBjb21waWxlQmxvY2so
YmxvY2tJbmRleCk7CisgICAgICAgIAorICAgICAgICAvLyBBbmQgbm93IGNvbXBsZXRlIHRoZSBp
bml0aWFsaXphdGlvbiBibG9jay4KKyAgICAgICAgbGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0
aWFsaXphdGlvbkJsb2NrKCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKICAgICAgICAgICAgIG1fZnRsU3RhdGUuZHVtcFN0YXRlKCJhZnRlciBsb3dlcmluZyIp
OwpAQCAtMTUxLDggKzE1OCw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB0cmFuc2ZlckFu
ZENoZWNrQXJndW1lbnRzKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBTZXQgdXAgdGhlIE9T
UiBzdG9yeSBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIC8vIFdoaWxlIGNoZWNraW5nIGFyZ3VtZW50cywgZXZl
cnl0aGluZyBpcyBpbiB0aGUgc3RhY2suCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNpemUo
KTsgaS0tOykKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFs
dWVJbkpTU3RhY2spOwogICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dy
YXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgTm9k
ZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CkBAIC0xNzAsMjEgKzE3OCwyMSBAQCBw
cml2YXRlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUo
KSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YXJpYWJsZS0+c2hvdWxkVXNl
RG91YmxlRm9ybWF0KCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2Fy
ZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1
bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkp
OworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVl
VmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwgbV9sb2NhbHMzMi5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXND
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsK
KyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZh
bHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwogICAgICAgICAgICAgICAg
ICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsK
LSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwg
bm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJv
b2xlYW4oanNWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hCb29s
ZWFuKGpzVmFsdWUpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkp
OwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0y
MTYsMTggKzIyNCwxOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVhc2ll
ciB0byByZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9uZXh0TG93Qmxv
Y2spOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFjayB0aGUgT1NS
IHNpdHVhdGlvbiBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9j
aygpOwogICAgICAgICAKICAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwogICAgICAgICBt
X2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFyKCk7
CiAgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOworICAgICAgICBtX3RpbWVUb0xpdmUu
Y2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9z
dGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwogICAgICAgICAKLSAgICAgICAgZm9y
ICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgp
OyArK25vZGVJbmRleCkKKyAgICAgICAgZm9yIChtX25vZGVJbmRleCA9IDA7IG1fbm9kZUluZGV4
IDwgbV9oaWdoQmxvY2stPnNpemUoKTsgKyttX25vZGVJbmRleCkKICAgICAgICAgICAgIGNvbXBp
bGVOb2RlKG5vZGVJbmRleCk7CiAgICAgfQogICAgIApAQCAtMjQwLDkgKzI0OCw2IEBAIHByaXZh
dGU6CiAgICAgICAgIAogICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9zdGF0
ZS5zdGFydEV4ZWN1dGluZyhtX25vZGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKCFtX25vZGUt
PnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICByZXR1cm47IC8vIEZJWE1FOiBJbXBsZW1l
bnQgT1NSIG1hZ2ljIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMTM2MjMKLSAgICAgICAgCiAgICAgICAgIG1fZGlyZWN0aW9uID0gKG1fbm9kZS0+ZmxhZ3Mo
KSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVj
dWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CkBAIC0y
NTgsNiArMjYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAg
ICAgICBjb21waWxlU2V0TG9jYWwoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IE1vdkhpbnQ6CisgICAgICAgICAgICBjb21waWxlTW92SGludCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgICAgIGNvbXBpbGVab21iaWVI
aW50KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6
CiAgICAgICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKCk7CiAgICAgICAgICAgICBicmVh
azsKQEAgLTM1Miw2ICszNjMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAgICAgICAgIAorICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dyYXBo
LCBtX25vZGUsIHVzZSk7CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5oYXNSZXN1bHQo
KSkKKyAgICAgICAgICAgIG1fdGltZVRvTGl2ZS5hZGQobV9ub2RlLCBtX25vZGUtPmFkanVzdGVk
UmVmQ291bnQoKSk7CisgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhlY3V0ZUVmZmVjdHMp
CiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7CiAgICAgfQpA
QCAtMzY4LDggKzM4NCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZUdldExv
Y2FsKCkKICAgICB7CisgICAgICAgIC8vIEdldExvY2FsIGlzIG9uZSBvZiB0aGUgZmV3IG5vZGVz
IHRoYXQgbWF5IGJlIGxlZnQgYmVoaW5kLCB3aXRoICFzaG91bGRHZW5lcmF0ZSgpLgorICAgICAg
ICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25vZGUtPnZh
cmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
dmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBBYnN0cmFj
dFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJpYWJsZS0+bG9j
YWwoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkgewpA
QCAtNDIwLDEzICs0NDAsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVTZXRM
b2NhbCgpCiAgICAgeworICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgICAgICAK
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJs
ZS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFy
aWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGJvb2wgbmVlZHNGbHVz
aGluZyA9IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG1fbm9kZSk7CiAgICAgICAgIAotICAg
ICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBNb3ZIaW50IGZvciBPU1IuCi0gICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKLSAgICAgICAgCiAg
ICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKICAgICAgICAg
ICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRMLgpAQCAtNDM4LDIxICs0NTcs
MjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUt
PmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzMzIu
b3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0Zs
dXNoaW5nKQorICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAg
ICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFibGUtPmxvY2Fs
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2Fs
KCldID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXND
ZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fb3V0LnNl
dCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1
c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVz
c0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNrKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAg
ICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1fbG9j
YWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAg
aWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsK
ICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hp
bGQxKCkpLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKFZhbHVl
SW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NjAsMTggKzQ4NSwzMiBAQCBwcml2YXRlOgog
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpT
U3RhY2spOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkp
OwotICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcp
IHsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUt
PmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgp
XSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkKKyAgICB7CisgICAgICAgIG9ic2VydmVNb3ZIaW50
KG1fbm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVpvbWJpZUhpbnQoKQorICAg
IHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKTsKKyAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IGRhdGEtPmxvY2FsKCk7Cisg
ICAgICAgIG1fdmFsdWVTb3VyY2VzW2RhdGEtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoU291cmNl
SXNEZWFkKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGludEFuZENoZWNrKCkK
ICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4KLSAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwor
ICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwogICAgICAgICBzcGVjdWxhdGUobV9ub2Rl
LT5jaGlsZDEoKSk7CiAgICAgfQogICAgIApAQCAtNTAwLDcgKzUzOSw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBt
X291dC5hZGRXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKKyAgICAg
ICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFs
dWUocmVzdWx0LCAxKSk7CiAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICB9CkBAIC01MjQsNyArNTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnN1YldpdGhPdmVyZmxvdzMy
KGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9v
dXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKICAgICAg
ICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3Vs
dCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU0Nyw3ICs1ODYsNyBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdo
dCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dS
ZXN1bHQgPSBtX291dC5tdWxXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCAwLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZs
b3dSZXN1bHQsIDEpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFs
dWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7CiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTU2LDggKzU5NSw4IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKGxlZnQs
IG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVpl
cm8sIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQzMlplcm8pKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxl
c3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0
LmludDMyWmVybykpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsK
ICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
ICAgICAgICAgICAgIH0KQEAgLTU4NSw3ICs2MjQsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGhhdmUgYSBuZWdhdGUtd2l0aC1vdmVyZmxvdyBpbnRyaW5zaWMuIEhv
cGVmdWxseSB0aGlzCiAgICAgICAgICAgICAgICAgLy8gZG9lcyB0aGUgdHJpY2ssIHRob3VnaC4K
ICAgICAgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5zdWJXaXRoT3Zl
cmZsb3czMihtX291dC5pbnQzMlplcm8sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkp
OworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291
dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKICAgICAgICAgICAgICAgICByZXN1
bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgCkBAIC02NTYsNyArNjk1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICBzcGVjdWxhdGVGb3J3YXJkKAotICAgICAgICAgICAgT3ZlcmZsb3csIDAsIDAsIG1fb3V0Lmxl
c3NUaGFuKHZhbHVlLCBtX291dC5pbnQzMlplcm8pLAorICAgICAgICAgICAgT3ZlcmZsb3csIG5v
VmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0LmludDMyWmVybyksCiAgICAg
ICAgICAgICBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdFVJbnQzMiwgdmFsdWUpKTsKICAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCB2YWx1ZSk7CiAgICAgfQpAQCAtNjc1LDcgKzcx
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVT
ZXQoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAg
ICAgIGV4aXRLaW5kLCBjZWxsLCAwLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVl
VmFsdWUoY2VsbCksIDAsCiAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJl
LCB3ZWFrUG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSkpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CkBAIC02OTIsNyArNzMxLDcgQEAgcHJpdmF0ZToKICAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgZXhpdEtpbmQsIGNl
bGwsIDAsCisgICAgICAgICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAogICAg
ICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlLCB3ZWFrUG9pbnRlcihtX25vZGUtPnN0
cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNzU1LDcgKzc5NCw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKICAgICAgICAgICAgIGlmIChtX25vZGUt
PmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgK
LSAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIDAsIDAsCisgICAgICAgICAgICAgICAg
ICAgIE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LmFib3ZlT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2Fk
MzIoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSkpOwogICAgICAgICAg
ICAgICAgIApAQCAtNzY0LDcgKzgwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRDb250
aWd1b3VzUHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQuemVy
b0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5m
b3JOb2RlKG1fbm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUpKTsKLSAgICAgICAgICAgICAgICBzcGVj
dWxhdGUoTG9hZEZyb21Ib2xlLCAwLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsIG1fb3V0Lmlz
WmVybzY0KHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9u
b2RlLCByZXN1bHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAt
ODY1LDMyICs5MDQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2
b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKEV4aXRLaW5kLCBMVmFsdWUsIE5vZGUqLCBMVmFsdWUgZmFp
bENvbmRpdGlvbikKKyAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKAorICAgICAgICBFeGl0S2lu
ZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUg
ZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9v
dXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQu
bmV3QmxvY2soKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9u
LCBmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQg
PSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBPU1IgZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICBtX291dC5jYWxsKG1fYWJvcnRGdW5j
dGlvbik7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAg
ICAgICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgQmFja3dh
cmRTcGVjdWxhdGlvbiwgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlRm9yd2FyZChFeGl0S2luZCBraW5kLCBMVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhp
Z2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sIGNvbnN0IEZvcm1hdHRlZFZhbHVlJikKKyAg
ICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAor
ICAgICAgICBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgcmVjb3ZlcnkpCiAgICAgewotICAgICAgICBz
cGVjdWxhdGVCYWNrd2FyZChraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9u
KTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBm
b3J3YXJkLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzNjIzCisgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dW
YWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBGb3J3YXJkU3BlY3VsYXRpb24sIHJlY292
ZXJ5KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQga2luZCwgTFZh
bHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAg
IHZvaWQgc3BlY3VsYXRlKAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBs
b3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7Ci0g
ICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxD
b25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5nIHRoZSBPU1Ig
ZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0aW9uLgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisg
ICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLCBmYWlsQ29uZGl0aW9uLCBtX2RpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgdGVybWluYXRlKEV4aXRLaW5kIGtpbmQpCkBAIC04OTgsMjcgKzkz
MSw0MiBAQCBwcml2YXRlOgogICAgICAgICBzcGVjdWxhdGUoa2luZCwgMCwgMCwgbV9vdXQuYm9v
bGVhblRydWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJhY2t3YXJkVHlwZUNoZWNrKExWYWx1
ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjaygK
KyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxh
dGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9u
KQogICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGhpZ2hWYWx1ZSwg
dHlwZXNQYXNzZWRUaHJvdWdoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgQVNTRVJU
KG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOwotICAgICAgICBzcGVjdWxh
dGVCYWNrd2FyZChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwgZmFpbENvbmRp
dGlvbik7Ci0gICAgICAgIG1fc3RhdGUuZm9yTm9kZShoaWdoVmFsdWUpLmZpbHRlcih0eXBlc1Bh
c3NlZFRocm91Z2gpOworICAgICAgICBhcHBlbmRUeXBlQ2hlY2soCisgICAgICAgICAgICBsb3dW
YWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24sIEJhY2t3
YXJkU3BlY3VsYXRpb24sCisgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdo
VmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTFZhbHVlIGZhaWxDb25k
aXRpb24pCisgICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0ZWRWYWx1
ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhy
b3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAgICBiYWNr
d2FyZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZh
aWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5nIG9mIE9T
UiBleGl0IHRvIGZvcndhcmQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICAg
ICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9u
LCBGb3J3YXJkU3BlY3VsYXRpb24sCisgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCB0eXBlQ2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hW
YWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUgZmFpbENvbmRp
dGlvbikKKyAgICB2b2lkIHR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisg
ICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgYmFja3dhcmRUeXBl
Q2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0
aW9uKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0
byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0aW9uLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAg
IGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVz
UGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgbV9kaXJlY3Rpb24sCisgICAgICAgICAgICBG
b3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRUeXBlQ2hlY2so
CisgICAgICAgIExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIFNwZWN1
bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAg
eworICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bh
c3NlZFRocm91Z2gpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobWF5SGF2
ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNlS2luZCgpKSk7CisgICAgICAgIGFwcGVuZE9TUkV4aXQo
QmFkVHlwZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRpb24sIGRpcmVj
dGlvbiwgcmVjb3ZlcnkpOworICAgICAgICBtX3N0YXRlLmZvck5vZGUoaGlnaFZhbHVlKS5maWx0
ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvd0ludDMy
KEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFu
ZFNwZWN1bGF0aW9uKQpAQCAtOTI5LDcgKzk3Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9
IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQ
RV9DSEVDSyhib3hlZFJlc3VsdCwgZWRnZSwgU3BlY0ludDMyLCBpc05vdEludDMyKGJveGVkUmVz
dWx0KSk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBqc1Zh
bHVlVmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRS
ZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVz
dWx0KTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQp
OwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk0NSw3ICs5OTQsOCBAQCBwcml2YXRl
OgogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1
bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAKICAgICAgICAgaWYg
KExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KSkgewotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0sodW5jaGVja2VkUmVzdWx0LCBlZGdlLCBT
cGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tlZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuY2hlY2tlZFJlc3VsdCks
IGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVzdWx0KSk7CiAgICAgICAgICAg
ICByZXR1cm4gdW5jaGVja2VkUmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApAQCAtOTcxLDcg
KzEwMjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAg
CiAgICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQo
ZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1bmJveGVkUmVzdWx0
LCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKKyAgICAg
ICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmJv
eGVkUmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0
KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1
bHQpOwogICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0
KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDk0LDcgKzExNDUsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCiAg
ICAgewogICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgIGNlbGwsIGVkZ2UsIFNw
ZWNPYmplY3QsCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNPYmpl
Y3QsCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBtX291dC5sb2Fk
UHRyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZSksCiAgICAgICAgICAgICAgICAgbV9v
dXQuY29uc3RJbnRQdHIoZ2xvYmFsRGF0YSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKQEAg
LTExMDUsNiArMTE1NiwzNTcgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVk
Z2UsIGxvd0NlbGwoZWRnZSkpOwogICAgIH0KICAgICAKKyAgICBib29sIGlzTGl2ZShOb2RlKiBu
b2RlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBp
dGVyID0gbV90aW1lVG9MaXZlLT5maW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgQVNTRVJUKGl0
ZXIgIT0gbV90aW1lVG9MaXZlLT5lbmQoKSk7CisgICAgICAgIHJldHVybiAhIWl0ZXItPnZhbHVl
OworICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBI
YXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUtPmZp
bmQoZWRnZS5ub2RlKCkpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUtPmVu
ZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlKTsKKyAgICAgICAgaXRlci0+dmFsdWUt
LTsKKyAgICB9CisgICAgCisgICAgLy8gV3JhcHBlciB1c2VkIG9ubHkgZm9yIERGR19OT0RFX0RP
X1RPX0NISUxEUkVOCisgICAgdm9pZCB1c2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAgICB7CisgICAg
ICAgIHVzZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXplT1NSRXhpdFN0
YXRlRm9yQmxvY2soKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNv
dXJjZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9oaWdoQmxv
Y2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgIGlmICghbm9kZSkgeworICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZh
cmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1lbnRzQWxpYXMoKSkgeworICAgICAgICAgICAgICAg
IG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQXJndW1lbnRzU291cmNlKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAgICAgICAgICAv
LyBUaGlzIHZhbHVlIHdpbGwgaGF2ZSBiZWVuIGZsdXNoZWQgdG8gdGhlIEpTU3RhY2sgaW4gc29t
ZSBmb3JtIG9yCisgICAgICAgICAgICAgICAgLy8gYW5vdGhlci4KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5K
U1N0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5M
b2NhbHMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluTG9jYWxzKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVl
U291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
YXBwZW5kT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93
VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sCisgICAgICAgIFNw
ZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisg
ICAgeworICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5kKAorICAgICAg
ICAgICAgT1NSRXhpdCgKKyAgICAgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwg
bV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1ZSksCisgICAg
ICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luLCBtX2xhc3RTZXRPcGVyYW5kLCBtX3ZhbHVl
U291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgbV9mdGxTdGF0ZS5vc3JFeGl0LmFwcGVu
ZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICAKKyAgICAgICAgT1NSRXhpdCYg
ZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CisgICAgICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLm9zckV4aXQubGFzdCgpOworCisg
ICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAgICAgICAgCisg
ICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwgY29udGludWF0aW9u
KTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUpOworICAgICAg
ICBpbmZvLm1fdGh1bmtBZGRyZXNzID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291
dC5pbnRQdHIpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIEV4
aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fY2Fs
bEZyYW1lKTsKKyAgICAgICAgaWYgKGxvd1ZhbHVlKQorICAgICAgICAgICAgYXJndW1lbnRzLmFw
cGVuZChhcmd1bWVudHMudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgVmFs
dWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUlu
SlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpp
bkpTU3RhY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50
MzJJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbjMyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIERvdWJsZUluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ld
ID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxzOgorICAgICAgICAgICAgICAgIGFkZEV4
aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1
ZUZvcm1hdEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2FsczY0W2ldKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDMySW5Mb2NhbHM6CisgICAgICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMs
IGksIFZhbHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldChtX2xvY2FsczMyW2ldKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2FsczoKKyAgICAg
ICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFy
Z3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBtX291dC5nZXQobV9sb2NhbHNCb29sZWFu
W2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZUlu
TG9jYWxzOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91YmxlcyBpbiBG
VEwuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzYyNAorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFyZ3VtZW50c1Nv
dXJjZToKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50b21Bcmd1bWVu
dHMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTExMzk4NgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNvdXJjZUlzRGVh
ZDoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhdmVOb2RlOgorICAg
ICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvck5vZGUoZXhpdCwgYXJndW1lbnRzLCBpLCBz
b3VyY2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKGRpcmVjdGlvbiA9IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAgICAgICAgIGV4
aXQuY29udmVydFRvRm9yd2FyZChtX2hpZ2hCbG9jaywgbV9ub2RlLCBtX25vZGVJbmRleCwgcmVj
b3ZlcnksIGFyZ3VtZW50cyk7CisgICAgICAgIAorICAgICAgICAvLyBTbywgdGhlIHJlYWxseSBs
YW1lIHRoaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIHRvIGJ1aWxkIGFuIExMVk0gZnVuY3Rpb24g
dHlwZS4KKyAgICAgICAgLy8gQm9vby4KKyAgICAgICAgVmVjdG9yPExUeXBlLCAxNj4gYXJndW1l
bnRUeXBlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKHR5cGVPZihhcmd1bWVu
dHNbaV0pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmNvbnZlcnRUb1RhaWxDYWxsKG1fb3V0
LmNhbGwoCisgICAgICAgICAgICBtX291dC5pbnRUb1B0cigKKyAgICAgICAgICAgICAgICBtX291
dC5nZXQoaW5mby5tX3RodW5rQWRkcmVzcyksCisgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUo
ZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlLCBhcmd1bWVudFR5cGVzKSkpLAorICAgICAgICAg
ICAgYXJndW1lbnRzKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRFeGl0QXJndW1lbnRG
b3JOb2RlKAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVu
dHMsIHVuc2lnbmVkIGluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkp
OworCisgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFydW1lbnQoZXhpdCwgYXJndW1l
bnRzLCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgICAg
ICBpZiAoIWlzTGl2ZShub2RlKSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmVlZHNPU1JCYWNrd2FyZFJld2lyaW5nKG5v
ZGUtPm9wKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKKyAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudChleGl0
LCBhcmd1bWVudHMsIGluZGV4LCBub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgIGlmIChpc0xpdmUobm9kZSkpCisgICAgICAgICAgICAgICAgICAgIGZv
dW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFmb3VuZCkgeworICAgICAgICAgICAgICAgIE5vZGUqIGludDMyVG9Eb3VibGUgPSAwOworICAg
ICAgICAgICAgICAgIE5vZGUqIHZhbHVlVG9JbnQzMiA9IDA7CisgICAgICAgICAgICAgICAgTm9k
ZSogdWludDMyVG9OdW1iZXIgPSAwOworICAgICAgICAgICAgICAgIE5vZGUqIGRvdWJsZUFzSW50
MzIgPSAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSos
IHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5iZWdpbigpOworICAgICAg
ICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgZW5kID0gbV90aW1l
VG9MaXZlLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVy
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUpCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRl
ID0gaXRlci0+a2V5OworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+Y2hpbGQx
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQxKCkgIT0gbm9kZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNhbmRpZGF0ZS0+b3Ao
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQzMlRvRG91YmxlID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAgICAg
ICAgICAgICAgICAgICAgdmFsdWVUb0ludDMyID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1iZXI6
CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlciA9IGNhbmRpZGF0ZTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIERv
dWJsZUFzSW50MzI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlciA9IGNh
bmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFuZWVkc09TUkZv
cndhcmRSZXdpcmluZyhjYW5kaWRhdGUtPm9wKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkb3VibGVBc0ludDMyKQorICAgICAgICAg
ICAgICAgICAgICBub2RlID0gZG91YmxlQXNJbjMyOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KGludDMyVG9Eb3VibGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnQzMlRvRG91Ymxl
OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMikKKyAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9IHZhbHVlVG9JbnQzMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1aW50
MzJUb051bWJlcikKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHVpbnQzMlRvTnVtYmVyOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0xpdmUobm9kZSkpCisgICAg
ICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIGV4aXQubV92YWx1
ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoaXNMaXZl
KG5vZGUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9pbnQzMlZh
bHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBhcmd1
bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEludDMyLCByZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1f
Ym9vbGVhblZhbHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChl
eGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUg
cmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhp
dEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwgcmVz
dWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBkb3VibGVzIGluIHRoZSBGVEwuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjQKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlUb1NldENv
bnN0YW50RXhpdEFyZ3VtZW50KAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAgICAg
ICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaW5kZXhd
ID0gRXhpdFZhbHVlOjpjb25zdGFudChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6
CisgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50b21Bcmd1bWVudHMuCisgICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTg2
CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRFeGl0QXJndW1lbnQoCisgICAg
ICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgdW5zaWduZWQg
aW5kZXgsIFZhbHVlRm9ybWF0IGZvcm1hdCwKKyAgICAgICAgTFZhbHVlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KEV4aXRB
cmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFw
cGVuZCh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbGlua09TUkV4aXRzQW5kQ29tcGxl
dGVJbml0aWFsaXphdGlvbkJsb2NrKCkKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBvc3JFeGl0VGh1bmsgPQorICAgICAgICAgICAgZ2xvYmFsRGF0YSgpLmdldENUSVN0dWIo
b3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRUaHVuay5jb2RlKCkpOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7CisgICAgICAg
IAorICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoCisgICAgICAgICAgICAmZ2xvYmFsRGF0
YSgpLCAmbV9leGl0VGh1bmtHZW5lcmF0b3IsIG1fZnRsU3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ss
CisgICAgICAgICAgICBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgCisgICAg
ICAgIEFTU0VSVChtX2Z0bFN0YXRlLm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuaml0Q29k
ZS0+b3NyRXhpdC5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgT1NS
RXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhpdFtpXTsKKyAgICAg
ICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXRbaV07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1fdGh1bmtKdW1w
LCB0YXJnZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zZXQoCisgICAgICAg
ICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZm
ZXIubG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSksCisg
ICAgICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIGV4aXQubV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihl
eGl0Lm1fdGh1bmtKdW1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGUuaml0
Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCisgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09E
RSgKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLAorICAgICAgICAgICAgICAgICgiRlRMIGV4
aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0ZS5n
cmFwaC5tX2NvZGVCbG9jayxKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CisKKyAgICAgICAg
bV9vdXQuanVtcChtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUpCisgICAgeworICAg
ICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlQobm9k
ZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAgICAgICAgCisgICAgICAgIGludCBvcGVyYW5kID0g
bm9kZS0+bG9jYWwoKTsKKyAgICAgICAgCisgICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBvcGVy
YW5kOworICAgICAgICBtX3ZhbHVlU291cmNlc1tvcGVyYW5kXSA9IFZhbHVlU291cmNlKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5j
ZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29t
bW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTExNTEsMTIgKzE1NTMsMTIgQEAgcHJpdmF0
ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgCiAgICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsK
KyAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxpemF0aW9uOwogICAgIEhhc2hNYXA8QmFzaWNCbG9j
ayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKICAgICAKICAgICBMVmFsdWUgbV9jYWxsRnJhbWU7
CiAgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUgbV90YWdNYXNrOwotICAg
IExWYWx1ZSBtX2Fib3J0RnVuY3Rpb247CiAgICAgCiAgICAgSGFzaFNldDxOb2RlKj4gbV9mbHVz
aGVkTG9jYWxPcHM7CiAgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7
CkBAIC0xMTY1LDE1ICsxNTY3LDIxIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZh
bHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jvb2xl
YW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7Cisg
ICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKICAgICAKICAgICBPcGVy
YW5kczxMVmFsdWU+IG1fbG9jYWxzQm9vbGVhbjsKICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9j
YWxzMzI7CiAgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczY0OwogICAgIAorICAgIE9wZXJh
bmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFu
ZDsKKyAgICBFeGl0VGh1bmtHZW5lcmF0b3IgbV9leGl0VGh1bmtHZW5lcmF0b3I7CisgICAgCiAg
ICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwog
ICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hCbG9jazsKICAgICBMQmFzaWNCbG9jayBtX25leHRM
b3dCbG9jazsKKyAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAgICBOb2RlKiBtX25vZGU7CiAg
ICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0LmgiCisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitPU1JFeGl0OjpP
U1JFeGl0KAorICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBWYWx1ZUZvcm1hdCBwcm9maWxlVmFsdWVG
b3JtYXQsCisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICBpbnQgbGFzdFNldE9wZXJhbmQsIHVuc2lnbmVkIG51
bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscykKKyAgICA6IE9TUkV4aXRC
YXNlKGV4aXRLaW5kLCBjb2RlT3JpZ2luKQorICAgICwgbV9wcm9maWxlVmFsdWVGb3JtYXQocHJv
ZmlsZVZhbHVlRm9ybWF0KQorICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQorICAg
ICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQo
MCkKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQobGFzdFNldE9wZXJhbmQpCisgICAgLCBtX3ZhbHVl
cyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCit7Cit9CisKK0NvZGVMb2NhdGlv
bkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVC
bG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcCgKKyAgICAgICAgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgICAgICBmdGxDb2RlQmxvY2stPmdldEpJVENv
ZGUoKS0+ZnRsKCktPmV4aXRUaHVua3MoKS5kYXRhTG9jYXRpb24oKSkgKworICAgICAgICBtX3Bh
dGNoYWJsZUNvZGVPZmZzZXQpOworfQorCit2b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQo
CisgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jaywgREZHOjpOb2RlKiBjdXJyZW50Tm9kZSwgdW5z
aWduZWQgbm9kZUluZGV4LAorICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlICZ2YWx1ZSwgRXhpdEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzKQoreworICAgIE5vZGUqIG5vZGU7CisgICAgTm9kZSogbGFz
dE1vdkhpbnQ7CisgICAgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3VycmVu
dE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZVJlY292ZXJ5KTsKKworICAgIEFTU0VSVChub2RlLT5j
b2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAKKyAgICBtX2NvZGVP
cmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgIAorICAgIGlmICghdmFsdWUpCisgICAgICAg
IHJldHVybjsKKyAgICAKKyAgICBpbnQgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0TW92SGludC0+
bG9jYWwoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3ZlcnJpZGRlbk9wZXJhbmQ7CisgICAg
CisgICAgLy8gSXMgdGhlIHZhbHVlIGZvciB0aGlzIG9wZXJhbmQgYmVpbmcgcGFzc2VkIGFzIGFu
IGFyZ3VtZW50IHRvIHRoZSBleGl0LCBvciBpcworICAgIC8vIGl0IHNvbWV0aGluZyBlbHNlPyBJ
ZiBpdCdzIGFuIGFyZ3VtZW50IGFscmVhZHksIHRoZW4gcmVwbGFjZSB0aGF0IGFyZ3VtZW50Owor
ICAgIC8vIG90aGVyd2lzZSBhZGQgYW5vdGhlciBhcmd1bWVudC4KKyAgICBpZiAobV92YWx1ZXNb
b3ZlcnJpZGRlbk9wZXJhbmRdLmlzQXJndW1lbnQoKSkgeworICAgICAgICBFeGl0QXJndW1lbnQg
YXJndW1lbnQgPSBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0uZXhpdEFyZ3VtZW50KCk7Cisg
ICAgICAgIGFyZ3VtZW50c1tleGl0QXJndW1lbnQuYXJndW1lbnQoKV0gPSB2YWx1ZS52YWx1ZSgp
OworICAgICAgICBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0gPSBFeGl0VmFsdWU6OmV4aXRB
cmd1bWVudCgKKyAgICAgICAgICAgIGV4aXRBcmd1bWVudC53aXRoRm9ybWF0KHZhbHVlLmZvcm1h
dCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1l
bnQgPSBhcmd1bWVudHMuc2l6ZSgpOworICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUudmFsdWUo
KSk7CisgICAgbV92YWx1ZXNbbV9sYXN0U2V0T3BlcmFuZF0gPSBFeGl0VmFsdWU6OmV4aXRBcmd1
bWVudCgKKyAgICAgICAgRXhpdEFyZ3VtZW50KHZhbHVlLmZvcm1hdCgpLCBhcmd1bWVudCkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRfaAorI2RlZmluZSBGVExPU1JFeGl0X2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNpbmNs
dWRlICJERkdPU1JFeGl0QmFzZS5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNp
bmNsdWRlICJGVExFeGl0QXJndW1lbnRMaXN0LmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgi
CisjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUgIk9w
ZXJhbmRzLmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKworLy8gVHJhY2tzIG9uZSBPU1IgZXhpdCBzaXRlIHdpdGhpbiB0aGUg
RlRMIEpJVC4gT1NSIGV4aXQgaW4gRlRMIHdvcmtzIGJ5IGRlY29uc3RydWN0aW5nCisvLyB0aGUg
Y3JhenkgdGhhdCBpcyBPU1IgZG93biB0byBzaW1wbGUgU1NBIENGRyBwcmltaXRpdmVzIHRoYXQg
YW55IGNvbXBpbGVyIGJhY2tlbmQKKy8vIChpbmNsdWRpbmcgb2YgY291cnNlIExMVk0pIGNhbiBn
cm9rIGFuZCBkbyBtZWFuaW5nZnVsIHRoaW5ncyB0by4gRXhjZXB0IGZvcgorLy8gd2F0Y2hwb2lu
dC1iYXNlZCBleGl0cywgd2hpY2ggaGF2ZW4ndCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCAoc2VlIHdl
YmtpdC5vcmcvYi8xMTM2NDcpLAorLy8gYW4gZXhpdCBpcyBqdXN0IGEgY29uZGl0aW9uYWwgYnJh
bmNoIGluIHRoZSBlbWl0dGVkIGNvZGUgd2hlcmUgb25lIGRlc3RpbmF0aW9uIGlzIHRoZQorLy8g
Y29udGludWF0aW9uIGFuZCB0aGUgb3RoZXIgaXMgYSBiYXNpYyBibG9jayB0aGF0IHBlcmZvcm1z
IGEgbm8tcmV0dXJuIHRhaWwtY2FsbCB0byBhbgorLy8gZXhpdCB0aHVuay4gVGhpcyB0aHVuayB0
YWtlcyBhcyBpdHMgYXJndW1lbnRzIHRoZSBsaXZlIG5vbi1jb25zdGFudAorLy8gbm90LWFscmVh
ZHktYWNjb3VudGVkLWZvciBieXRlY29kZSBzdGF0ZS4gVG8gYXBwcmVjaWF0ZSBob3cgdGhpcyB3
b3JrcyBjb25zaWRlciB0aGUKKy8vIGZvbGxvd2luZyBKYXZhU2NyaXB0IHByb2dyYW0sIGFuZCBp
dHMgbG93ZXJpbmcgZG93biB0byBMTFZNIElSIGluY2x1ZGluZyB0aGUgcmVsZXZhbnQKKy8vIGV4
aXRzOgorLy8KKy8vIGZ1bmN0aW9uIGZvbyhvKSB7CisvLyAgICAgdmFyIGEgPSBvLmE7IC8vIHBy
ZWRpY3RlZCBpbnQKKy8vICAgICB2YXIgYiA9IG8uYjsKKy8vICAgICB2YXIgYyA9IG8uYzsgLy8g
TkIgdGhpcyBpcyBkZWFkCisvLyAgICAgYSA9IGEgfCA1OyAvLyBvdXIgZXhhbXBsZSBPU1IgZXhp
dDogbmVlZCB0byBjaGVjayBpZiBhIGlzIGFuIGludAorLy8gICAgIHJldHVybiBhICsgYjsKKy8v
IH0KKy8vCisvLyBKdXN0IGNvbnNpZGVyIHRoZSAiYSB8IDUiLiBJbiB0aGUgREZHIElSLCB0aGlz
IGxvb2tzIGxpa2U6CisvLworLy8gQml0T3IoQ2hlY2s6SW50MzI6QGEsIEludDMyOjUpCisvLwor
Ly8gV2hlcmUgQGEgaXMgdGhlIG5vZGUgZm9yIHRoZSBHZXRMb2NhbCBub2RlIHRoYXQgZ2V0cyB0
aGUgdmFsdWUgb2YgdGhlICdhJyB2YXJpYWJsZS4KKy8vIENvbmNlcHR1YWxseSwgdGhpcyBub2Rl
IGNhbiBiZSBmdXJ0aGVyIGJyb2tlbiBkb3duIHRvIHRoZSBmb2xsb3dpbmcgKG5vdGUgdGhhdCB0
aGlzCisvLyBwYXJ0aWN1bGFyIGxvd2VyaW5nIG5ldmVyIGFjdHVhbGx5IGhhcHBlbnMgLSB3ZSBz
a2lwIHRoaXMgc3RlcCBhbmQgZ28gc3RyYWlnaHQgdG8KKy8vIExMVk0gSVIgLSBidXQgaXQncyBz
dGlsbCB1c2VmdWwgdG8gc2VlIHRoaXMpOgorLy8KKy8vIGV4aXRJZihAYSBpcyBub3QgaW50MzIp
OworLy8gY29udGludWF0aW9uOworLy8KKy8vIFdoZXJlICdleGl0SWYoKScgaXMgYSBmdW5jdGlv
biB0aGF0IHdpbGwgZXhpdCBpZiB0aGUgYXJndW1lbnQgaXMgdHJ1ZSwgYW5kCisvLyAnY29udGlu
dWF0aW9uJyBpcyB0aGUgc3R1ZmYgdGhhdCB3ZSB3aWxsIGRvIGFmdGVyIHRoZSBleGl0SWYoKSBj
aGVjay4gKE5vdGUgdGhhdAorLy8gRlRMIHJlZmVycyB0byAnZXhpdElmKCknIGFzICdzcGVjdWxh
dGUoKScsIHdoaWNoIGlzIGluIGxpbmUgd2l0aCBERkcgdGVybWlub2xvZ3kuKQorLy8gVGhpcyB0
aGVuIGdldHMgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyBMTFZNIElSLCBhc3N1bWluZyB0
aGF0ICUwIGlzIHRoZSBMTFZNCisvLyB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHZhcmlhYmxlICdh
JywgYW5kICUxIGlzIHRoZSBMTFZNIHZhbHVlIGZvciB2YXJpYWJsZSAnYic6CisvLworLy8gICAl
MiA9IC4uLiAvLyB0aGUgcHJlZGljdGF0ZSBjb3JyZXNwb25kaW5nIHRvICdAYSBpcyBub3QgaW50
MzInCisvLyAgIGJyIGkxICUyLCBsYWJlbCAlMywgbGFiZWwgJTQKKy8vIDsgPGxhYmVsPjozCisv
LyAgIGNhbGwgdm9pZCBleGl0VGh1bmsxKCUwLCAlMSkgLy8gcGFzcyAnYScgYW5kICdiJywgc2lu
Y2UgdGhleSdyZSBib3RoIGxpdmUtaW4tYnl0ZWNvZGUKKy8vICAgdW5yZWFjaGFibGUKKy8vIDsg
PGxhYmVsPjo0CisvLyAgIC4uLiAvLyBjb2RlIGZvciB0aGUgY29udGludWF0aW9uCisvLworLy8g
V2hlcmUgJ2V4aXRUaHVuazEnIGlzIHRoZSBJUiB0byBnZXQgdGhlIGV4aXQgdGh1bmsgZm9yICp0
aGlzKiBPU1IgZXhpdC4gRWFjaCBPU1IKKy8vIGV4aXQgd2lsbCBhcHBlYXIgdG8gTExWTSB0byBo
YXZlIGEgZGlzdGluY3QgZXhpdCB0aHVuay4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBkaWRuJ3Qg
aGF2ZSB0byBwYXNzICc1JywgJ28nLCBvciAnYycgdG8gdGhlIGV4aXQgdGh1bmsuIDUgaXMgYQor
Ly8gY29uc3RhbnQgYW5kIHRoZSBERkcgYWxyZWFkeSBrbm93cyB0aGF0LCBhbmQgY2FuIGFscmVh
ZHkgdGVsbCB0aGUgT1NSIGV4aXQgbWFjaGluZXJ5CisvLyB3aGF0IHRoYXQgY29udGFudCBpcyBh
bmQgd2hpY2ggYnl0ZWNvZGUgdmFyaWFibGVzIChpZiBhbnkpIGl0IG5lZWRzIHRvIGJlIGRyb3Bw
ZWQKKy8vIGludG8uIFRoaXMgaXMgY29udmV5ZWQgdG8gdGhlIGV4aXQgc3RhdGljYWxseSwgdmlh
IHRoZSBPU1JFeGl0IGRhdGEgc3RydWN0dXJlIGJlbG93LgorLy8gU2VlIHRoZSBjb2RlIGZvciBF
eGl0VmFsdWUgZm9yIGRldGFpbHMuICdvJyBpcyBhbiBhcmd1bWVudCwgYW5kIGFyZ3VtZW50cyBh
cmUgYWx3YXlzCisvLyAiZmx1c2hlZCIgLSBpZiB5b3UgbmV2ZXIgYXNzaWduIHRoZW0gdGhlbiB0
aGVpciB2YWx1ZXMgYXJlIHN0aWxsIGluIHRoZSBhcmd1bWVudAorLy8gc3RhY2sgc2xvdHMsIGFu
ZCBpZiB5b3UgZG8gYXNzaWduIHRoZW0gdGhlbiB3ZSBlYWdlcmx5IHN0b3JlIHRoZW0gaW50byB0
aG9zZSBzbG90cy4KKy8vICdjJyBpcyBkZWFkIGluIGJ5dGVjb2RlLCBhbmQgdGhlIERGRyBrbm93
cyB0aGlzOyB3ZSBzdGF0aWNhbGx5IHRlbGwgdGhlIGV4aXQgdGh1bmsKKy8vIHRoYXQgaXQncyBk
ZWFkIGFuZCBkb24ndCBoYXZlIHRvIHBhc3MgYW55dGhpbmcuIFRoZSBleGl0IHRodW5rIHdpbGwg
ImluaXRpYWxpemUiIGl0cworLy8gdmFsdWUgdG8gVW5kZWZpbmVkLgorLy8KKy8vIFRoaXMgYXBw
cm9hY2ggdG8gT1NSIGV4aXQgaGFzIGEgbnVtYmVyIG9mIHZpcnR1ZXM6CisvLworLy8gLSBJdCBp
cyBhbiBlbnRpcmVseSB1bnN1cnByaXNpbmcgcmVwcmVzZW50YXRpb24gZm9yIGEgY29tcGlsZXIg
dGhhdCBhbHJlYWR5IGdyb2tzCisvLyAgIENGRy1saWtlIElScyBmb3IgQy1saWtlIGxhbmd1YWdl
cy4gQWxsIGV4aXN0aW5nIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMganVzdAorLy8gICB3
b3JrLgorLy8KKy8vIC0gSXQgbGVuZHMgaXRzZWxmIG5hdHVyYWxseSB0byBtb2Rlcm4gYXBwcm9h
Y2hlcyB0byBjb2RlIG1vdGlvbi4gRm9yIGV4YW1wbGUsIHlvdQorLy8gICBjb3VsZCBzaW5rIG9w
ZXJhdGlvbnMgZnJvbSBhYm92ZSB0aGUgZXhpdCB0byBiZWxvdyBpdCwgaWYgeW91IGp1c3QgZHVw
bGljYXRlIHRoZQorLy8gICBvcGVyYXRpb24gaW50byB0aGUgT1NSIGV4aXQgYmxvY2suIFRoaXMg
aXMgYm90aCBsZWdhbCBhbmQgZGVzaXJhYmxlLiBJdCB3b3JrcworLy8gICBiZWNhdXNlIHRoZSBi
YWNrZW5kIHNlZXMgdGhlIE9TUiBleGl0IGJsb2NrIGFzIGJlaW5nIG5vIGRpZmZlcmVudCB0aGFu
IGFueSBvdGhlciwKKy8vICAgYW5kIExMVk0gYWxyZWFkeSBzdXBwb3J0cyBzaW5raW5nIGlmIGl0
IHNlZXMgdGhhdCBhIHZhbHVlIGlzIG9ubHkgcGFydGlhbGx5IHVzZWQuCisvLyAgIEhlbmNlIHRo
ZXJlIGV4aXN0cyBhIHZhbHVlIHRoYXQgZG9taW5hdGVzIHRoZSBleGl0IGJ1dCBpcyBvbmx5IHVz
ZWQgYnkgdGhlIGV4aXQKKy8vICAgdGh1bmsgYW5kIG5vdCBieSB0aGUgY29udGludWF0aW9uLCBz
aW5raW5nIG91Z2h0IHRvIGtpY2sgaW4gZm9yIHRoYXQgdmFsdWUuCisvLyAgIEhvaXN0aW5nIG9w
ZXJhdGlvbnMgZnJvbSBiZWxvdyBpdCB0byBhYm92ZSBpdCBpcyBhbHNvIHBvc3NpYmxlLCBmb3Ig
c2ltaWxhcgorLy8gICByZWFzb25zLgorLy8KKy8vIC0gVGhlIG5vLXJldHVybiB0YWlsLWNhbGwg
dG8gdGhlIE9TUiBleGl0IHRodW5rIGNhbiBiZSBzdWJqZWN0ZWQgdG8gc3BlY2lhbGl6ZWQKKy8v
ICAgY29kZS1zaXplIHJlZHVjdGlvbiBvcHRpbWl6YXRpb25zLCB0aG91Z2ggdGhpcyBpcyBvcHRp
b25hbC4gRm9yIGV4YW1wbGUsIGluc3RlYWQKKy8vICAgb2YgYWN0dWFsbHkgZW1pdHRpbmcgYSBj
YWxsIGFsb25nIHdpdGggYWxsIHRoYXQgZ29lcyB3aXRoIGl0IChsaWtlIHBsYWNpbmcgdGhlCisv
LyAgIGFyZ3VtZW50cyBpbnRvIGFyZ3VtZW50IHBvc2l0aW9uKSwgdGhlIGJhY2tlbmQgY291bGQg
Y2hvb3NlIHRvIHNpbXBseSBpbmZvcm0gdXMKKy8vICAgd2hlcmUgaXQgaGFkIHBsYWNlZCB0aGUg
YXJndW1lbnRzIGFuZCBleHBlY3QgdGhlIGNhbGxlZSAoaS5lLiB0aGUgZXhpdCB0aHVuaykgdG8K
Ky8vICAgZmlndXJlIGl0IG91dCBmcm9tIHRoZXJlLiBJdCBjb3VsZCBhbHNvIHRlbGwgdXMgd2hh
dCB3ZSBuZWVkIHRvIGRvIHRvIHBvcCBzdGFjaywKKy8vICAgYWx0aG91Z2ggYWdhaW4sIGl0IGRv
ZXNuJ3QgaGF2ZSB0bzsgaXQgY291bGQganVzdCBlbWl0IHRoYXQgY29kZSBub3JtYWxseS4gVGhv
dWdoCisvLyAgIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQsIHdlIGNvdWxkOyB0aGUgb25seSB0
aGluZyB0aGF0IHdvdWxkIGNoYW5nZSBvbiBvdXIgZW5kCisvLyAgIGlzIHRoYXQgd2UnZCBuZWVk
IGZlZWRiYWNrIGZyb20gdGhlIGJhY2tlbmQgYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBhcmd1
bWVudHMKKy8vICAgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRoaW5ncyB0aGF0IG5lZWQgdG8g
YmUgZG9uZSB0byBwb3Agc3RhY2suIFRoaXMgd291bGQKKy8vICAgaW52b2x2ZSBzd2l0Y2hpbmcg
dGhlIG1fdmFsdWVzIGFycmF5IHRvIHVzZSBzb21ldGhpbmcgbW9yZSBha2luIHRvIFZhbHVlUmVj
b3ZlcnkKKy8vICAgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgRXhpdFZhbHVlLCBhbGJlaXQgcG9z
c2libHkgd2l0aCBzb21lIGhhY2tzIHRvIGJldHRlcgorLy8gICB1bmRlcnN0YW5kIHRoZSBraW5k
cyBvZiBwbGFjZXMgd2hlcmUgdGhlIExMVk0gYmFja2VuZCB3b3VsZCBwdXQgdmFsdWVzLgorLy8K
Ky8vIC0gSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gYWxsb3cgdGhlIGJhY2tlbmQgdG8gZG8gaXRz
IG93biBleGl0IGhvaXN0aW5nLCBieSB1c2luZworLy8gICBpbnRyaW5zaWNzIChvciBtZXRhLWRh
dGEsIG9yIHNvbWV0aGluZykgdG8gaW5mb3JtIHRoZSBiYWNrZW5kIHRoYXQgaXQncyBzYWZlIHRv
CisvLyAgIG1ha2UgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBtb3JlIHRydXRo
eS4KKy8vCisvLyAtIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgd2F0Y2hwb2ludHMg
KHNlZSB3ZWJraXQub3JnL2IvMTEzNjQ3KSBieSBtYWtpbmcKKy8vICAgdGhlIHByZWRpY2F0ZSBw
YXNzZWQgdG8gJ2V4aXRJZigpJyBiZSBhbiBpbnRyaW5zaWMgdGhhdCB0aGUgYmFja2VuZCBrbm93
cyB0byBiZQorLy8gICB0cnVlIGF0IGNvbXBpbGUtdGltZS4gVGhlIGJhY2tlbmQgY291bGQgdGhl
biB0dXJuIHRoZSBjb25kaXRpb25hbCBicmFuY2ggaW50byBhCisvLyAgIHJlcGxhY2VhYmxlIGp1
bXAsIG11Y2ggbGlrZSB0aGUgREZHIGRvZXMuCisKK3N0cnVjdCBPU1JFeGl0IDogcHVibGljIE9T
UkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCwgVmFsdWVGb3JtYXQg
cHJvZmlsZVZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAorICAgICAg
ICBDb2RlT3JpZ2luLCBpbnQgbGFzdFNldE9wZXJhbmQsIHVuc2lnbmVkIG51bWJlck9mQXJndW1l
bnRzLAorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgCisgICAgTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQg
dG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCisgICAg
Ly8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5k
IHdlJ2xsIGhhdmUgYQorICAgIC8vIG1ldGhvZCBvZiBnZXR0aW5nIGEgdmFsdWUgcHJvZmlsZS4g
Tm90ZSB0aGF0IGFsbCBvZiB0aGUgRXhpdEFyZ3VtZW50J3MKKyAgICAvLyBhcmUgYWxyZWFkeSBh
d2FyZSBvZiB0aGlzIHBvc3NpYmxlIG9mZi1ieS1vbmUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8K
KyAgICAvLyBjb3JyZWN0IHRoZW0uCisgICAgVmFsdWVGb3JtYXQgbV9wcm9maWxlVmFsdWVGb3Jt
YXQ7CisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3ZhbHVlUHJvZmlsZTsKKyAg
ICAKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICAKKyAgICAvLyBPZmZzZXQgd2l0
aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQuCisgICAgdW5zaWdu
ZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIAorICAgIGludCBtX2xhc3RTZXRPcGVyYW5k
OworICAgIAorICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgCisgICAgQ29k
ZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJs
b2NrKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQoCisgICAgICAgIERG
Rzo6QmFzaWNCbG9jayosIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRl
eCwKKyAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUmLCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1
bWVudHMpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NSRXhpdENv
bXBpbGF0aW9uSW5mb19oCisjZGVmaW5lIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBPU1JFeGl0Q29tcGlsYXRp
b25JbmZvIHsKKyAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKKyAgICAgICAgOiBtX3RodW5r
QWRkcmVzcygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVs
IG1fdGh1bmtMYWJlbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3RodW5r
SnVtcDsKKyAgICBMVmFsdWUgbV90aHVua0FkZHJlc3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9T
UkV4aXRDb21waWxhdGlvbkluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmgJKHJldmlzaW9uIDE0NzYwOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxOSArMTM1LDIwIEBAIHB1YmxpYzoK
ICAgICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1
aWxkWkV4dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBpbnRDYXN0KExW
YWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRDYXN0KG1fYnVpbGRlciwg
dmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gaW50Q2FzdCh2YWx1ZSwgaW50MzIpOyB9CisgICAgTFZhbHVlIGludFRvUHRyKExWYWx1
ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHZh
bHVlLCB0eXBlKTsgfQogICAgIAogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyBy
ZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQo
TFZhbHVlIHZhbHVlLCBMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVp
bGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7IH0KICAgICAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBv
aW50ZXIgcG9pbnRlciwgTFR5cGUgcmVmVHlwZSkKICAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1
bHQgPSBnZXQoYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHBvaW50ZXIudmFsdWUoKSwgcmVmVHlw
ZSkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gZ2V0KGludFRvUHRyKHBvaW50ZXIudmFsdWUo
KSwgcmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9u
KHJlc3VsdCwgKm1faGVhcHMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICB2
b2lkIHN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5
cGUpCiAgICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gc2V0KHZhbHVlLCBidWlsZEludFRv
UHRyKG1fYnVpbGRlciwgcG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7CisgICAgICAgIExWYWx1
ZSByZXN1bHQgPSBzZXQodmFsdWUsIGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkp
OwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1f
aGVhcHMpOwogICAgIH0KICAgICAKQEAgLTI0NCwxMCArMjQ1LDE4IEBAIHB1YmxpYzoKICAgICBM
VmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4p
IHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7
IH0KICAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4
KSB7IHJldHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9
CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBMVmFsdWUgY2Fs
bChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gYnVp
bGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvcik7IH0KICAgICBMVmFsdWUgY2FsbChM
VmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uKTsg
fQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJu
IGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQogICAgIExWYWx1ZSBjYWxs
KExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJldHVybiBidWls
ZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMik7IH0KICAgICAKKyAgICBMVmFs
dWUgY29udmVydFRvVGFpbENhbGwoTFZhbHVlIGNhbGwpCisgICAgeworICAgICAgICBzZXRUYWls
Q2FsbChjYWxsLCBJc1RhaWxDYWxsKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAogICAgIHZvaWQganVtcChMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyBidWlsZEJyKG1fYnVp
bGRlciwgZGVzdGluYXRpb24pOyB9CiAgICAgdm9pZCBicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwg
TEJhc2ljQmxvY2sgdGFrZW4sIExCYXNpY0Jsb2NrIG5vdFRha2VuKSB7IGJ1aWxkQ29uZEJyKG1f
YnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgdm9pZCByZXQoTFZh
bHVlIHZhbHVlKSB7IGJ1aWxkUmV0KG1fYnVpbGRlciwgdmFsdWUpOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNDc2MDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIK
ICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9u
SW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICBMTW9kdWxlIG1v
ZHVsZTsKICAgICBMVmFsdWUgZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7
CisgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CiAgICAgCiAgICAg
dm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMVGh1
bmtzX2gKKyNkZWZpbmUgRlRMVGh1bmtzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKKworbmFtZXNwYWNl
IEZUTCB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFRIdW5rc19oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFZhbHVl
Rm9ybWF0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M6OkZUTDsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFZhbHVlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgSW52YWxpZFZhbHVlRm9ybWF0OgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgb3V0
LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdFVJ
bnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJVSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVmFsdWVGb3JtYXRCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRKU1ZhbHVlOgorICAgICAgICBv
dXQucHJpbnQoIkpTVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3Jt
YXREb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgRlRMVmFsdWVGb3JtYXRfaAorI2RlZmluZSBGVExWYWx1ZUZvcm1h
dF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWlsYXIgdG8gRGF0
YUZvcm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0CisvLyB1bmxpa2UgRGF0
YUZvcm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4g
VUludDMyIGFuZCBJbnQzMi4KKworZW51bSBWYWx1ZUZvcm1hdCB7CisgICAgSW52YWxpZFZhbHVl
Rm9ybWF0LAorICAgIFZhbHVlRm9ybWF0SW50MzIsCisgICAgVmFsdWVGb3JtYXRVSW50MzIsCisg
ICAgVmFsdWVGb3JtYXRCb29sZWFuLAorICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwKKyAgICBWYWx1
ZUZvcm1hdERvdWJsZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCituYW1lc3Bh
Y2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpGVEw6OlZh
bHVlRm9ybWF0KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKworI2VuZGlmIC8vIEZUTFZhbHVlRm9ybWF0X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
Kwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAgICAgIG91dC5w
cmludCgiU291cmNlTm90U2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5K
U1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5KU1N0YWNrIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEludDMySW5KU1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIkludDMy
SW5KU1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUluSlNTdGFjazoK
KyAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWxz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMySW5Mb2NhbHM6CisgICAgICAgIG91
dC5wcmludCgiSW50MzJJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29s
ZWFuSW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbkluTG9jYWxzIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQo
IkRvdWJsZUluTG9jYWxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50c1Nv
dXJjZToKKyAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudHNTb3VyY2UiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU291cmNlSXNEZWFkOgorICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlz
RGVhZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgb3V0
LnByaW50KCJOb2RlKCIsIG5vZGUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMVmFsdWVTb3VyY2VfaAorI2RlZmluZSBGVExWYWx1ZVNvdXJjZV9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2VudW0gVmFsdWVTb3VyY2VLaW5kIHsK
KyAgICBTb3VyY2VOb3RTZXQsCisgICAgVmFsdWVJbkpTU3RhY2ssCisgICAgSW50MzJJbkpTU3Rh
Y2ssCisgICAgRG91YmxlSW5KU1N0YWNrLAorICAgIFZhbHVlSW5Mb2NhbHMsCisgICAgSW50MzJJ
bkxvY2FscywKKyAgICBCb29sZWFuSW5Mb2NhbHMsCisgICAgRG91YmxlSW5Mb2NhbHMsCisgICAg
QXJndW1lbnRzU291cmNlLAorICAgIFNvdXJjZUlzRGVhZCwKKyAgICBIYXZlTm9kZQorfTsKKwor
Y2xhc3MgVmFsdWVTb3VyY2UgeworcHVibGljOgorICAgIFZhbHVlU291cmNlKCkKKyAgICAgICAg
OiBtX3ZhbHVlKFNvdXJjZU5vdFNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgICAgICA6IG1fdmFsdWUoa2lu
ZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKERGRzo6Tm9k
ZSogbm9kZSkKKyAgICAgICAgOiBtX3ZhbHVlKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUp
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFsdWVTb3VyY2VLaW5kKCkga2luZCgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSA8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oSGF2
ZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4o
bV92YWx1ZSk7CisgICAgICAgIHJldHVybiBIYXZlTm9kZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gU291cmNlTm90U2V0OyB9Cisg
ICAgCisgICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSGF2ZU5vZGUpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PERGRzo6Tm9k
ZSo+KG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYg
Ly8gRlRMVmFsdWVTb3VyY2VfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>196704</attachid>
            <date>2013-04-05 17:11:32 -0700</date>
            <delta_ts>2013-04-09 13:48:53 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>116368</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3ODIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OCBA
QAorMjAxMy0wNC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6b2Zmc2V0
T2YpOgorICAgICAgICAoTGlua0J1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgor
ICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpiZWxv
bmdzSW5NaW5pZmllZEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkZvcndhcmRSZXdpcmluZyk6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAoT1NSRXhpdCk6
CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpkb1NlYXJj
aEZvckZvcndhcmRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpP
U1JFeGl0QmFzZSk6CisgICAgICAgIChPU1JFeGl0QmFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVNvdXJj
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBmdGwvRlRM
QWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpmdW5j
dGlvblR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OnR5cGVPZik6CisgICAgICAgIChKU0M6OkZU
TDo6YnVpbGRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpzZXRUYWlsQ2FsbCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OndpdGhGb3JtYXQpOgorICAgICAgICAoSlND
OjpGVEw6OkV4aXRBcmd1bWVudDo6cmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExF
eGl0QXJndW1lbnRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwv
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6RXhpdFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAg
ICAgICAgKiBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTEV4aXRW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChGVEwpOgorICAgICAgICAoRXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OkV4aXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZGVhZCk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjppbkpTU3RhY2spOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppbkpT
U3RhY2tBc0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aW5KU1N0YWNr
QXNEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6Y29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0VmFsdWU6OmtpbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNE
ZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzSW5KU1N0YWNrU29tZWhvdyk6
CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0
ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpub1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6RlRMOjppbnQzMlZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjp1SW50
MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6Ym9vbGVhblZhbHVlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpqc1ZhbHVlVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OmRvdWJsZVZhbHVlKToK
KyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3MpOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpleGl0VGh1bmtzKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgor
ICAgICAgICAoSklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2Vy
REZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cmFuc2ZlckFuZENoZWNrQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoTG93
ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TW92SGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVab21i
aWVIaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhp
bnRBbmRDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVB
ZGQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVUludDMyVG9OdW1iZXIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUZvcndhcmQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpiYWNrd2FyZFR5cGVDaGVjayk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmZvcndhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjphcHBlbmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpsb3dJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dXNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjp0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFs
aXphdGlvbkJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6b2JzZXJ2
ZU1vdkhpbnQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAo
SlNDOjpGVEw6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2gpOgorICAgICAgICAoSlND
OjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKE9TUkV4aXQpOgorICAgICAg
ICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Q29tcGlsYXRpb25JbmZvOjpPU1JFeGl0Q29t
cGlsYXRpb25JbmZvKToKKyAgICAgICAgKE9TUkV4aXRDb21waWxhdGlvbkluZm8pOgorICAgICAg
ICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvUHRy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6c3RvcmUpOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y29udmVydFRvVGFpbENh
bGwpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAoU3RhdGUpOgorICAgICAg
ICAqIGZ0bC9GVExUaHVua3MuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExWYWx1
ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorICAgICAg
ICAqIGZ0bC9GVExWYWx1ZVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTFZhbHVl
U291cmNlLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKFZhbHVlU291cmNlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlZhbHVlU291cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNv
dXJjZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6bm9kZSk6
CisKIDIwMTMtMDQtMDUgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIGJldHRlciBhYnN0cmFjdCBhcmd1bWVudHMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lv
biAxNDc4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKS5tX29mZnNldDsKICAgICB9CiAKKyAgICB1
bnNpZ25lZCBvZmZzZXRPZihQYXRjaGFibGVKdW1wIGp1bXApCisgICAgeworICAgICAgICByZXR1
cm4gYXBwbHlPZmZzZXQoanVtcC5tX2p1bXAubV9sYWJlbCkubV9vZmZzZXQ7CisgICAgfQorCiAg
ICAgLy8gVXBvbiBjb21wbGV0aW9uIG9mIGFsbCBwYXRjaGluZyAnRklOQUxJWkVfQ09ERSgpJyBz
aG91bGQgYmUgY2FsbGVkIG9uY2UgdG8KICAgICAvLyBjb21wbGV0ZSBnZW5lcmF0aW9uIG9mIHRo
ZSBjb2RlLiBBbHRlcm5hdGl2ZWx5LCBjYWxsCiAgICAgLy8gZmluYWxpemVDb2RlV2l0aG91dERp
c2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYgeW91IGhhdmUgeW91ciBvd24gd2F5IG9mCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDE0NzgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDggQEAgdm9pZCBBYnN0cmFjdFN0YXRl
Ojppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0K
ICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT52YXJp
YWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0KKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5hcmd1
bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRIZWFkLmFyZ3VtZW50KGkpLnNl
dChTcGVjSW50MzIpOwogICAgICAgICBlbHNlIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTWluaWZpZWROb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5v
ZGUuaAkocmV2aXNpb24gMTQ3ODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdN
aW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsNyBAQCBpbmxpbmUgYm9v
bCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRz
OgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQoIW5l
ZWRzT1NSQmFja3dhcmRSZXdpcmluZyh0eXBlKSAmJiAhbmVlZHNPU1JGb3J3YXJkUmV3aXJpbmco
dHlwZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQ3ODIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODcs
NiArMjg3LDI1IEBAIGlubGluZSBOb2RlRmxhZ3MgZGVmYXVsdEZsYWdzKE5vZGVUeXBlIG8KICAg
ICB9CiB9CiAKK2lubGluZSBib29sIG5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyhOb2RlVHlwZSBv
cCkKK3sKKyAgICByZXR1cm4gb3AgPT0gVUludDMyVG9OdW1iZXI7Cit9CisKK2lubGluZSBib29s
IG5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9wKQoreworICAgIHN3aXRjaCAob3Ap
IHsKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJs
ZToKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAg
IGNhc2UgRG91YmxlQXNJbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE0NzgyMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDE1ICsz
NiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCiBPU1JFeGl0OjpPU1JF
eGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiBqaXQsIHVu
c2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4KQotICAgIDogbV9qc1Zh
bHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCisgICAgOiBPU1JFeGl0QmFzZShraW5kLCBqaXQtPm1f
Y29kZU9yaWdpbkZvck9TUikKKyAgICAsIG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQog
ICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwgbV9wYXRjaGFibGVDb2Rl
T2Zmc2V0KDApCiAgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCi0g
ICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShtX2NvZGVPcmlnaW4pCiAgICAgLCBtX3Jl
Y292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fd2F0Y2hwb2ludEluZGV4KHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAsIG1fa2luZChraW5kKQotICAg
ICwgbV9jb3VudCgwKQogICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1JbmRleCkKICAgICAsIG1f
bGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewpAQCAtNzMsNTcgKzcxLDE0
IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYgbGkKICAgICBtX3BhdGNo
YWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGxhYmVsKTsKIH0KIAotYm9vbCBP
U1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBk
ZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCi17Ci0gICAgaWYgKHN0
YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVy
KCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRl
OwotICAgIAotICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgewotICAgICAgICAv
LyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhl
IGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOwotICAgICAgICAvLyB0aGUgZmFjdCB0
aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOwotICAg
IH0gZWxzZQotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2lu
Rm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKLSAgICAKLSAgICByZXR1cm4g
YmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmln
aW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRl
KGV4aXRTaXRlKTsKLX0KLQogdm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxv
Y2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBjb25zdCBW
YWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewotICAgIC8vIENoZWNrIHRoYXQgZWl0aGVy
IHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdh
cyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3
ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3ZlcnkuCi0gICAgaWYgKCFBU1NFUlRfRElTQUJMRUQK
LSAgICAgICAgJiYgIXZhbHVlUmVjb3ZlcnkKLSAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5jb250
YWluc01vdkhpbnQoKSkgewotICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChub2Rl
SW5kZXggLSAxKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNv
bnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9j
YWwtPmNvZGVPcmlnaW4gPT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOwotICAgIH0KLSAgICAK
LSAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVj
dGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAotICAgIC8vIG9uIHRoaXMgbm9kZS4K
LSAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAxOwotICAgIE5vZGUqIG5v
ZGUgPSAwOwotICAgIE5vZGUqIGxhc3RNb3ZIaW50ID0gMDsKLSAgICBmb3IgKDs7KSB7Ci0gICAg
ICAgIGlmIChpbmRleEluQmxvY2sgPT0gYmxvY2stPnNpemUoKSkgewotICAgICAgICAgICAgLy8g
VGhpcyBpcyBhbiBpbmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVj
dWxhdGlvbi4gVGhpcyBpcyBzYWZlCi0gICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSBy
ZXR1cm4gaGFzIGl0cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8K
LSAgICAgICAgICAgIC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVjb2RlLgotICAgICAgICAgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0K
LSAgICAgICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwotICAgICAgICBpZiAobm9k
ZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCi0g
ICAgICAgICAgICBsYXN0TW92SGludCA9IG5vZGU7Ci0gICAgICAgIGlmIChub2RlLT5jb2RlT3Jp
Z2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGluZGV4SW5CbG9jaysrOwotICAgIH0KLSAgICAKKyAgICBOb2RlKiBub2RlOworICAgIE5v
ZGUqIGxhc3RNb3ZIaW50OworICAgIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oYmxvY2ss
IGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSk7CisKICAgICBBU1NFUlQo
bm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCiAgICAg
bV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAKICAgICBpZiAoIXZhbHVlUmVj
b3ZlcnkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNp
b24gMTQ3ODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNs
dWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRl
ICJERkdPU1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5o
IgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5n
QVZhbHVlUHJvZmlsZS5oIgpAQCAtODQsNyArODUsNyBAQCBwcml2YXRlOgogLy8KIC8vIFRoaXMg
c3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQog
Ly8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9TUkV4aXQgeworc3RydWN0IE9T
UkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFs
dWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwg
dW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7
CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKQEAgLTk0LDIxICs5NSwx
MCBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAKICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNvZGVPZmZz
ZXQ7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVP
cmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5SW5kZXg7
CiAgICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXg7CiAgICAgCi0gICAgRXhpdEtpbmQgbV9r
aW5kOwotICAgIHVpbnQzMl90IG1fY291bnQ7Ci0gICAgCi0gICAgYm9vbCBjb25zaWRlckFkZGlu
Z0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBw
cm9maWxlZENvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtp
bmRJc0NvdW50YWJsZShtX2tpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9j
aywgcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIH0KLQogICAgIHZvaWQgc2V0UGF0Y2hhYmxlQ29k
ZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCk7CiAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNvbnN0OwogICAgIENvZGVM
b2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqKSBjb25zdDsKQEAg
LTEyMCw5ICsxMTAsNiBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgaW50IG1fbGFzdFNldE9wZXJh
bmQ7CiAgICAgCiAgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1ZVJlY292
ZXJ5T3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmls
ZWRDb2RlQmxvY2spOwogfTsKIAogc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVnSW5mbyB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkRGR09TUkV4aXRCYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3Vu
dCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFBy
b21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAKKyAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOworICAgIAorICAgIGlmIChtX2tpbmQg
PT0gQXJndW1lbnRzRXNjYXBlZCkgeworICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxs
eS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50
cyBleGNhcGVkOworICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3Nv
Y2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCisgICAgICAgIGV4aXRTaXRl
ID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOworICAgIH0gZWxzZQorICAgICAgICBleGl0U2l0
ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJ
bmRleCwgbV9raW5kKTsKKyAgICAKKyAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmln
aW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmls
ZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKK30KKworYm9vbCBP
U1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKKyAgICBCYXNpY0Jsb2Nr
KiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNW
YWx1ZVJlY292ZXJ5LAorICAgIE5vZGUqJiBub2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpCit7Cisg
ICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFNldExvY2FsLCBv
ciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKKyAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1l
IGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFsdWVSZWNvdmVyeS4KKyAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAmJiAhaGFzVmFsdWVSZWNvdmVyeQorICAg
ICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7CisgICAgICAgIE5vZGUq
IHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAgICAgICBBU1NFUlRfVU5V
U0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBjdXJyZW50Tm9kZS0+
Y29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9y
IHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBo
aW50CisgICAgLy8gb24gdGhpcyBub2RlLgorICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IG5v
ZGVJbmRleCArIDE7CisgICAgbm9kZSA9IDA7CisgICAgbGFzdE1vdkhpbnQgPSAwOworICAgIGZv
ciAoOzspIHsKKyAgICAgICAgaWYgKGluZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7Cisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEg
YmFja3dhcmRzIHNwZWN1bGF0aW9uLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgICAgIC8vIGJlY2F1
c2UgYW4gaW5saW5lIHJldHVybiBoYXMgaXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBh
bHdheXMgc2FmZSB0bworICAgICAgICAgICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCisg
ICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9j
ayk7CisgICAgICAgIGlmIChub2RlLT5jb250YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEo
KSA9PSBjdXJyZW50Tm9kZSkKKyAgICAgICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKKyAgICAg
ICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgaW5kZXhJbkJsb2NrKys7CisgICAgfQorICAgIAorICAg
IEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkV4
aXRCYXNlX2gKKyNkZWZpbmUgREZHT1NSRXhpdEJhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
KyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKy8vIFByb3ZpZGVzIGZvciB0aGUgT1NSIGV4aXQgcHJvZmlsaW5nIGZ1bmN0aW9u
YWxpdHkgdGhhdCBpcyBjb21tb24gYmV0d2VlbiB0aGUgREZHCisvLyBhbmQgdGhlIEZUTC4KKwor
c3RydWN0IE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0QmFzZShFeGl0S2luZCBraW5kLCBDb2Rl
T3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2NvdW50
KDApCisgICAgICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUob3JpZ2luKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVpbnQzMl90IG1fY291bnQ7
CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKworICAg
IGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBkZmdDb2Rl
QmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAo
IW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3VudGFibGUobV9raW5kKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRT
aXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2ZpbGVkQ29kZUJsb2NrKTsKKyAgICB9CisgICAgCisg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZlcnNpb24gaXMgcmVhbGx5IG5l
ZWRlZC4KKyAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oCisgICAgICAgIEJh
c2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LCBib29sIGhh
c1ZhbHVlUmVjb3ZlcnksCisgICAgICAgIE5vZGUqJiBuZXh0QkNOb2RlLCBOb2RlKiYgbGFzdE1v
dkhpbnQpOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhp
dFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVO
QUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdEJhc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNp
b24gMTQ3ODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NzcsNyArMTc3Nyw3IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9
IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5hcmd1bWVudEF3YXJlUHJlZGlj
dGlvbigpOwogCiAgICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291
cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlz
aW9uIDE0NzgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1
cm4gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAgICAgICBpZiAoaXNBcnJheVNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAg
ICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1
cm4gVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjayk7CiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29s
ZWFuSW5KU1N0YWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTQ3ODIxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25z
dHJ1Y3QoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAg
ICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+b3AoKSA9PSBVSW50MzJU
b051bWJlcikgeworICAgICAgICAgICAgaWYgKG5vZGUgJiYgbmVlZHNPU1JCYWNrd2FyZFJld2ly
aW5nKG5vZGUtPm9wKCkpKSB7CiAgICAgICAgICAgICAgICAgTWluaWZpZWRJRCBpZCA9IG5vZGUt
PmNoaWxkMSgpOwogICAgICAgICAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3Zlcnko
dmFsdWVSZWNvdmVyaWVzW2ldLCBjb2RlQmxvY2ssIGdyYXBoLmF0KGlkKSkpCiAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU3LDYgKzI1Nyw3IEBAIHZvaWQgVmFyaWFibGVFdmVu
dFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGVBc0lu
dDMySUQgPSBpZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFuZWVkc09T
UkZvcndhcmRSZXdpcmluZyhub2RlLT5vcCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAx
NDc4MjEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAko
d29ya2luZyBjb3B5KQpAQCAtODQsNiArODQsMTEgQEAgc3RhdGljIGlubGluZSBMVHlwZSBmdW5j
dGlvblR5cGUoTFR5cGUgcgogewogICAgIHJldHVybiBMTFZNRnVuY3Rpb25UeXBlKHJldHVyblR5
cGUsIHBhcmFtVHlwZXMsIHBhcmFtQ291bnQsIHZhcmlhZGljaXR5ID09IFZhcmlhZGljKTsKIH0K
K3RlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CitpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBl
KExUeXBlIHJldHVyblR5cGUsIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvciwgVmFyaWFkaWNpdHkg
dmFyaWFkaWNpdHkpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCB2ZWN0
b3IuYmVnaW4oKSwgdmVjdG9yLnNpemUoKSwgdmFyaWFkaWNpdHkpOworfQogc3RhdGljIGlubGlu
ZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgVmFyaWFkaWNpdHkgdmFyaWFk
aWNpdHkgPSBOb3RWYXJpYWRpYykKIHsKICAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5
cGUsIDAsIDAsIHZhcmlhZGljaXR5KTsKQEAgLTk4LDYgKzEwMyw4IEBAIHN0YXRpYyBpbmxpbmUg
TFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHIKICAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVy
blR5cGUsIHBhcmFtVHlwZXMsIDIsIHZhcmlhZGljaXR5KTsKIH0KIAorc3RhdGljIGlubGluZSBM
VHlwZSB0eXBlT2YoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBMTFZNVHlwZU9mKHZhbHVlKTsgfQor
CiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIG1kS2luZElEKGNvbnN0IGNoYXIqIHN0cmluZykgeyBy
ZXR1cm4gTExWTUdldE1ES2luZElEKHN0cmluZywgc3RybGVuKHN0cmluZykpOyB9CiBzdGF0aWMg
aW5saW5lIExWYWx1ZSBtZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcsIHVuc2lnbmVkIGxlbmd0
aCkgeyByZXR1cm4gTExWTU1EU3RyaW5nKHN0cmluZywgbGVuZ3RoKTsgfQogc3RhdGljIGlubGlu
ZSBMVmFsdWUgbWRTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nKSB7IHJldHVybiBtZFN0cmluZyhz
dHJpbmcsIHN0cmxlbihzdHJpbmcpKTsgfQpAQCAtMTU1LDYgKzE2MiwxMSBAQCBzdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiB7CiAgICAgcmV0dXJuIExMVk1CdWlsZENh
bGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIG51bUFyZ3MsICIiKTsKIH0KK3RlbXBsYXRlPHR5
cGVuYW1lIFZlY3RvclR5cGU+CitpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikKK3sKKyAgICBy
ZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCB2ZWN0b3IuYmVnaW4oKSwgdmVjdG9y
LnNpemUoKSk7Cit9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGZ1bmN0aW9uKQogewogICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwg
ZnVuY3Rpb24sIDAsIDApOwpAQCAtMTY4LDYgKzE4MCw4IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciAKICAgICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyIH07
CiAgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMik7CiB9Citl
bnVtIFRhaWxDYWxsTW9kZSB7IElzTm90VGFpbENhbGwsIElzVGFpbENhbGwgfTsKK3N0YXRpYyBp
bmxpbmUgdm9pZCBzZXRUYWlsQ2FsbChMVmFsdWUgY2FsbCwgVGFpbENhbGxNb2RlIG1vZGUpIHsg
TExWTVNldFRhaWxDYWxsKGNhbGwsIG1vZGUgPT0gSXNUYWlsQ2FsbCk7IH0KIHN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkRXh0cmFjdFZhbHVlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBhZ2dW
YWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBMTFZNQnVpbGRFeHRyYWN0VmFsdWUoYnVpbGRl
ciwgYWdnVmFsLCBpbmRleCwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFNlbGVj
dChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgY29uZGl0aW9uLCBMVmFsdWUgdGFrZW4sIExWYWx1
ZSBub3RUYWtlbikgeyByZXR1cm4gTExWTUJ1aWxkU2VsZWN0KGJ1aWxkZXIsIGNvbmRpdGlvbiwg
dGFrZW4sIG5vdFRha2VuLCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQnIoTEJ1
aWxkZXIgYnVpbGRlciwgTEJhc2ljQmxvY2sgZGVzdGluYXRpb24pIHsgcmV0dXJuIExMVk1CdWls
ZEJyKGJ1aWxkZXIsIGRlc3RpbmF0aW9uKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0QXJndW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnQuaCIKKworI2lm
IEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3Zv
aWQgRXhpdEFyZ3VtZW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJhcmciLCBhcmd1bWVudCgpLCAiIGFzICIsIGZvcm1hdCgpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRBcmd1bWVudF9oCisjZGVmaW5lIEZUTEV4
aXRBcmd1bWVudF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3Qg
RXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24geworICAgIFZhbHVlRm9ybWF0IGZvcm1hdDsKKyAg
ICB1bnNpZ25lZCBhcmd1bWVudDsKK307CisKK2NsYXNzIEV4aXRBcmd1bWVudCB7CitwdWJsaWM6
CisgICAgRXhpdEFyZ3VtZW50KCkKKyAgICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24uZm9y
bWF0ID0gSW52YWxpZFZhbHVlRm9ybWF0OworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQo
VmFsdWVGb3JtYXQgZm9ybWF0LCB1bnNpZ25lZCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIG1f
cmVwcmVzZW50YXRpb24uZm9ybWF0ID0gZm9ybWF0OworICAgICAgICBtX3JlcHJlc2VudGF0aW9u
LmFyZ3VtZW50ID0gYXJndW1lbnQ7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IEV4aXRBcmd1
bWVudChFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbikKKyAgICB7Cisg
ICAgICAgIG1fcmVwcmVzZW50YXRpb24gPSByZXByZXNlbnRhdGlvbjsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1h
dCA9PSBJbnZhbGlkVmFsdWVGb3JtYXQ7IH0KKyAgICAKKyAgICBWYWx1ZUZvcm1hdCBmb3JtYXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1f
cmVwcmVzZW50YXRpb24uZm9ybWF0OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVu
dCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMpOworICAgICAgICByZXR1cm4g
bV9yZXByZXNlbnRhdGlvbi5hcmd1bWVudDsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50
IHdpdGhGb3JtYXQoVmFsdWVGb3JtYXQgZm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEV4
aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50KCkpOworICAgIH0KKyAgICAKKyAgICBFeGl0QXJn
dW1lbnRSZXByZXNlbnRhdGlvbiByZXByZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVw
cmVzZW50YXRpb247IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gbV9yZXByZXNl
bnRhdGlvbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRMaXN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRMaXN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudExpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdEFyZ3VtZW50TGlzdF9oCisj
ZGVmaW5lIEZUTEV4aXRBcmd1bWVudExpc3RfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIK
KyNpbmNsZHVlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKwordHlwZWRlZiBWZWN0b3I8TFZhbHVlLCAxNj4gRXhpdEFyZ3VtZW50TGlzdDsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExFeGl0QXJndW1lbnRMaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExF
eGl0VGh1bmtHZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
RlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKworRXhpdFRodW5rR2VuZXJhdG9y
OjpFeGl0VGh1bmtHZW5lcmF0b3IoU3RhdGUmIHN0YXRlKQorICAgIDogQ0NhbGxIZWxwZXJzKCZz
dGF0ZS5ncmFwaC5tX2dsb2JhbERhdGEsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrKQoreworfQor
CitFeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3IoKQoreworfQorCit2b2lk
IEV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4LCBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvKQoreworICAgIGluZm8ubV90aHVua0xhYmVsID0gbGFiZWwoKTsK
KyAgICBtb3ZlKFRydXN0ZWRJbW0zMihpbmRleCksIEdQUkluZm86Om5vbkFyZ0dSUDApOworICAg
IGluZm8ubV90aHVua0p1bXAgPSBwYXRjaGFibGVKdW1wKCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0VGh1bmtHZW5lcmF0b3Jf
aAorI2RlZmluZSBGVExFeGl0VGh1bmtHZW5lcmF0b3JfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0NDYWxsSGVscGVy
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIE9TUkV4aXRD
b21waWxhdGlvbkluZm87CitjbGFzcyBTdGF0ZTsKKworY2xhc3MgRXhpdFRodW5rR2VuZXJhdG9y
IDogcHVibGljIENDYWxsSGVscGVycyB7CitwdWJsaWM6CisgICAgRXhpdFRodW5rR2VuZXJhdG9y
KFN0YXRlJiBzdGF0ZSk7CisgICAgfkV4aXRUaHVua0dlbmVyYXRvcigpOworICAgIAorICAgIHZv
aWQgZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4LCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJik7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKworI2VuZGlmIC8vIEZUTEV4aXRUaHVua0dlbmVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2
b2lkIEV4aXRWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgY2FzZSBJbnZhbGlkRXhpdFZhbHVlOgorICAgICAgICBvdXQucHJp
bnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoK
KyAgICAgICAgb3V0LnByaW50KCJEZWFkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4
aXRWYWx1ZUFyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50KCIsIGV4aXRBcmd1
bWVudCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFu
dDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCgiLCBjb25zdGFudCgpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIG91dC5w
cmludCgiSW5KU1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZU
TAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExFeGl0VmFsdWVfaAorI2RlZmluZSBGVExFeGl0VmFsdWVfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEV4aXRBcmd1
bWVudC5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUaGlzIGlzIGxp
a2UgVmFsdWVSZWNvdmVyeSwgYnV0IHJlc3BlY3RzIHRoZSB3YXkgdGhhdCB0aGUgRlRMIGRvZXMg
T1NSCisvLyBleGl0OiB0aGUgbGl2ZSBub24tY29uc3RhbnQgbm9uLWZsdXNoZWQgdmFsdWVzIGFy
ZSBwYXNzZWQgYXMgYXJndW1lbnRzCisvLyB0byBhIG5vcmV0dXJuIHRhaWwgY2FsbC4gRXhpdFZh
bHVlIGlzIGhlbmNlIG1vc3RseSByZXNwb25zaWJsZSBmb3IKKy8vIHRlbGxpbmcgdXMgdGhlIG1h
cHBpbmcgYmV0d2VlbiBvcGVyYW5kcyBpbiBieXRlY29kZSBhbmQgdGhlIGFyZ3VtZW50cyB0bwor
Ly8gdGhlIGNhbGwuCisKK2VudW0gRXhpdFZhbHVlS2luZCB7CisgICAgSW52YWxpZEV4aXRWYWx1
ZSwKKyAgICBFeGl0VmFsdWVEZWFkLAorICAgIEV4aXRWYWx1ZUFyZ3VtZW50LAorICAgIEV4aXRW
YWx1ZUNvbnN0YW50CisgICAgRXhpdFZhbHVlSW5KU1N0YWNrLAorICAgIEV4aXRWYWx1ZUluSlNT
dGFja0FzSW50MzIsCisgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNCb29sZWFuLAorICAgIEV4aXRW
YWx1ZUluSlNTdGFja0FzRG91YmxlCit9OworCitjbGFzcyBFeGl0VmFsdWUgeworcHVibGljOgor
ICAgIEV4aXRWYWx1ZSgpCisgICAgICAgIDogbV9raW5kKEludmFsaWRFeGl0VmFsdWUpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZCA9PSBJbnZhbGlkRXhpdFZhbHVlOyB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBkZWFk
KCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBFeGl0VmFsdWVEZWFkOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAK
KyAgICBzdGF0aWMgRXhpdFZhbHVlIGluSlNTdGFjaygpCisgICAgeworICAgICAgICBFeGl0VmFs
dWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVl
IGluSlNTdGFja0FzSW50MzIoKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0
YWNrQXNCb29sZWFuKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2tBc0Jvb2xlYW47CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNr
QXNEb3VibGUoKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGNvbnN0YW50KEpTVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gRXhpdFZhbHVlQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC51LmNvbnN0YW50
ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBleGl0QXJndW1lbnQoY29uc3QgRXhpdEFyZ3Vt
ZW50JiBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0LnUuYXJn
dW1lbnQgPSBhcmd1bWVudC5yZXByZXNlbnRhdGlvbigpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKyAgICAKKyAgICBFeGl0VmFsdWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlzRGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBFeGl0VmFsdWVEZWFkOyB9CisgICAgYm9vbCBpc0luSlNTdGFja1NvbWVob3coKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJ
bkpTU3RhY2s6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICAg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0Jvb2xlYW46CisgICAgICAgIGNhc2UgRXhpdFZh
bHVlSW5KU1N0YWNrQXNEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQ29u
c3RhbnQ7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0g
RXhpdFZhbHVlQXJndW1lbnQ7IH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0FyZ3VtZW50KCkpOworICAgICAgICBy
ZXR1cm4gRXhpdEFyZ3VtZW50KHUuYXJndW1lbnQpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVl
IGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NvbnN0YW50KCkpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuY29uc3RhbnQpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAg
RXhpdFZhbHVlS2luZCBtX2tpbmQ7CisgICAgdW5pb24geworICAgICAgICBFeGl0QXJndW1lbnRS
ZXByZXNlbnRhdGlvbiBhcmd1bWVudDsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7
CisgICAgfSB1OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VmFsdWVfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAkocmV2aXNpb24gMTQ3
ODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNp
bmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MSwxOCArNDIsNiBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAvLyB1c2UgdGhpcyBpbiBzaXR1YXRpb25z
IHdoZXJlIHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIHNheSB3aGF0IG5vZGUgdGhlIHZhbHVlIGNh
bWUKIC8vIGZyb20uCiAKLS8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRv
IERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAotLy8gdW5saWtl
IERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3
ZWVuIFVJbnQzMiBhbmQgSW50MzIuCi0KLWVudW0gVmFsdWVGb3JtYXQgewotICAgIEludmFsaWRW
YWx1ZUZvcm1hdCwKLSAgICBWYWx1ZUZvcm1hdEludDMyLAotICAgIFZhbHVlRm9ybWF0VUludDMy
LAotICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKLSAgICBWYWx1ZUZvcm1hdEpTVmFsdWUsCi0gICAg
VmFsdWVGb3JtYXREb3VibGUKLX07Ci0KIGNsYXNzIEZvcm1hdHRlZFZhbHVlIHsKIHB1YmxpYzoK
ICAgICBGb3JtYXR0ZWRWYWx1ZSgpCkBAIC04MSw2ICs3MCwxMyBAQCBwcml2YXRlOgogICAgIExW
YWx1ZSBtX3ZhbHVlOwogfTsKIAorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBub1ZhbHVl
KCkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRW
YWx1ZSBpbnQzMlZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFs
dWVGb3JtYXRJbnQzMiwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIHVJ
bnQzMlZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3Jt
YXRVSW50MzIsIHZhbHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBib29sZWFu
VmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEJv
b2xlYW4sIHZhbHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBqc1ZhbHVlVmFs
dWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEpTVmFs
dWUsIHZhbHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBkb3VibGVWYWx1ZShM
VmFsdWUgdmFsdWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2
YWx1ZSk7IH0KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJ
KHJldmlzaW9uIDE0NzgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBAIEpJVENvZGU6On5KSVRDb2Rl
KCkKICAgICAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUpOwogfQogCit2
b2lkIEpJVENvZGU6OmluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYgZXhpdFRodW5rcykKK3sK
KyAgICBtX2V4aXRUaHVua3MgPSBleGl0VGh1bmtzOworfQorCiB2b2lkIEpJVENvZGU6OmluaXRp
YWxpemVDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGVudHJ5cG9p
bnQpCiB7CiAgICAgbV9lbmdpbmUgPSBlbmdpbmU7CkBAIC05Nyw2ICsxMDIsMTEgQEAgYm9vbCBK
SVRDb2RlOjpjb250YWlucyh2b2lkKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0NvZGVQdHIg
SklUQ29kZTo6ZXhpdFRodW5rcygpCit7CisgICAgcmV0dXJuIG1fZXhpdFRodW5rcy5jb2RlKCk7
Cit9CisKIEpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiB7CiAgICAgcmV0dXJuIHRoaXM7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTQ3ODIxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ4LDEyICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29s
IGNvbnRhaW5zKHZvaWQqKTsKICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENv
ZGVSZWYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiwg
Q29kZVJlZiBlbnRyeXBvaW50KTsKICAgICAKKyAgICBDb2RlUHRyIGV4aXRUaHVua3MoKTsKKyAg
ICAKICAgICBKSVRDb2RlKiBmdGwoKTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigp
OwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CisgICAgU2VnbWVudGVkVmVjdG9y
PE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBMTFZN
IHNob3VsZCB1c2Ugb3VyIG93biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNob3VsZG4n
dCBoYXZlIHRvCkBAIC02MSw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYxOQogICAgIExMVk1FeGVjdXRpb25Fbmdp
bmVSZWYgbV9lbmdpbmU7CiAgICAgQ29kZVJlZiBtX2VudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBt
X2V4aXRUaHVua3M7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTQ3ODIxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDEwIEBACiAKICNpbmNsdWRlICJERkdB
YnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9yeS5oIgor
I2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRl
ZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgi
CiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CkBAIC00MSw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAvLyBVc2luZyB0aGlz
IGluc3RlYWQgb2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVkdWNlIHRoZSBsb2FkIG9uIExMVk0s
IGJ5IGNyZWF0aW5nCiAvLyBzaWduaWZpY2FudGx5IGxlc3MgZGVhZCBjb2RlLgogI2RlZmluZSBG
VExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZh
aWxDb25kaXRpb24pIGRvIHsgXAotICAgICAgICBMVmFsdWUgX2Z0Y19sb3dWYWx1ZSA9IChsb3dW
YWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBGb3JtYXR0ZWRW
YWx1ZSBfZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgXAog
ICAgICAgICBFZGdlIF9mdGNfaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSk7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZnRjX3R5cGVzUGFzc2Vk
VGhyb3VnaCA9ICh0eXBlc1Bhc3NlZFRocm91Z2gpOyAgXAogICAgICAgICBpZiAoIW1fc3RhdGUu
bmVlZHNUeXBlQ2hlY2soX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoKSkg
XApAQCAtNTcsNiArNTksOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sb2NhbHNCb29sZWFuKE9w
ZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKICAg
ICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0t
PnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJhbmRzTGlrZSwgc3Rh
dGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX3ZhbHVl
U291cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNB
dEhlYWQpCisgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAgICAgICwg
bV9zdGF0ZShzdGF0ZS5ncmFwaCkKICAgICB7CiAgICAgfQpAQCAtODAsMTQgKzg0LDE0IEBAIHB1
YmxpYzoKICAgICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQu
bV9idWlsZGVyLCBtX291dC5pbnQ2NCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIG1f
aW5pdGlhbGl6YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuZnVuY3Rpb24pOwor
ICAgICAgICBtX291dC5qdW1wKG1faW5pdGlhbGl6YXRpb24pOworICAgICAgICBtX291dC5hcHBl
bmRUbyhtX2luaXRpYWxpemF0aW9uKTsKKyAgICAgICAgCiAgICAgICAgIG1fY2FsbEZyYW1lID0g
bV9vdXQucGFyYW0oMCk7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0LmNvbnN0SW50
NjQoVGFnVHlwZU51bWJlcik7CiAgICAgICAgIG1fdGFnTWFzayA9IG1fb3V0LmNvbnN0SW50NjQo
VGFnTWFzayk7CiAgICAgICAgIAotICAgICAgICBtX2Fib3J0RnVuY3Rpb24gPSBjb25zdEludFRv
UHRyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWJvcnQpLAotICAgICAgICAgICAg
cG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlKSkpOwotICAgICAgICAKICAg
ICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFw
aC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAgbV9oaWdoQmxv
Y2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAgICAgICAgaWYg
KCFtX2hpZ2hCbG9jaykKQEAgLTk4LDE0ICsxMDIsMTcgQEAgcHVibGljOgogICAgICAgICAKICAg
ICAgICAgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCk7CiAKLSAgICAgICAgbV9vdXQuYXBwZW5k
VG8obV9wcm9sb2d1ZSwgbV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbiwgbV9ibG9ja3MuZ2V0KG1f
Z3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKIAogICAgICAgICB0cmFuc2ZlckFuZENoZWNrQXJn
dW1lbnRzKCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5qdW1wKG1fYmxvY2tzLmdldChtX2dy
YXBoLm1fYmxvY2tzWzBdLmdldCgpKSk7CisgICAgICAgIC8vIExlYXZlIHRoZSBpbml0aWFsaXph
dGlvbiBibG9jayBoYW5naW5nLCBzaW5jZSB3ZSB3aWxsIGFkZCB0byBpdCBsYXRlci4KICAgICAg
ICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAgICAgICBjb21w
aWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIAorICAgICAgICAvLyBBbmQgbm93IGNvbXBs
ZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KKyAgICAgICAgbGlua09TUkV4aXRzQW5kQ29t
cGxldGVJbml0aWFsaXphdGlvbkJsb2NrKCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxh
dGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIG1fZnRsU3RhdGUuZHVtcFN0YXRlKCJhZnRlciBs
b3dlcmluZyIpOwpAQCAtMTUxLDggKzE1OCw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB0
cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBTZXQg
dXAgdGhlIE9TUiBzdG9yeSBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIC8vIFdoaWxlIGNoZWNraW5nIGFyZ3Vt
ZW50cywgZXZlcnl0aGluZyBpcyBpbiB0aGUgc3RhY2suCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CkBAIC0xNzAsMjEgKzE3
OCwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElm
UG9zc2libGUoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YXJpYWJsZS0+
c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOwor
ICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJn
dW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90SW50MzIo
anNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwgbV9sb2NhbHMz
Mi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RDZWxsKGpz
VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwg
anNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwogICAgICAg
ICAgICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwg
anNWYWx1ZSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2Rl
LCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQo
dW5ib3hCb29sZWFuKGpzVmFsdWUpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAg
ICB9CkBAIC0yMTYsMTggKzIyNCwxOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElSIGR1
bXBzIGVhc2llciB0byByZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9u
ZXh0TG93QmxvY2spOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFj
ayB0aGUgT1NSIHNpdHVhdGlvbiBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3Rh
dGVGb3JCbG9jaygpOwogICAgICAgICAKICAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwog
ICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9ib29sZWFuVmFsdWVz
LmNsZWFyKCk7CiAgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOworICAgICAgICBtX3Rp
bWVUb0xpdmUuY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAg
ICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwogICAgICAgICAKLSAg
ICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2hpZ2hCbG9j
ay0+c2l6ZSgpOyArK25vZGVJbmRleCkKKyAgICAgICAgZm9yIChtX25vZGVJbmRleCA9IDA7IG1f
bm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsgKyttX25vZGVJbmRleCkKICAgICAgICAg
ICAgIGNvbXBpbGVOb2RlKG5vZGVJbmRleCk7CiAgICAgfQogICAgIApAQCAtMjQwLDkgKzI0OCw2
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBib29sIHNob3VsZEV4ZWN1dGVFZmZlY3Rz
ID0gbV9zdGF0ZS5zdGFydEV4ZWN1dGluZyhtX25vZGUpOwogICAgICAgICAKLSAgICAgICAgaWYg
KCFtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICByZXR1cm47IC8vIEZJWE1F
OiBJbXBsZW1lbnQgT1NSIG1hZ2ljIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTM2MjMKLSAgICAgICAgCiAgICAgICAgIG1fZGlyZWN0aW9uID0gKG1fbm9k
ZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0aW9uIDogQmFj
a3dhcmRTcGVjdWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgp
KSB7CkBAIC0yNTgsNiArMjYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CiAgICAgICAgICAgICBjb21waWxlU2V0TG9jYWwoKTsKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBjb21waWxlTW92SGludCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAgICAgIGNvbXBp
bGVab21iaWVIaW50KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb3ZIaW50
QW5kQ2hlY2s6CiAgICAgICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKCk7CiAgICAgICAg
ICAgICBicmVhazsKQEAgLTM1Miw2ICszNjMsMTEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJF
TihtX2dyYXBoLCBtX25vZGUsIHVzZSk7CisgICAgICAgIAorICAgICAgICBpZiAobV9ub2RlLT5o
YXNSZXN1bHQoKSkKKyAgICAgICAgICAgIG1fdGltZVRvTGl2ZS5hZGQobV9ub2RlLCBtX25vZGUt
PmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgIAogICAgICAgICBpZiAoc2hvdWxkRXhlY3V0
ZUVmZmVjdHMpCiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG5vZGVJbmRleCk7
CiAgICAgfQpAQCAtMzY4LDggKzM4NCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29t
cGlsZUdldExvY2FsKCkKICAgICB7CisgICAgICAgIC8vIEdldExvY2FsIGlzIG9uZSBvZiB0aGUg
ZmV3IG5vZGVzIHRoYXQgbWF5IGJlIGxlZnQgYmVoaW5kLCB3aXRoICFzaG91bGRHZW5lcmF0ZSgp
LgorICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBt
X25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAg
ICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3BlcmFuZCh2YXJp
YWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVj
Tm9uZSkgewpAQCAtNDIwLDEzICs0NDAsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNv
bXBpbGVTZXRMb2NhbCgpCiAgICAgeworICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwor
ICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGJvb2wg
bmVlZHNGbHVzaGluZyA9IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG1fbm9kZSk7CiAgICAg
ICAgIAotICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBNb3ZIaW50IGZvciBPU1IuCi0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKLSAg
ICAgICAgCiAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsK
ICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRMLgpAQCAtNDM4
LDIxICs0NTcsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1f
bG9jYWxzMzIub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlm
IChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7CiAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRGb3IodmFyaWFi
bGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFi
bGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAg
IG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYg
KG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1
ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0
YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24p
KSB7CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEo
KSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1
c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChsb3dKU1ZhbHVlKG1f
bm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291
cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NjAsMTggKzQ4NSwzMiBAQCBw
cml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOwogICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgewogICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2Uo
VmFsdWVJbkpTU3RhY2spOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpOwotICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgaWYgKG5lZWRz
Rmx1c2hpbmcpIHsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3Io
dmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxl
LT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkKKyAgICB7CisgICAgICAgIG9ic2Vy
dmVNb3ZIaW50KG1fbm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVpvbWJpZUhp
bnQoKQorICAgIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT52
YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IGRhdGEtPmxv
Y2FsKCk7CisgICAgICAgIG1fdmFsdWVTb3VyY2VzW2RhdGEtPmxvY2FsKCldID0gVmFsdWVTb3Vy
Y2UoU291cmNlSXNEZWFkKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGludEFu
ZENoZWNrKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9y
IE9TUi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTExMzYyMworICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwogICAgICAgICBzcGVjdWxh
dGUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgfQogICAgIApAQCAtNTAwLDcgKzUzOSw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAg
ICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEp
KTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5l
eHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7CiAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZCht
X25vZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CkBAIC01MjQsNyArNTYzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnN1YldpdGhP
dmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywg
MCwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOworICAgICAgICAgICAgc3BlY3Vs
YXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEp
KTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZh
bHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU0Nyw3
ICs1ODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChs
ZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBMVmFsdWUg
b3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0g
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCAwLCAwLCBtX291dC5leHRyYWN0VmFs
dWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZs
b3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVz
dWx0LCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTU2LDggKzU5NSw4IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9v
dXQubmV3QmxvY2soKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOwot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NU
aGFuKGxlZnQsIG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShO
ZWdhdGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQzMlplcm8p
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAs
IG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4ocmln
aHQsIG1fb3V0LmludDMyWmVybykpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGlu
dWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxh
c3ROZXh0KTsKICAgICAgICAgICAgIH0KQEAgLTU4NSw3ICs2MjQsNyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBuZWdhdGUtd2l0aC1vdmVyZmxvdyBpbnRy
aW5zaWMuIEhvcGVmdWxseSB0aGlzCiAgICAgICAgICAgICAgICAgLy8gZG9lcyB0aGUgdHJpY2ss
IHRob3VnaC4KICAgICAgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5z
dWJXaXRoT3ZlcmZsb3czMihtX291dC5pbnQzMlplcm8sIHZhbHVlKTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jl
c3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgp
LCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02NTYsNyArNjk1LDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgCiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkp
OwogICAgICAgICBzcGVjdWxhdGVGb3J3YXJkKAotICAgICAgICAgICAgT3ZlcmZsb3csIDAsIDAs
IG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5pbnQzMlplcm8pLAorICAgICAgICAgICAgT3Zl
cmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0LmludDMyWmVy
byksCiAgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdFVJbnQzMiwgdmFsdWUp
KTsKICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCB2YWx1ZSk7CiAgICAgfQpAQCAt
Njc1LDcgKzcxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5z
dHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgc3BlY3VsYXRlKAotICAg
ICAgICAgICAgICAgIGV4aXRLaW5kLCBjZWxsLCAwLAorICAgICAgICAgICAgICAgIGV4aXRLaW5k
LCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCiAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwo
c3RydWN0dXJlLCB3ZWFrUG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSkpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02OTIsNyArNzMxLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgZXhp
dEtpbmQsIGNlbGwsIDAsCisgICAgICAgICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwp
LCAwLAogICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlLCB3ZWFrUG9pbnRlciht
X25vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNzU1LDcgKzc5NCw3IEBAIHBy
aXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKICAgICAgICAgICAgIGlm
IChtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIDAsIDAsCisgICAgICAg
ICAgICAgICAgICAgIE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsCiAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LCBt
X291dC5sb2FkMzIoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVuZ3RoKSkpOwog
ICAgICAgICAgICAgICAgIApAQCAtNzY0LDcgKzgwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmlu
ZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZSwg
bV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKICAgICAgICAgICAgICAgICAgICAg
bV9zdGF0ZS5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUpKTsKLSAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCAwLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQp
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAs
IG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVl
cy5hZGQobV9ub2RlLCByZXN1bHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQpAQCAtODY1LDMyICs5MDQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KICAg
ICAKLSAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKEV4aXRLaW5kLCBMVmFsdWUsIE5vZGUqLCBM
VmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKAorICAgICAg
ICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVl
LCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGZhaWxD
YXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9u
ID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJyYW5jaChmYWls
Q29uZGl0aW9uLCBmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgTEJhc2ljQmxvY2sg
bGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgZXhpdC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICBtX291dC5jYWxsKG1f
YWJvcnRGdW5jdGlvbik7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBhcHBlbmRPU1JF
eGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlv
biwgQmFja3dhcmRTcGVjdWxhdGlvbiwgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc3BlY3VsYXRlRm9yd2FyZChFeGl0S2luZCBraW5kLCBMVmFsdWUgbG93VmFsdWUs
IE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sIGNvbnN0IEZvcm1hdHRlZFZh
bHVlJikKKyAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQs
IEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29u
ZGl0aW9uLAorICAgICAgICBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgcmVjb3ZlcnkpCiAgICAgewot
ICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWls
Q29uZGl0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1Ig
ZXhpdCB0byBmb3J3YXJkLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAgICAgICAgICBr
aW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBGb3J3YXJkU3BlY3VsYXRp
b24sIHJlY292ZXJ5KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQg
a2luZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0
aW9uKQorICAgIHZvaWQgc3BlY3VsYXRlKAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikK
ICAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5n
IHRoZSBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0
aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzNjIzCisgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dWYWx1
ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBtX2RpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUo
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdGVybWluYXRlKEV4aXRLaW5kIGtpbmQpCkBAIC04
OTgsMjcgKzkzMSw0MiBAQCBwcml2YXRlOgogICAgICAgICBzcGVjdWxhdGUoa2luZCwgMCwgMCwg
bV9vdXQuYm9vbGVhblRydWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJhY2t3YXJkVHlwZUNo
ZWNrKExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVz
UGFzc2VkVGhyb3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCBiYWNrd2FyZFR5
cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWls
Q29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKGhp
Z2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOwotICAgICAg
ICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwg
ZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIG1fc3RhdGUuZm9yTm9kZShoaWdoVmFsdWUpLmZpbHRl
cih0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgICAgICBhcHBlbmRUeXBlQ2hlY2soCisgICAgICAg
ICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRp
b24sIEJhY2t3YXJkU3BlY3VsYXRpb24sCisgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKExWYWx1ZSBsb3dWYWx1ZSwg
RWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTFZhbHVl
IGZhaWxDb25kaXRpb24pCisgICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKAorICAgICAgICBGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVz
UGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAg
ICAgICBiYWNrd2FyZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2ly
aW5nIG9mIE9TUiBleGl0IHRvIGZvcndhcmQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKAor
ICAgICAgICAgICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWls
Q29uZGl0aW9uLCBGb3J3YXJkU3BlY3VsYXRpb24sCisgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1
ZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB0eXBlQ2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBF
ZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUg
ZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIHR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFs
dWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgYmFj
a3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBm
YWlsQ29uZGl0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBP
U1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0aW9uLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIz
CisgICAgICAgIGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdoVmFs
dWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgbV9kaXJlY3Rpb24sCisgICAg
ICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRU
eXBlQ2hlY2soCisgICAgICAgIExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1
bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRp
b24sIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3Zl
cnkpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVl
LCB0eXBlc1Bhc3NlZFRocm91Z2gpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NF
UlQobWF5SGF2ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNlS2luZCgpKSk7CisgICAgICAgIGFwcGVu
ZE9TUkV4aXQoQmFkVHlwZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRp
b24sIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOworICAgICAgICBtX3N0YXRlLmZvck5vZGUoaGlnaFZh
bHVlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVl
IGxvd0ludDMyKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21h
dGljT3BlcmFuZFNwZWN1bGF0aW9uKQpAQCAtOTI5LDcgKzk3Nyw4IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSBib3hl
ZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAg
ICBGVExfVFlQRV9DSEVDSyhib3hlZFJlc3VsdCwgZWRnZSwgU3BlY0ludDMyLCBpc05vdEludDMy
KGJveGVkUmVzdWx0KSk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
ICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90SW50
MzIoYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEludDMy
KGJveGVkUmVzdWx0KTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgp
LCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk0NSw3ICs5OTQsOCBA
QCBwcml2YXRlOgogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3Bl
cmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAKICAg
ICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVk
Z2Uubm9kZSgpKSkgewotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0sodW5jaGVja2VkUmVzdWx0
LCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tlZFJlc3VsdCkpOworICAgICAgICAg
ICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuY2hlY2tl
ZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVzdWx0KSk7CiAg
ICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkUmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApA
QCAtOTcxLDcgKzEwMjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgCiAgICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZh
bHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1bmJv
eGVkUmVzdWx0LCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQp
KTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVW
YWx1ZSh1bmJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJv
eGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVu
Ym94ZWRSZXN1bHQpOwogICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChlZGdlLm5vZGUo
KSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDk0LDcgKzExNDUs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVl
IGNlbGwpCiAgICAgewogICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgIGNlbGws
IGVkZ2UsIFNwZWNPYmplY3QsCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2Us
IFNwZWNPYmplY3QsCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBt
X291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZSksCiAgICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnRQdHIoZ2xvYmFsRGF0YSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQo
KSkpKTsKQEAgLTExMDUsNiArMTE1NiwzNTcgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRl
T2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwogICAgIH0KICAgICAKKyAgICBib29sIGlzTGl2
ZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+Ojpp
dGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLT5maW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAg
QVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLT5lbmQoKSk7CisgICAgICAgIHJldHVybiAhIWl0
ZXItPnZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZShFZGdlIGVkZ2UpCisgICAgewor
ICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVU
b0xpdmUtPmZpbmQoZWRnZS5ub2RlKCkpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVU
b0xpdmUtPmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlKTsKKyAgICAgICAgaXRl
ci0+dmFsdWUtLTsKKyAgICB9CisgICAgCisgICAgLy8gV3JhcHBlciB1c2VkIG9ubHkgZm9yIERG
R19OT0RFX0RPX1RPX0NISUxEUkVOCisgICAgdm9pZCB1c2UoTm9kZSosIEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIHVzZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBpbml0aWFsaXpl
T1NSRXhpdFN0YXRlRm9yQmxvY2soKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
bV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlKiBub2RlID0g
bV9oaWdoQmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgIGlmICghbm9kZSkg
eworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNl
SXNEZWFkKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG5vZGUt
PnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1lbnRzQWxpYXMoKSkgeworICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQXJndW1lbnRzU291cmNl
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7CisgICAgICAgICAg
ICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgaGF2ZSBiZWVuIGZsdXNoZWQgdG8gdGhlIEpTU3Rh
Y2sgaW4gc29tZSBmb3JtIG9yCisgICAgICAgICAgICAgICAgLy8gYW5vdGhlci4KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3Nz
aWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91
YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNl
KEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpT
U3RhY2spOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQo
KSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNl
KFZhbHVlSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291
cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOworICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQm9vbGVhbkluTG9j
YWxzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tp
XSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICB9CisgICAgfQorICAgIAor
ICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVk
VmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sCisg
ICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVj
b3ZlcnkpCisgICAgeworICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuYXBwZW5k
KAorICAgICAgICAgICAgT1NSRXhpdCgKKyAgICAgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZS5m
b3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9yKGhpZ2hWYWx1
ZSksCisgICAgICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luLCBtX2xhc3RTZXRPcGVyYW5k
LCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgbV9mdGxTdGF0ZS5vc3JF
eGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICAKKyAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0KCk7CisgICAg
ICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLm9zckV4aXQubGFz
dCgpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKKyAg
ICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwgY29u
dGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUp
OworICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWls
ZGVyLCBtX291dC5pbnRQdHIpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5l
eHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisg
ICAgICAgIEV4aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOworICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKG1fY2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGxvd1ZhbHVlKQorICAgICAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChhcmd1bWVudHMudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgVmFsdWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgeworICAgICAgICAgICAgY2Fz
ZSBWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhp
dFZhbHVlOjppbkpTU3RhY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgSW50MzJJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9
IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbjMyKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1f
dmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxzOgorICAgICAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRz
LCBpLCBWYWx1ZUZvcm1hdEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2FsczY0W2ldKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDMySW5Mb2NhbHM6CisgICAg
ICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAgICAgICBleGl0LCBh
cmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldChtX2xvY2FsczMyW2ldKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJvb2xlYW5JbkxvY2Fs
czoKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAg
IGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBtX291dC5nZXQobV9sb2Nh
bHNCb29sZWFuW2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IERvdWJsZUluTG9jYWxzOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91
YmxlcyBpbiBGVEwuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYyNAorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFy
Z3VtZW50c1NvdXJjZToKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50
b21Bcmd1bWVudHMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzk4NgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNv
dXJjZUlzRGVhZDoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVl
OjpkZWFkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEhhdmVO
b2RlOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvck5vZGUoZXhpdCwgYXJndW1l
bnRzLCBpLCBzb3VyY2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9IEZvcndhcmRTcGVjdWxhdGlvbikKKyAgICAg
ICAgICAgIGV4aXQuY29udmVydFRvRm9yd2FyZChtX2hpZ2hCbG9jaywgbV9ub2RlLCBtX25vZGVJ
bmRleCwgcmVjb3ZlcnksIGFyZ3VtZW50cyk7CisgICAgICAgIAorICAgICAgICAvLyBTbywgdGhl
IHJlYWxseSBsYW1lIHRoaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIHRvIGJ1aWxkIGFuIExMVk0g
ZnVuY3Rpb24gdHlwZS4KKyAgICAgICAgLy8gQm9vby4KKyAgICAgICAgVmVjdG9yPExUeXBlLCAx
Nj4gYXJndW1lbnRUeXBlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3Vt
ZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBwZW5kKHR5cGVP
Zihhcmd1bWVudHNbaV0pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmNvbnZlcnRUb1RhaWxD
YWxsKG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5pbnRUb1B0cigKKyAgICAgICAgICAg
ICAgICBtX291dC5nZXQoaW5mby5tX3RodW5rQWRkcmVzcyksCisgICAgICAgICAgICAgICAgcG9p
bnRlclR5cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlLCBhcmd1bWVudFR5cGVzKSkpLAor
ICAgICAgICAgICAgYXJndW1lbnRzKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRFeGl0
QXJndW1lbnRGb3JOb2RlKAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0
JiBhcmd1bWVudHMsIHVuc2lnbmVkIGluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICBBU1NFUlQobm9kZS0+aGFz
UmVzdWx0KCkpOworCisgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFydW1lbnQoZXhp
dCwgYXJndW1lbnRzLCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBpZiAoIWlzTGl2ZShub2RlKSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmVlZHNPU1JCYWNrd2FyZFJl
d2lyaW5nKG5vZGUtPm9wKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1
bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBub2RlKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIGlmIChpc0xpdmUobm9kZSkpCisgICAgICAgICAgICAg
ICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIE5vZGUqIGludDMyVG9Eb3VibGUg
PSAwOworICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlVG9JbnQzMiA9IDA7CisgICAgICAgICAg
ICAgICAgTm9kZSogdWludDMyVG9OdW1iZXIgPSAwOworICAgICAgICAgICAgICAgIE5vZGUqIGRv
dWJsZUFzSW50MzIgPSAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEhhc2hN
YXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5iZWdpbigp
OworICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgZW5k
ID0gbV90aW1lVG9MaXZlLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVu
ZDsgKytpdGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSog
Y2FuZGlkYXRlID0gaXRlci0+a2V5OworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0
ZS0+Y2hpbGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQxKCkgIT0gbm9kZSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNhbmRp
ZGF0ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQzMlRvRG91YmxlID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMyID0gY2FuZGlkYXRlOworICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMy
VG9OdW1iZXI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlciA9IGNhbmRp
ZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051
bWJlciA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFu
ZWVkc09TUkZvcndhcmRSZXdpcmluZyhjYW5kaWRhdGUtPm9wKCkpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkb3VibGVBc0ludDMyKQor
ICAgICAgICAgICAgICAgICAgICBub2RlID0gZG91YmxlQXNJbjMyOworICAgICAgICAgICAgICAg
IGVsc2UgaWYgKGludDMyVG9Eb3VibGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnQz
MlRvRG91YmxlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMikKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IHZhbHVlVG9JbnQzMjsKKyAgICAgICAgICAgICAgICBlbHNl
IGlmICh1aW50MzJUb051bWJlcikKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHVpbnQzMlRv
TnVtYmVyOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0xpdmUobm9k
ZSkpCisgICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIGV4
aXQubV92YWx1ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NF
UlQoaXNMaXZlKG5vZGUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0g
bV9pbnQzMlZhbHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChl
eGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEludDMyLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHJl
c3VsdCA9IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRB
cmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChMVmFsdWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAg
ICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SlNW
YWx1ZSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBkb3VibGVzIGluIHRoZSBGVEwuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjQKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0
cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0
QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGluZGV4LCBOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFu
dDoKKyAgICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgIGV4aXQubV92YWx1
ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpjb25zdGFudChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50
KG5vZGUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFBoYW50b21B
cmd1bWVudHM6CisgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50b21Bcmd1bWVu
dHMuCisgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzOTg2CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRFeGl0QXJndW1l
bnQoCisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywg
dW5zaWduZWQgaW5kZXgsIFZhbHVlRm9ybWF0IGZvcm1hdCwKKyAgICAgICAgTFZhbHVlIHZhbHVl
KQorICAgIHsKKyAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3Vt
ZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbGlua09TUkV4aXRz
QW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrKCkKKyAgICB7CisgICAgICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPQorICAgICAgICAgICAgZ2xvYmFsRGF0YSgpLmdl
dENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgICAgIENvZGVM
b2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRUaHVuay5jb2Rl
KCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7
CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoCisgICAgICAgICAgICAm
Z2xvYmFsRGF0YSgpLCAmbV9leGl0VGh1bmtHZW5lcmF0b3IsIG1fZnRsU3RhdGUuZ3JhcGgubV9j
b2RlQmxvY2ssCisgICAgICAgICAgICBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3Rh
dGUuaml0Q29kZS0+b3NyRXhpdC5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhpdFtp
XTsKKyAgICAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4
aXRbaV07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1f
dGh1bmtKdW1wLCB0YXJnZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zZXQo
CisgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCisgICAgICAgICAgICAgICAgICAg
IGxpbmtCdWZmZXIubG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJl
c3MoKSksCisgICAgICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5v
ZmZzZXRPZihleGl0Lm1fdGh1bmtKdW1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RhdGUuaml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCisgICAgICAgICAgICBGSU5BTEla
RV9ERkdfQ09ERSgKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLAorICAgICAgICAgICAgICAg
ICgiRlRMIGV4aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlw
ZShzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jayxKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CisK
KyAgICAgICAgbV9vdXQuanVtcChtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQo
KSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUpCisg
ICAgeworICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBB
U1NFUlQobm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAgICAgICAgCisgICAgICAgIGludCBv
cGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgCisgICAgICAgIG1fbGFzdFNldE9wZXJh
bmQgPSBvcGVyYW5kOworICAgICAgICBtX3ZhbHVlU291cmNlc1tvcGVyYW5kXSA9IFZhbHVlU291
cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vh
a1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0
Q29kZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTExNTEsMTIgKzE1NTMsMTIg
QEAgcHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgCiAgICAgTEJhc2ljQmxvY2sgbV9w
cm9sb2d1ZTsKKyAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxpemF0aW9uOwogICAgIEhhc2hNYXA8
QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKICAgICAKICAgICBMVmFsdWUgbV9j
YWxsRnJhbWU7CiAgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUgbV90YWdN
YXNrOwotICAgIExWYWx1ZSBtX2Fib3J0RnVuY3Rpb247CiAgICAgCiAgICAgSGFzaFNldDxOb2Rl
Kj4gbV9mbHVzaGVkTG9jYWxPcHM7CiAgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9w
V29ya2xpc3Q7CkBAIC0xMTY1LDE1ICsxNTY3LDIxIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxO
b2RlKiwgTFZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVl
PiBtX2Jvb2xlYW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3N0b3JhZ2VW
YWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKICAgICAK
ICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzQm9vbGVhbjsKICAgICBPcGVyYW5kczxMVmFs
dWU+IG1fbG9jYWxzMzI7CiAgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczY0OwogICAgIAor
ICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKKyAgICBpbnQgbV9sYXN0
U2V0T3BlcmFuZDsKKyAgICBFeGl0VGh1bmtHZW5lcmF0b3IgbV9leGl0VGh1bmtHZW5lcmF0b3I7
CisgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1faGln
aEJsb2NrOwogICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hCbG9jazsKICAgICBMQmFzaWNCbG9j
ayBtX25leHRMb3dCbG9jazsKKyAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAgICBOb2RlKiBt
X25vZGU7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0LmgiCisKKyNp
ZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitP
U1JFeGl0OjpPU1JFeGl0KAorICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBWYWx1ZUZvcm1hdCBwcm9m
aWxlVmFsdWVGb3JtYXQsCisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVBy
b2ZpbGUsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICBpbnQgbGFzdFNldE9wZXJhbmQsIHVu
c2lnbmVkIG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscykKKyAgICA6
IE9TUkV4aXRCYXNlKGV4aXRLaW5kLCBjb2RlT3JpZ2luKQorICAgICwgbV9wcm9maWxlVmFsdWVG
b3JtYXQocHJvZmlsZVZhbHVlRm9ybWF0KQorICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9m
aWxlKQorICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgLCBtX3BhdGNoYWJsZUNv
ZGVPZmZzZXQoMCkKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQobGFzdFNldE9wZXJhbmQpCisgICAg
LCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCit7Cit9CisKK0Nv
ZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sq
IGZ0bENvZGVCbG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcCgKKyAg
ICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgICAgICBmdGxDb2RlQmxvY2st
PmdldEpJVENvZGUoKS0+ZnRsKCktPmV4aXRUaHVua3MoKS5kYXRhTG9jYXRpb24oKSkgKworICAg
ICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQpOworfQorCit2b2lkIE9TUkV4aXQ6OmNvbnZlcnRU
b0ZvcndhcmQoCisgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jaywgREZHOjpOb2RlKiBjdXJyZW50
Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LAorICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlICZ2YWx1
ZSwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQoreworICAgIE5vZGUqIG5vZGU7CisgICAg
Tm9kZSogbGFzdE1vdkhpbnQ7CisgICAgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9j
aywgY3VycmVudE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZVJlY292ZXJ5KTsKKworICAgIEFTU0VS
VChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAKKyAg
ICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgIAorICAgIGlmICghdmFsdWUp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0
TW92SGludC0+bG9jYWwoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3ZlcnJpZGRlbk9wZXJh
bmQ7CisgICAgCisgICAgLy8gSXMgdGhlIHZhbHVlIGZvciB0aGlzIG9wZXJhbmQgYmVpbmcgcGFz
c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBleGl0LCBvciBpcworICAgIC8vIGl0IHNvbWV0aGlu
ZyBlbHNlPyBJZiBpdCdzIGFuIGFyZ3VtZW50IGFscmVhZHksIHRoZW4gcmVwbGFjZSB0aGF0IGFy
Z3VtZW50OworICAgIC8vIG90aGVyd2lzZSBhZGQgYW5vdGhlciBhcmd1bWVudC4KKyAgICBpZiAo
bV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdLmlzQXJndW1lbnQoKSkgeworICAgICAgICBFeGl0
QXJndW1lbnQgYXJndW1lbnQgPSBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0uZXhpdEFyZ3Vt
ZW50KCk7CisgICAgICAgIGFyZ3VtZW50c1tleGl0QXJndW1lbnQuYXJndW1lbnQoKV0gPSB2YWx1
ZS52YWx1ZSgpOworICAgICAgICBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0gPSBFeGl0VmFs
dWU6OmV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgIGV4aXRBcmd1bWVudC53aXRoRm9ybWF0KHZh
bHVlLmZvcm1hdCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWdu
ZWQgYXJndW1lbnQgPSBhcmd1bWVudHMuc2l6ZSgpOworICAgIGFyZ3VtZW50cy5hcHBlbmQodmFs
dWUudmFsdWUoKSk7CisgICAgbV92YWx1ZXNbbV9sYXN0U2V0T3BlcmFuZF0gPSBFeGl0VmFsdWU6
OmV4aXRBcmd1bWVudCgKKyAgICAgICAgRXhpdEFyZ3VtZW50KHZhbHVlLmZvcm1hdCgpLCBhcmd1
bWVudCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRfaAorI2RlZmluZSBGVExP
U1JFeGl0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUu
aCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlv
bnMuaCIKKyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRMaXN0LmgiCisjaW5jbHVkZSAiRlRMRXhp
dFZhbHVlLmgiCisjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgorI2lu
Y2x1ZGUgIk9wZXJhbmRzLmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVHJhY2tzIG9uZSBPU1IgZXhpdCBzaXRlIHdp
dGhpbiB0aGUgRlRMIEpJVC4gT1NSIGV4aXQgaW4gRlRMIHdvcmtzIGJ5IGRlY29uc3RydWN0aW5n
CisvLyB0aGUgY3JhenkgdGhhdCBpcyBPU1IgZG93biB0byBzaW1wbGUgU1NBIENGRyBwcmltaXRp
dmVzIHRoYXQgYW55IGNvbXBpbGVyIGJhY2tlbmQKKy8vIChpbmNsdWRpbmcgb2YgY291cnNlIExM
Vk0pIGNhbiBncm9rIGFuZCBkbyBtZWFuaW5nZnVsIHRoaW5ncyB0by4gRXhjZXB0IGZvcgorLy8g
d2F0Y2hwb2ludC1iYXNlZCBleGl0cywgd2hpY2ggaGF2ZW4ndCB5ZXQgYmVlbiBpbXBsZW1lbnRl
ZCAoc2VlIHdlYmtpdC5vcmcvYi8xMTM2NDcpLAorLy8gYW4gZXhpdCBpcyBqdXN0IGEgY29uZGl0
aW9uYWwgYnJhbmNoIGluIHRoZSBlbWl0dGVkIGNvZGUgd2hlcmUgb25lIGRlc3RpbmF0aW9uIGlz
IHRoZQorLy8gY29udGludWF0aW9uIGFuZCB0aGUgb3RoZXIgaXMgYSBiYXNpYyBibG9jayB0aGF0
IHBlcmZvcm1zIGEgbm8tcmV0dXJuIHRhaWwtY2FsbCB0byBhbgorLy8gZXhpdCB0aHVuay4gVGhp
cyB0aHVuayB0YWtlcyBhcyBpdHMgYXJndW1lbnRzIHRoZSBsaXZlIG5vbi1jb25zdGFudAorLy8g
bm90LWFscmVhZHktYWNjb3VudGVkLWZvciBieXRlY29kZSBzdGF0ZS4gVG8gYXBwcmVjaWF0ZSBo
b3cgdGhpcyB3b3JrcyBjb25zaWRlciB0aGUKKy8vIGZvbGxvd2luZyBKYXZhU2NyaXB0IHByb2dy
YW0sIGFuZCBpdHMgbG93ZXJpbmcgZG93biB0byBMTFZNIElSIGluY2x1ZGluZyB0aGUgcmVsZXZh
bnQKKy8vIGV4aXRzOgorLy8KKy8vIGZ1bmN0aW9uIGZvbyhvKSB7CisvLyAgICAgdmFyIGEgPSBv
LmE7IC8vIHByZWRpY3RlZCBpbnQKKy8vICAgICB2YXIgYiA9IG8uYjsKKy8vICAgICB2YXIgYyA9
IG8uYzsgLy8gTkIgdGhpcyBpcyBkZWFkCisvLyAgICAgYSA9IGEgfCA1OyAvLyBvdXIgZXhhbXBs
ZSBPU1IgZXhpdDogbmVlZCB0byBjaGVjayBpZiBhIGlzIGFuIGludAorLy8gICAgIHJldHVybiBh
ICsgYjsKKy8vIH0KKy8vCisvLyBKdXN0IGNvbnNpZGVyIHRoZSAiYSB8IDUiLiBJbiB0aGUgREZH
IElSLCB0aGlzIGxvb2tzIGxpa2U6CisvLworLy8gQml0T3IoQ2hlY2s6SW50MzI6QGEsIEludDMy
OjUpCisvLworLy8gV2hlcmUgQGEgaXMgdGhlIG5vZGUgZm9yIHRoZSBHZXRMb2NhbCBub2RlIHRo
YXQgZ2V0cyB0aGUgdmFsdWUgb2YgdGhlICdhJyB2YXJpYWJsZS4KKy8vIENvbmNlcHR1YWxseSwg
dGhpcyBub2RlIGNhbiBiZSBmdXJ0aGVyIGJyb2tlbiBkb3duIHRvIHRoZSBmb2xsb3dpbmcgKG5v
dGUgdGhhdCB0aGlzCisvLyBwYXJ0aWN1bGFyIGxvd2VyaW5nIG5ldmVyIGFjdHVhbGx5IGhhcHBl
bnMgLSB3ZSBza2lwIHRoaXMgc3RlcCBhbmQgZ28gc3RyYWlnaHQgdG8KKy8vIExMVk0gSVIgLSBi
dXQgaXQncyBzdGlsbCB1c2VmdWwgdG8gc2VlIHRoaXMpOgorLy8KKy8vIGV4aXRJZihAYSBpcyBu
b3QgaW50MzIpOworLy8gY29udGludWF0aW9uOworLy8KKy8vIFdoZXJlICdleGl0SWYoKScgaXMg
YSBmdW5jdGlvbiB0aGF0IHdpbGwgZXhpdCBpZiB0aGUgYXJndW1lbnQgaXMgdHJ1ZSwgYW5kCisv
LyAnY29udGludWF0aW9uJyBpcyB0aGUgc3R1ZmYgdGhhdCB3ZSB3aWxsIGRvIGFmdGVyIHRoZSBl
eGl0SWYoKSBjaGVjay4gKE5vdGUgdGhhdAorLy8gRlRMIHJlZmVycyB0byAnZXhpdElmKCknIGFz
ICdzcGVjdWxhdGUoKScsIHdoaWNoIGlzIGluIGxpbmUgd2l0aCBERkcgdGVybWlub2xvZ3kuKQor
Ly8gVGhpcyB0aGVuIGdldHMgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyBMTFZNIElSLCBh
c3N1bWluZyB0aGF0ICUwIGlzIHRoZSBMTFZNCisvLyB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHZh
cmlhYmxlICdhJywgYW5kICUxIGlzIHRoZSBMTFZNIHZhbHVlIGZvciB2YXJpYWJsZSAnYic6Cisv
LworLy8gICAlMiA9IC4uLiAvLyB0aGUgcHJlZGljdGF0ZSBjb3JyZXNwb25kaW5nIHRvICdAYSBp
cyBub3QgaW50MzInCisvLyAgIGJyIGkxICUyLCBsYWJlbCAlMywgbGFiZWwgJTQKKy8vIDsgPGxh
YmVsPjozCisvLyAgIGNhbGwgdm9pZCBleGl0VGh1bmsxKCUwLCAlMSkgLy8gcGFzcyAnYScgYW5k
ICdiJywgc2luY2UgdGhleSdyZSBib3RoIGxpdmUtaW4tYnl0ZWNvZGUKKy8vICAgdW5yZWFjaGFi
bGUKKy8vIDsgPGxhYmVsPjo0CisvLyAgIC4uLiAvLyBjb2RlIGZvciB0aGUgY29udGludWF0aW9u
CisvLworLy8gV2hlcmUgJ2V4aXRUaHVuazEnIGlzIHRoZSBJUiB0byBnZXQgdGhlIGV4aXQgdGh1
bmsgZm9yICp0aGlzKiBPU1IgZXhpdC4gRWFjaCBPU1IKKy8vIGV4aXQgd2lsbCBhcHBlYXIgdG8g
TExWTSB0byBoYXZlIGEgZGlzdGluY3QgZXhpdCB0aHVuay4KKy8vCisvLyBOb3RlIHRoYXQgdGhp
cyBkaWRuJ3QgaGF2ZSB0byBwYXNzICc1JywgJ28nLCBvciAnYycgdG8gdGhlIGV4aXQgdGh1bmsu
IDUgaXMgYQorLy8gY29uc3RhbnQgYW5kIHRoZSBERkcgYWxyZWFkeSBrbm93cyB0aGF0LCBhbmQg
Y2FuIGFscmVhZHkgdGVsbCB0aGUgT1NSIGV4aXQgbWFjaGluZXJ5CisvLyB3aGF0IHRoYXQgY29u
dGFudCBpcyBhbmQgd2hpY2ggYnl0ZWNvZGUgdmFyaWFibGVzIChpZiBhbnkpIGl0IG5lZWRzIHRv
IGJlIGRyb3BwZWQKKy8vIGludG8uIFRoaXMgaXMgY29udmV5ZWQgdG8gdGhlIGV4aXQgc3RhdGlj
YWxseSwgdmlhIHRoZSBPU1JFeGl0IGRhdGEgc3RydWN0dXJlIGJlbG93LgorLy8gU2VlIHRoZSBj
b2RlIGZvciBFeGl0VmFsdWUgZm9yIGRldGFpbHMuICdvJyBpcyBhbiBhcmd1bWVudCwgYW5kIGFy
Z3VtZW50cyBhcmUgYWx3YXlzCisvLyAiZmx1c2hlZCIgLSBpZiB5b3UgbmV2ZXIgYXNzaWduIHRo
ZW0gdGhlbiB0aGVpciB2YWx1ZXMgYXJlIHN0aWxsIGluIHRoZSBhcmd1bWVudAorLy8gc3RhY2sg
c2xvdHMsIGFuZCBpZiB5b3UgZG8gYXNzaWduIHRoZW0gdGhlbiB3ZSBlYWdlcmx5IHN0b3JlIHRo
ZW0gaW50byB0aG9zZSBzbG90cy4KKy8vICdjJyBpcyBkZWFkIGluIGJ5dGVjb2RlLCBhbmQgdGhl
IERGRyBrbm93cyB0aGlzOyB3ZSBzdGF0aWNhbGx5IHRlbGwgdGhlIGV4aXQgdGh1bmsKKy8vIHRo
YXQgaXQncyBkZWFkIGFuZCBkb24ndCBoYXZlIHRvIHBhc3MgYW55dGhpbmcuIFRoZSBleGl0IHRo
dW5rIHdpbGwgImluaXRpYWxpemUiIGl0cworLy8gdmFsdWUgdG8gVW5kZWZpbmVkLgorLy8KKy8v
IFRoaXMgYXBwcm9hY2ggdG8gT1NSIGV4aXQgaGFzIGEgbnVtYmVyIG9mIHZpcnR1ZXM6CisvLwor
Ly8gLSBJdCBpcyBhbiBlbnRpcmVseSB1bnN1cnByaXNpbmcgcmVwcmVzZW50YXRpb24gZm9yIGEg
Y29tcGlsZXIgdGhhdCBhbHJlYWR5IGdyb2tzCisvLyAgIENGRy1saWtlIElScyBmb3IgQy1saWtl
IGxhbmd1YWdlcy4gQWxsIGV4aXN0aW5nIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMganVz
dAorLy8gICB3b3JrLgorLy8KKy8vIC0gSXQgbGVuZHMgaXRzZWxmIG5hdHVyYWxseSB0byBtb2Rl
cm4gYXBwcm9hY2hlcyB0byBjb2RlIG1vdGlvbi4gRm9yIGV4YW1wbGUsIHlvdQorLy8gICBjb3Vs
ZCBzaW5rIG9wZXJhdGlvbnMgZnJvbSBhYm92ZSB0aGUgZXhpdCB0byBiZWxvdyBpdCwgaWYgeW91
IGp1c3QgZHVwbGljYXRlIHRoZQorLy8gICBvcGVyYXRpb24gaW50byB0aGUgT1NSIGV4aXQgYmxv
Y2suIFRoaXMgaXMgYm90aCBsZWdhbCBhbmQgZGVzaXJhYmxlLiBJdCB3b3JrcworLy8gICBiZWNh
dXNlIHRoZSBiYWNrZW5kIHNlZXMgdGhlIE9TUiBleGl0IGJsb2NrIGFzIGJlaW5nIG5vIGRpZmZl
cmVudCB0aGFuIGFueSBvdGhlciwKKy8vICAgYW5kIExMVk0gYWxyZWFkeSBzdXBwb3J0cyBzaW5r
aW5nIGlmIGl0IHNlZXMgdGhhdCBhIHZhbHVlIGlzIG9ubHkgcGFydGlhbGx5IHVzZWQuCisvLyAg
IEhlbmNlIHRoZXJlIGV4aXN0cyBhIHZhbHVlIHRoYXQgZG9taW5hdGVzIHRoZSBleGl0IGJ1dCBp
cyBvbmx5IHVzZWQgYnkgdGhlIGV4aXQKKy8vICAgdGh1bmsgYW5kIG5vdCBieSB0aGUgY29udGlu
dWF0aW9uLCBzaW5raW5nIG91Z2h0IHRvIGtpY2sgaW4gZm9yIHRoYXQgdmFsdWUuCisvLyAgIEhv
aXN0aW5nIG9wZXJhdGlvbnMgZnJvbSBiZWxvdyBpdCB0byBhYm92ZSBpdCBpcyBhbHNvIHBvc3Np
YmxlLCBmb3Igc2ltaWxhcgorLy8gICByZWFzb25zLgorLy8KKy8vIC0gVGhlIG5vLXJldHVybiB0
YWlsLWNhbGwgdG8gdGhlIE9TUiBleGl0IHRodW5rIGNhbiBiZSBzdWJqZWN0ZWQgdG8gc3BlY2lh
bGl6ZWQKKy8vICAgY29kZS1zaXplIHJlZHVjdGlvbiBvcHRpbWl6YXRpb25zLCB0aG91Z2ggdGhp
cyBpcyBvcHRpb25hbC4gRm9yIGV4YW1wbGUsIGluc3RlYWQKKy8vICAgb2YgYWN0dWFsbHkgZW1p
dHRpbmcgYSBjYWxsIGFsb25nIHdpdGggYWxsIHRoYXQgZ29lcyB3aXRoIGl0IChsaWtlIHBsYWNp
bmcgdGhlCisvLyAgIGFyZ3VtZW50cyBpbnRvIGFyZ3VtZW50IHBvc2l0aW9uKSwgdGhlIGJhY2tl
bmQgY291bGQgY2hvb3NlIHRvIHNpbXBseSBpbmZvcm0gdXMKKy8vICAgd2hlcmUgaXQgaGFkIHBs
YWNlZCB0aGUgYXJndW1lbnRzIGFuZCBleHBlY3QgdGhlIGNhbGxlZSAoaS5lLiB0aGUgZXhpdCB0
aHVuaykgdG8KKy8vICAgZmlndXJlIGl0IG91dCBmcm9tIHRoZXJlLiBJdCBjb3VsZCBhbHNvIHRl
bGwgdXMgd2hhdCB3ZSBuZWVkIHRvIGRvIHRvIHBvcCBzdGFjaywKKy8vICAgYWx0aG91Z2ggYWdh
aW4sIGl0IGRvZXNuJ3QgaGF2ZSB0bzsgaXQgY291bGQganVzdCBlbWl0IHRoYXQgY29kZSBub3Jt
YWxseS4gVGhvdWdoCisvLyAgIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQsIHdlIGNvdWxkOyB0
aGUgb25seSB0aGluZyB0aGF0IHdvdWxkIGNoYW5nZSBvbiBvdXIgZW5kCisvLyAgIGlzIHRoYXQg
d2UnZCBuZWVkIGZlZWRiYWNrIGZyb20gdGhlIGJhY2tlbmQgYWJvdXQgdGhlIGxvY2F0aW9uIG9m
IHRoZSBhcmd1bWVudHMKKy8vICAgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRoaW5ncyB0aGF0
IG5lZWQgdG8gYmUgZG9uZSB0byBwb3Agc3RhY2suIFRoaXMgd291bGQKKy8vICAgaW52b2x2ZSBz
d2l0Y2hpbmcgdGhlIG1fdmFsdWVzIGFycmF5IHRvIHVzZSBzb21ldGhpbmcgbW9yZSBha2luIHRv
IFZhbHVlUmVjb3ZlcnkKKy8vICAgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgRXhpdFZhbHVlLCBh
bGJlaXQgcG9zc2libHkgd2l0aCBzb21lIGhhY2tzIHRvIGJldHRlcgorLy8gICB1bmRlcnN0YW5k
IHRoZSBraW5kcyBvZiBwbGFjZXMgd2hlcmUgdGhlIExMVk0gYmFja2VuZCB3b3VsZCBwdXQgdmFs
dWVzLgorLy8KKy8vIC0gSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gYWxsb3cgdGhlIGJhY2tlbmQg
dG8gZG8gaXRzIG93biBleGl0IGhvaXN0aW5nLCBieSB1c2luZworLy8gICBpbnRyaW5zaWNzIChv
ciBtZXRhLWRhdGEsIG9yIHNvbWV0aGluZykgdG8gaW5mb3JtIHRoZSBiYWNrZW5kIHRoYXQgaXQn
cyBzYWZlIHRvCisvLyAgIG1ha2UgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBt
b3JlIHRydXRoeS4KKy8vCisvLyAtIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgd2F0
Y2hwb2ludHMgKHNlZSB3ZWJraXQub3JnL2IvMTEzNjQ3KSBieSBtYWtpbmcKKy8vICAgdGhlIHBy
ZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBiZSBhbiBpbnRyaW5zaWMgdGhhdCB0aGUgYmFj
a2VuZCBrbm93cyB0byBiZQorLy8gICB0cnVlIGF0IGNvbXBpbGUtdGltZS4gVGhlIGJhY2tlbmQg
Y291bGQgdGhlbiB0dXJuIHRoZSBjb25kaXRpb25hbCBicmFuY2ggaW50byBhCisvLyAgIHJlcGxh
Y2VhYmxlIGp1bXAsIG11Y2ggbGlrZSB0aGUgREZHIGRvZXMuCisKK3N0cnVjdCBPU1JFeGl0IDog
cHVibGljIE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCwgVmFs
dWVGb3JtYXQgcHJvZmlsZVZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
LAorICAgICAgICBDb2RlT3JpZ2luLCBpbnQgbGFzdFNldE9wZXJhbmQsIHVuc2lnbmVkIG51bWJl
ck9mQXJndW1lbnRzLAorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgCisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3Qg
YXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2Zp
bGUuCisgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IElu
dmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQorICAgIC8vIG1ldGhvZCBvZiBnZXR0aW5nIGEgdmFsdWUg
cHJvZmlsZS4gTm90ZSB0aGF0IGFsbCBvZiB0aGUgRXhpdEFyZ3VtZW50J3MKKyAgICAvLyBhcmUg
YWxyZWFkeSBhd2FyZSBvZiB0aGlzIHBvc3NpYmxlIG9mZi1ieS1vbmUsIHNvIHRoZXJlIGlzIG5v
IG5lZWQgdG8KKyAgICAvLyBjb3JyZWN0IHRoZW0uCisgICAgVmFsdWVGb3JtYXQgbV9wcm9maWxl
VmFsdWVGb3JtYXQ7CisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3ZhbHVlUHJv
ZmlsZTsKKyAgICAKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICAKKyAgICAvLyBP
ZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQuCisg
ICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIAorICAgIGludCBtX2xhc3RT
ZXRPcGVyYW5kOworICAgIAorICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAg
CisgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayog
ZnRsQ29kZUJsb2NrKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQoCisg
ICAgICAgIERGRzo6QmFzaWNCbG9jayosIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVk
IG5vZGVJbmRleCwKKyAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUmLCBFeGl0QXJndW1lbnRM
aXN0JiBhcmd1bWVudHMpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
T1NSRXhpdENvbXBpbGF0aW9uSW5mb19oCisjZGVmaW5lIEZUTE9TUkV4aXRDb21waWxhdGlvbklu
Zm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBPU1JFeGl0
Q29tcGlsYXRpb25JbmZvIHsKKyAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKKyAgICAgICAg
OiBtX3RodW5rQWRkcmVzcygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkxhYmVsIG1fdGh1bmtMYWJlbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVt
cCBtX3RodW5rSnVtcDsKKyAgICBMVmFsdWUgbV90aHVua0FkZHJlc3M7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlm
IC8vIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE0NzgyMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxOSArMTM1LDIwIEBA
IHB1YmxpYzoKICAgICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsg
cmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBp
bnRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRDYXN0KG1f
YnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGNhc3RUb0ludDMyKExWYWx1ZSB2
YWx1ZSkgeyByZXR1cm4gaW50Q2FzdCh2YWx1ZSwgaW50MzIpOyB9CisgICAgTFZhbHVlIGludFRv
UHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1
aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVy
ZW5jZSkgeyByZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExW
YWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0
b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7IH0KICAgICAKICAgICBMVmFsdWUgbG9h
ZChUeXBlZFBvaW50ZXIgcG9pbnRlciwgTFR5cGUgcmVmVHlwZSkKICAgICB7Ci0gICAgICAgIExW
YWx1ZSByZXN1bHQgPSBnZXQoYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHBvaW50ZXIudmFsdWUo
KSwgcmVmVHlwZSkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gZ2V0KGludFRvUHRyKHBvaW50
ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUlu
c3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KICAgICB2b2lkIHN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIExU
eXBlIHJlZlR5cGUpCiAgICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gc2V0KHZhbHVlLCBi
dWlsZEludFRvUHRyKG1fYnVpbGRlciwgcG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7CisgICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBzZXQodmFsdWUsIGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwg
cmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJl
c3VsdCwgKm1faGVhcHMpOwogICAgIH0KICAgICAKQEAgLTI0NCwxMCArMjQ1LDE4IEBAIHB1Ymxp
YzoKICAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUg
bm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBu
b3RUYWtlbik7IH0KICAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwg
aW5kZXgpOyB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyBy
ZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvcik7IH0KICAgICBMVmFs
dWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEp
IHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQogICAgIExW
YWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJl
dHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMik7IH0KICAgICAK
KyAgICBMVmFsdWUgY29udmVydFRvVGFpbENhbGwoTFZhbHVlIGNhbGwpCisgICAgeworICAgICAg
ICBzZXRUYWlsQ2FsbChjYWxsLCBJc1RhaWxDYWxsKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAogICAgIHZvaWQganVtcChMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyBidWls
ZEJyKG1fYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CiAgICAgdm9pZCBicmFuY2goTFZhbHVlIGNv
bmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIExCYXNpY0Jsb2NrIG5vdFRha2VuKSB7IGJ1aWxk
Q29uZEJyKG1fYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgdm9p
ZCByZXQoTFZhbHVlIHZhbHVlKSB7IGJ1aWxkUmV0KG1fYnVpbGRlciwgdmFsdWUpOyB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNDc4MjEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlh
dGlvbnMuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICBM
TW9kdWxlIG1vZHVsZTsKICAgICBMVmFsdWUgZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+
IGppdENvZGU7CisgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CiAg
ICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMVGh1bmtzX2gKKyNkZWZpbmUgRlRMVGh1bmtzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKKwor
bmFtZXNwYWNlIEZUTCB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlv
blRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFRIdW5rc19o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZUTFZhbHVlRm9ybWF0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkZUTDsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFZhbHVlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1h
dCkgeworICAgIGNhc2UgSW52YWxpZFZhbHVlRm9ybWF0OgorICAgICAgICBvdXQucHJpbnQoIklu
dmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1
ZUZvcm1hdFVJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJVSW50MzIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJv
b2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRKU1ZhbHVlOgor
ICAgICAgICBvdXQucHJpbnQoIkpTVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVGb3JtYXREb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMVmFsdWVGb3JtYXRfaAorI2RlZmluZSBGVExW
YWx1ZUZvcm1hdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWls
YXIgdG8gRGF0YUZvcm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0CisvLyB1
bmxpa2UgRGF0YUZvcm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVz
IGJldHdlZW4gVUludDMyIGFuZCBJbnQzMi4KKworZW51bSBWYWx1ZUZvcm1hdCB7CisgICAgSW52
YWxpZFZhbHVlRm9ybWF0LAorICAgIFZhbHVlRm9ybWF0SW50MzIsCisgICAgVmFsdWVGb3JtYXRV
SW50MzIsCisgICAgVmFsdWVGb3JtYXRCb29sZWFuLAorICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwK
KyAgICBWYWx1ZUZvcm1hdERvdWJsZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpGVEw6OlZhbHVlRm9ybWF0KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFZhbHVlRm9ybWF0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExWYWx1ZVNv
dXJjZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKwordm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAg
ICAgIG91dC5wcmludCgiU291cmNlTm90U2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlSW5KU1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5KU1N0YWNrIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMySW5KU1N0YWNrOgorICAgICAgICBvdXQucHJp
bnQoIkludDMySW5KU1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUlu
SlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpTU3RhY2siKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1
ZUluTG9jYWxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMySW5Mb2NhbHM6Cisg
ICAgICAgIG91dC5wcmludCgiSW50MzJJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBCb29sZWFuSW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbkluTG9jYWxz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUluTG9jYWxzOgorICAgICAgICBv
dXQucHJpbnQoIkRvdWJsZUluTG9jYWxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFy
Z3VtZW50c1NvdXJjZToKKyAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudHNTb3VyY2UiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU291cmNlSXNEZWFkOgorICAgICAgICBvdXQucHJpbnQo
IlNvdXJjZUlzRGVhZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBIYXZlTm9kZToKKyAg
ICAgICAgb3V0LnByaW50KCJOb2RlKCIsIG5vZGUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMVmFsdWVTb3VyY2VfaAorI2RlZmluZSBGVExWYWx1
ZVNvdXJjZV9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2VudW0gVmFsdWVTb3Vy
Y2VLaW5kIHsKKyAgICBTb3VyY2VOb3RTZXQsCisgICAgVmFsdWVJbkpTU3RhY2ssCisgICAgSW50
MzJJbkpTU3RhY2ssCisgICAgRG91YmxlSW5KU1N0YWNrLAorICAgIFZhbHVlSW5Mb2NhbHMsCisg
ICAgSW50MzJJbkxvY2FscywKKyAgICBCb29sZWFuSW5Mb2NhbHMsCisgICAgRG91YmxlSW5Mb2Nh
bHMsCisgICAgQXJndW1lbnRzU291cmNlLAorICAgIFNvdXJjZUlzRGVhZCwKKyAgICBIYXZlTm9k
ZQorfTsKKworY2xhc3MgVmFsdWVTb3VyY2UgeworcHVibGljOgorICAgIFZhbHVlU291cmNlKCkK
KyAgICAgICAgOiBtX3ZhbHVlKFNvdXJjZU5vdFNldCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IGV4cGxpY2l0IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgICAgICA6IG1f
dmFsdWUoa2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNl
KERGRzo6Tm9kZSogbm9kZSkKKyAgICAgICAgOiBtX3ZhbHVlKGJpdHdpc2VfY2FzdDx1aW50cHRy
X3Q+KG5vZGUpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFsdWVTb3VyY2VLaW5kKCkga2lu
ZCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSA8IHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oSGF2ZU5vZGUpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291
cmNlS2luZD4obV92YWx1ZSk7CisgICAgICAgIHJldHVybiBIYXZlTm9kZTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gU291cmNlTm90
U2V0OyB9CisgICAgCisgICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PERGRzo6Tm9kZSo+KG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CisjZW5kaWYgLy8gRlRMVmFsdWVTb3VyY2VfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197166</attachid>
            <date>2013-04-09 13:48:53 -0700</date>
            <delta_ts>2013-04-10 00:16:18 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>131974</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OCBA
QAorMjAxMy0wNC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6b2Zmc2V0
T2YpOgorICAgICAgICAoTGlua0J1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgor
ICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpiZWxv
bmdzSW5NaW5pZmllZEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkZvcndhcmRSZXdpcmluZyk6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAoT1NSRXhpdCk6
CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpkb1NlYXJj
aEZvckZvcndhcmRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpP
U1JFeGl0QmFzZSk6CisgICAgICAgIChPU1JFeGl0QmFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVNvdXJj
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBmdGwvRlRM
QWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpmdW5j
dGlvblR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OnR5cGVPZik6CisgICAgICAgIChKU0M6OkZU
TDo6YnVpbGRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpzZXRUYWlsQ2FsbCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OndpdGhGb3JtYXQpOgorICAgICAgICAoSlND
OjpGVEw6OkV4aXRBcmd1bWVudDo6cmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExF
eGl0QXJndW1lbnRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwv
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6RXhpdFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAg
ICAgICAgKiBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTEV4aXRW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChGVEwpOgorICAgICAgICAoRXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OkV4aXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZGVhZCk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjppbkpTU3RhY2spOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppbkpT
U3RhY2tBc0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aW5KU1N0YWNr
QXNEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6Y29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0VmFsdWU6OmtpbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNE
ZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzSW5KU1N0YWNrU29tZWhvdyk6
CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0
ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpub1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6RlRMOjppbnQzMlZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjp1SW50
MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6Ym9vbGVhblZhbHVlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpqc1ZhbHVlVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OmRvdWJsZVZhbHVlKToK
KyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3MpOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpleGl0VGh1bmtzKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgor
ICAgICAgICAoSklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2Vy
REZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cmFuc2ZlckFuZENoZWNrQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoTG93
ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TW92SGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVab21i
aWVIaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhp
bnRBbmRDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVB
ZGQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVUludDMyVG9OdW1iZXIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUZvcndhcmQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpiYWNrd2FyZFR5cGVDaGVjayk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmZvcndhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjphcHBlbmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpsb3dJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dXNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjp0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFs
aXphdGlvbkJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6b2JzZXJ2
ZU1vdkhpbnQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAo
SlNDOjpGVEw6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2gpOgorICAgICAgICAoSlND
OjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKE9TUkV4aXQpOgorICAgICAg
ICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Q29tcGlsYXRpb25JbmZvOjpPU1JFeGl0Q29t
cGlsYXRpb25JbmZvKToKKyAgICAgICAgKE9TUkV4aXRDb21waWxhdGlvbkluZm8pOgorICAgICAg
ICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvUHRy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6c3RvcmUpOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y29udmVydFRvVGFpbENh
bGwpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAoU3RhdGUpOgorICAgICAg
ICAqIGZ0bC9GVExUaHVua3MuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExWYWx1
ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorICAgICAg
ICAqIGZ0bC9GVExWYWx1ZVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTFZhbHVl
U291cmNlLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKFZhbHVlU291cmNlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlZhbHVlU291cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNv
dXJjZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6bm9kZSk6
CisKIDIwMTMtMDQtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIHByb3ZpZGUgdXRpbGl0aWVzIGZvciBjb21tb24gT1NS
IGV4aXQgdGFza3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKS5tX29mZnNl
dDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBvZmZzZXRPZihQYXRjaGFibGVKdW1wIGp1bXApCisg
ICAgeworICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQoanVtcC5tX2p1bXAubV9sYWJlbCkubV9v
ZmZzZXQ7CisgICAgfQorCiAgICAgLy8gVXBvbiBjb21wbGV0aW9uIG9mIGFsbCBwYXRjaGluZyAn
RklOQUxJWkVfQ09ERSgpJyBzaG91bGQgYmUgY2FsbGVkIG9uY2UgdG8KICAgICAvLyBjb21wbGV0
ZSBnZW5lcmF0aW9uIG9mIHRoZSBjb2RlLiBBbHRlcm5hdGl2ZWx5LCBjYWxsCiAgICAgLy8gZmlu
YWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYgeW91IGhhdmUgeW91ciBv
d24gd2F5IG9mCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDggQEAg
dm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0KKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRI
ZWFkLmFyZ3VtZW50KGkpLnNldChTcGVjSW50MzIpOwogICAgICAgICBlbHNlIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiAr
NTEsNyBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgY2Fz
ZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlQoIW5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyh0eXBlKSAmJiAhbmVlZHNP
U1JGb3J3YXJkUmV3aXJpbmcodHlwZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQog
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24g
MTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yODcsNiArMjg3LDI1IEBAIGlubGluZSBOb2RlRmxhZ3MgZGVmYXVsdEZs
YWdzKE5vZGVUeXBlIG8KICAgICB9CiB9CiAKK2lubGluZSBib29sIG5lZWRzT1NSQmFja3dhcmRS
ZXdpcmluZyhOb2RlVHlwZSBvcCkKK3sKKyAgICByZXR1cm4gb3AgPT0gVUludDMyVG9OdW1iZXI7
Cit9CisKK2lubGluZSBib29sIG5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9wKQor
eworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBG
b3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNlIFVJ
bnQzMlRvTnVtYmVyOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE0ODA0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM2LDE1ICszNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1
ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1
bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUlu
ZGV4KQotICAgIDogbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCisgICAgOiBPU1JFeGl0
QmFzZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKKyAgICAsIG1fanNWYWx1ZVNvdXJj
ZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAg
ICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5tX2Nv
ZGVPcmlnaW5Gb3JPU1IpCi0gICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShtX2NvZGVP
cmlnaW4pCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fd2F0
Y2hwb2ludEluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAs
IG1fa2luZChraW5kKQotICAgICwgbV9jb3VudCgwKQogICAgICwgbV9zdHJlYW1JbmRleChzdHJl
YW1JbmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQog
ewpAQCAtNzMsNTcgKzcxLDE0IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZl
ciYgbGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGxh
YmVsKTsKIH0KIAotYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxv
Y2spCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxv
Y2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVx
dWVudEV4aXRTaXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBGcmVxdWVu
dEV4aXRTaXRlIGV4aXRTaXRlOwotICAgIAotICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNj
YXBlZCkgewotICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBt
YXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOwotICAg
ICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55
IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0
U2l0ZShtX2tpbmQpOwotICAgIH0gZWxzZQotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhp
dFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsK
LSAgICAKLSAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5h
ZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKLX0KLQogdm9pZCBPU1JFeGl0Ojpjb252ZXJ0
VG9Gb3J3YXJkKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQg
bm9kZUluZGV4LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewotICAgIC8v
IENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3IgdGhl
IHByZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2Rl
IG9yaWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3ZlcnkuCi0gICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIXZhbHVlUmVjb3ZlcnkKLSAgICAgICAgJiYg
IWN1cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBOb2RlKiBzZXRMb2Nh
bCA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRM
b2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNF
RChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gY3VycmVudE5vZGUtPmNvZGVPcmln
aW4pOwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4
dCBieXRlY29kZSBpbnN0cnVjdGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAotICAg
IC8vIG9uIHRoaXMgbm9kZS4KLSAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXgg
KyAxOwotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIE5vZGUqIGxhc3RNb3ZIaW50ID0gMDsKLSAg
ICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sgPT0gYmxvY2stPnNpemUoKSkg
ewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFuZCBk
byBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZlCi0gICAgICAgICAgICAvLyBi
ZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5kIGl0
J3MgYWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVjb2Rl
LgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7Ci0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2sp
OwotICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkg
PT0gY3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0TW92SGludCA9IG5vZGU7Ci0gICAgICAg
IGlmIChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAgIH0KLSAgICAKKyAgICBO
b2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGRvU2VhcmNoRm9yRm9yd2Fy
ZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVy
eSk7CisKICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9y
aWdpbik7CisgICAgCiAgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAK
ICAgICBpZiAoIXZhbHVlUmVjb3ZlcnkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJE
RkdDb21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQ
UkluZm8uaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbHVl
UmVjb3ZlcnlPdmVycmlkZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVk
ZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODQsNyArODUsNyBAQCBwcml2
YXRlOgogLy8KIC8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3Bl
Y3VsYXRpdmUgcGF0aCBieQogLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9T
UkV4aXQgeworc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE9TUkV4
aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUs
IFNwZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5
SW5kZXggPSBVSU5UX01BWCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29k
ZTsKQEAgLTk0LDIxICs5NSwxMCBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAKICAgICB1bnNpZ25lZCBt
X3BhdGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAg
Q29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICAKICAgICB1bnNpZ25l
ZCBtX3JlY292ZXJ5SW5kZXg7CiAgICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXg7CiAgICAg
Ci0gICAgRXhpdEtpbmQgbV9raW5kOwotICAgIHVpbnQzMl90IG1fY291bnQ7Ci0gICAgCi0gICAg
Ym9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVC
bG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIGlmICgh
bV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNp
dGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIH0KLQogICAgIHZv
aWQgc2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCk7
CiAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgp
IGNvbnN0OwogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2Rl
QmxvY2sqKSBjb25zdDsKQEAgLTEyMCw5ICsxMTAsNiBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAg
aW50IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgCiAgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVy
cmlkZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ss
IENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwogfTsKIAogc3RydWN0IFNwZWN1bGF0aW9u
RmFpbHVyZURlYnVnSW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIE9TUkV4aXRCYXNl
Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2Rl
QmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCit7CisgICAgaWYgKHN0YXRpY19j
YXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0g
T3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOworICAg
IAorICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgeworICAgICAgICAvLyBDb3Vu
dCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUg
YmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOworICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRo
ZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24u
CisgICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOworICAgIH0gZWxz
ZQorICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKKyAgICAKKyAgICByZXR1cm4gYmFzZWxp
bmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRT
aXRlKTsKK30KKworYm9vbCBPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lv
bigKKyAgICBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5v
ZGVJbmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAorICAgIE5vZGUqJiBub2RlLCBOb2RlKiYg
bGFzdE1vdkhpbnQpCit7CisgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9k
ZSBpcyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKKyAgICAvLyBTZXRM
b2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEg
dmFsdWVSZWNvdmVyeS4KKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAmJiAhaGFz
VmFsdWVSZWNvdmVyeQorICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgp
KSB7CisgICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOwor
ICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50
KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdp
biA9PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIC8vIEZpbmQg
dGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uLiBBbHNvIHRy
YWNrIHRoZSBsYXN0IG1vdiBoaW50CisgICAgLy8gb24gdGhpcyBub2RlLgorICAgIHVuc2lnbmVk
IGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7CisgICAgbm9kZSA9IDA7CisgICAgbGFzdE1v
dkhpbnQgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGluZGV4SW5CbG9jayA9PSBi
bG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlubGluZSByZXR1cm4u
IEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBUaGlzIGlzIHNhZmUKKyAg
ICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMgaXRzIG93biBieXRlY29k
ZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bworICAgICAgICAgICAgLy8gcmVleGVjdXRl
IHRoYXQgYnl0ZWNvZGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBub2RlID0gYmxv
Y2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgIGlmIChub2RlLT5jb250YWluc01vdkhpbnQo
KSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKKyAgICAgICAgICAgIGxhc3RNb3ZI
aW50ID0gbm9kZTsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUt
PmNvZGVPcmlnaW4pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaW5kZXhJbkJsb2NrKys7
CisgICAgfQorICAgIAorICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2Rl
LT5jb2RlT3JpZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIERGR09TUkV4aXRCYXNlX2gKKyNkZWZpbmUgREZHT1NSRXhpdEJhc2VfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1
ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFByb3ZpZGVzIGZvciB0aGUgT1NSIGV4aXQg
cHJvZmlsaW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gYmV0d2VlbiB0aGUgREZHCisv
LyBhbmQgdGhlIEZUTC4KKworc3RydWN0IE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0QmFzZShF
eGl0S2luZCBraW5kLCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2tpbmQoa2luZCkK
KyAgICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2Zp
bGUob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdEtpbmQgbV9raW5kOworICAg
IHVpbnQzMl90IG1fY291bnQ7CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZTsKKworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUo
Q29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisg
ICAgeworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3VudGFibGUobV9raW5k
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRk
aW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2ZpbGVkQ29kZUJsb2Nr
KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZl
cnNpb24gaXMgcmVhbGx5IG5lZWRlZC4KKyAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZl
cnNpb24oCisgICAgICAgIEJhc2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQg
bm9kZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgICAgIE5vZGUqJiBuZXh0QkNO
b2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJB
ZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdEJh
c2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNs
dWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCiAj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJSZXBhdGNoQnVmZmVyLmgiCkBAIC01NCwyMCArNTUsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0
KEV4ZWNTdGF0ZSogZXhlYykKICAgICB1aW50MzJfdCBleGl0SW5kZXggPSBnbG9iYWxEYXRhLT5v
c3JFeGl0SW5kZXg7CiAgICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgp
LT5kZmcoKS0+b3NyRXhpdFtleGl0SW5kZXhdOwogICAgIAotICAgIC8vIE1ha2Ugc3VyZSBhbGwg
Y29kZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJVCBjb21waWxlZC4gVGhpcyBpcyBuZWNlc3Nh
cnkgc2luY2UKLSAgICAvLyB3ZSBtYXkgb3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sgZXZlbiBi
ZWZvcmUgaXQgaGFkIGV2ZXIgYmVlbiBjb21waWxlZCBieSB0aGUKLSAgICAvLyBKSVQsIGJ1dCBv
dXIgT1NSIGV4aXQgaW5mcmFzdHJ1Y3R1cmUgY3VycmVudGx5IG9ubHkgd29ya3MgaWYgdGhlIHRh
cmdldCBvZiB0aGUKLSAgICAvLyBPU1IgZXhpdCBpcyBKSVQgY29kZS4gVGhpcyBjb3VsZCBiZSBj
aGFuZ2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxhcmx5Ci0gICAgLy8gaGFyZCBh
Ym91dCBkb2luZyBhbiBPU1IgZXhpdCBpbnRvIHRoZSBpbnRlcnByZXRlciwgYnV0IGZvciBub3cg
dGhpcyBzZWVtcyB0byBtYWtlCi0gICAgLy8gc2Vuc2UgaW4gdGhhdCBpZiB3ZSdyZSBPU1IgZXhp
dGluZyBmcm9tIGlubGluZWQgY29kZSBvZiBhIERGRyBjb2RlIGJsb2NrLCB0aGVuCi0gICAgLy8g
cHJvYmFibHkgaXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0aW5nIGlu
dG8gaXMgaG90LiBFdmVuIG1vcmUKLSAgICAvLyBpbnRlcmVzdGluZ2x5LCBzaW5jZSB0aGUgY29k
ZSB3YXMgaW5saW5lZCwgaXQgbWF5IG5ldmVyIG90aGVyd2lzZSBnZXQgSklUCi0gICAgLy8gY29t
cGlsZWQgc2luY2UgdGhlIGFjdCBvZiBpbmxpbmluZyBpdCBtYXkgZW5zdXJlIHRoYXQgaXQgb3Ro
ZXJ3aXNlIG5ldmVyIHJ1bnMuCi0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0
Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlLmdldCgpKQotICAgICAgICAgICAgLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0
KQotICAgICAgICAgICAgLT5qaXRDb21waWxlKGV4ZWMpOwotICAgIH0KKyAgICBwcmVwYXJlQ29k
ZU9yaWdpbkZvck9TUkV4aXQoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIAogICAgIC8vIENvbXB1
dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3Bl
cmFuZHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJh
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0UHJlcGFyYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5oIgorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
dm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQor
eworICAgIGZvciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFi
bGUuZ2V0KCkpCisgICAgICAgICAgICAtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3Qp
CisgICAgICAgICAgICAtPmppdENvbXBpbGUoZXhlYyk7CisgICAgfQorfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFy
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdFByZXBhcmF0
aW9uX2gKKyNkZWZpbmUgREZHT1NSRXhpdFByZXBhcmF0aW9uX2gKKworI2lmIEVOQUJMRShERkdf
SklUKQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CisKKy8vIE1ha2Ugc3VyZSBhbGwgY29kZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlz
IEpJVCBjb21waWxlZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UKKy8vIHdlIG1heSBvcHQgdG8g
aW5saW5lIGEgY29kZSBibG9jayBldmVuIGJlZm9yZSBpdCBoYWQgZXZlciBiZWVuIGNvbXBpbGVk
IGJ5IHRoZQorLy8gSklULCBidXQgb3VyIE9TUiBleGl0IGluZnJhc3RydWN0dXJlIGN1cnJlbnRs
eSBvbmx5IHdvcmtzIGlmIHRoZSB0YXJnZXQgb2YgdGhlCisvLyBPU1IgZXhpdCBpcyBKSVQgY29k
ZS4gVGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxh
cmx5CisvLyBoYXJkIGFib3V0IGRvaW5nIGFuIE9TUiBleGl0IGludG8gdGhlIGludGVycHJldGVy
LCBidXQgZm9yIG5vdyB0aGlzIHNlZW1zIHRvIG1ha2UKKy8vIHNlbnNlIGluIHRoYXQgaWYgd2Un
cmUgT1NSIGV4aXRpbmcgZnJvbSBpbmxpbmVkIGNvZGUgb2YgYSBERkcgY29kZSBibG9jaywgdGhl
bgorLy8gcHJvYmFibHkgaXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0
aW5nIGludG8gaXMgaG90LiBFdmVuIG1vcmUKKy8vIGludGVyZXN0aW5nbHksIHNpbmNlIHRoZSBj
b2RlIHdhcyBpbmxpbmVkLCBpdCBtYXkgbmV2ZXIgb3RoZXJ3aXNlIGdldCBKSVQKKy8vIGNvbXBp
bGVkIHNpbmNlIHRoZSBhY3Qgb2YgaW5saW5pbmcgaXQgbWF5IGVuc3VyZSB0aGF0IGl0IG90aGVy
d2lzZSBuZXZlciBydW5zLgordm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYg
Ly8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFeGl0UHJlcGFyYXRpb25faAor
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVy
ID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmFyZ3Vt
ZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJj
ZSA9IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVy
KSk7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNv
dXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVT
b3VyY2UuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgcHVibGlj
OgogICAgIHsKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0gICAgICAgIGlm
IChpc0FycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNDZWxsU3BlY3VsYXRpb24ocHJl
ZGljdGlvbikpCisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNrKTsKICAgICAgICAgaWYg
KGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIFZh
bHVlU291cmNlKEJvb2xlYW5JbkpTU3RhY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNDgw
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50
U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5v
cCgpID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBpZiAobm9kZSAmJiBuZWVkc09T
UkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKICAgICAgICAgICAgICAgICBNaW5pZmll
ZElEIGlkID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29u
c3RhbnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIGNvZGVCbG9jaywgZ3JhcGguYXQoaWQp
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsNiArMjU3LDcgQEAgdm9p
ZCBWYXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvdWJsZUFzSW50MzJJRCA9IGlkOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBB
U1NFUlQoIW5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25z
LmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJi
cmV2aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxMSBAQCBzdGF0aWMgaW5s
aW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByCiB7CiAgICAgcmV0dXJuIExMVk1GdW5jdGlv
blR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgcGFyYW1Db3VudCwgdmFyaWFkaWNpdHkgPT0g
VmFyaWFkaWMpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVHlw
ZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJl
dHVyblR5cGUsIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpLCB2YXJpYWRpY2l0eSk7Cit9
CiBzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBWYXJp
YWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQogewogICAgIHJldHVybiBmdW5jdGlv
blR5cGUocmV0dXJuVHlwZSwgMCwgMCwgdmFyaWFkaWNpdHkpOwpAQCAtOTgsNiArMTAzLDggQEAg
c3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcgogICAgIHJldHVybiBmdW5j
dGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgMiwgdmFyaWFkaWNpdHkpOwogfQogCitz
dGF0aWMgaW5saW5lIExUeXBlIHR5cGVPZihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIExMVk1UeXBl
T2YodmFsdWUpOyB9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWRLaW5kSUQoY29uc3QgY2hh
ciogc3RyaW5nKSB7IHJldHVybiBMTFZNR2V0TURLaW5kSUQoc3RyaW5nLCBzdHJsZW4oc3RyaW5n
KSk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywg
dW5zaWduZWQgbGVuZ3RoKSB7IHJldHVybiBMTFZNTURTdHJpbmcoc3RyaW5nLCBsZW5ndGgpOyB9
CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0
dXJuIG1kU3RyaW5nKHN0cmluZywgc3RybGVuKHN0cmluZykpOyB9CkBAIC0xNTUsNiArMTYyLDEx
IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICByZXR1
cm4gTExWTUJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgbnVtQXJncywgIiIpOwog
fQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVmFsdWUgYnVpbGRDYWxs
KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVj
dG9yKQoreworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5i
ZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpKTsKK30KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2Fs
bChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCiB7CiAgICAgcmV0dXJuIGJ1aWxk
Q2FsbChidWlsZGVyLCBmdW5jdGlvbiwgMCwgMCk7CkBAIC0xNjgsNiArMTgwLDggQEAgc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIAogICAgIExWYWx1ZSBhcmdzW10gPSB7
IGFyZzEsIGFyZzIgfTsKICAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBh
cmdzLCAyKTsKIH0KK2VudW0gVGFpbENhbGxNb2RlIHsgSXNOb3RUYWlsQ2FsbCwgSXNUYWlsQ2Fs
bCB9Oworc3RhdGljIGlubGluZSB2b2lkIHNldFRhaWxDYWxsKExWYWx1ZSBjYWxsLCBUYWlsQ2Fs
bE1vZGUgbW9kZSkgeyBMTFZNU2V0VGFpbENhbGwoY2FsbCwgbW9kZSA9PSBJc1RhaWxDYWxsKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIExMVk1CdWlsZEV4dHJh
Y3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1
ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBMTFZNQnVpbGRTZWxlY3QoYnVpbGRl
ciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4sICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFs
dWUgYnVpbGRCcihMQnVpbGRlciBidWlsZGVyLCBMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyBy
ZXR1cm4gTExWTUJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1
bWVudC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKwordm9pZCBFeGl0QXJndW1lbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoImFyZyIsIGFyZ3VtZW50KCksICIgYXMgIiwgZm9ybWF0KCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVu
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJn
dW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdEFyZ3VtZW50X2gK
KyNkZWZpbmUgRlRMRXhpdEFyZ3VtZW50X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgor
CisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5oIgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKK3N0cnVjdCBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiB7CisgICAgVmFsdWVGb3Jt
YXQgZm9ybWF0OworICAgIHVuc2lnbmVkIGFyZ3VtZW50OworfTsKKworY2xhc3MgRXhpdEFyZ3Vt
ZW50IHsKK3B1YmxpYzoKKyAgICBFeGl0QXJndW1lbnQoKQorICAgIHsKKyAgICAgICAgbV9yZXBy
ZXNlbnRhdGlvbi5mb3JtYXQgPSBJbnZhbGlkVmFsdWVGb3JtYXQ7CisgICAgfQorICAgIAorICAg
IEV4aXRBcmd1bWVudChWYWx1ZUZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGFyZ3VtZW50KQorICAg
IHsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIG1f
cmVwcmVzZW50YXRpb24uYXJndW1lbnQgPSBhcmd1bWVudDsKKyAgICB9CisgICAgCisgICAgZXhw
bGljaXQgRXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0
aW9uKQorICAgIHsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbiA9IHJlcHJlc2VudGF0aW9uOwor
ICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcmVz
ZW50YXRpb24uZm9ybWF0ID09IEludmFsaWRWYWx1ZUZvcm1hdDsgfQorICAgIAorICAgIFZhbHVl
Rm9ybWF0IGZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMpOworICAg
ICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQ7CisgICAgfQorICAgIAorICAgIHVu
c2lnbmVkIGFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7Cisg
ICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmFyZ3VtZW50OworICAgIH0KKyAgICAKKyAg
ICBFeGl0QXJndW1lbnQgd2l0aEZvcm1hdChWYWx1ZUZvcm1hdCBmb3JtYXQpCisgICAgeworICAg
ICAgICByZXR1cm4gRXhpdEFyZ3VtZW50KGZvcm1hdCwgYXJndW1lbnQoKSk7CisgICAgfQorICAg
IAorICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXByZXNlbnRhdGlvbjsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRh
dGlvbiBtX3JlcHJlc2VudGF0aW9uOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0QXJndW1lbnRf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudExpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVu
dExpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dEFyZ3VtZW50TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJn
dW1lbnRMaXN0X2gKKyNkZWZpbmUgRlRMRXhpdEFyZ3VtZW50TGlzdF9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMQWJi
cmV2aWF0aW9ucy5oIgorI2luY2xkdWUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCit0eXBlZGVmIFZlY3RvcjxMVmFsdWUsIDE2PiBFeGl0QXJndW1l
bnRMaXN0OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRBcmd1bWVudExpc3RfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtH
ZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCitFeGl0
VGh1bmtHZW5lcmF0b3I6OkV4aXRUaHVua0dlbmVyYXRvcihTdGF0ZSYgc3RhdGUpCisgICAgOiBD
Q2FsbEhlbHBlcnMoJnN0YXRlLmdyYXBoLm1fZ2xvYmFsRGF0YSwgc3RhdGUuZ3JhcGgubV9jb2Rl
QmxvY2spCit7Cit9CisKK0V4aXRUaHVua0dlbmVyYXRvcjo6fkV4aXRUaHVua0dlbmVyYXRvcigp
Cit7Cit9CisKK3ZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmsodW5zaWduZWQgaW5k
ZXgsIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8pCit7CisgICAgaW5mby5tX3RodW5rTGFi
ZWwgPSBsYWJlbCgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGluZGV4KSwgR1BSSW5mbzo6bm9u
QXJnR1JQMCk7CisgICAgaW5mby5tX3RodW5rSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5l
cmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dFRodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRU
aHVua0dlbmVyYXRvcl9oCisjZGVmaW5lIEZUTEV4aXRUaHVua0dlbmVyYXRvcl9oCisKKyNpbmNs
dWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAi
REZHQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Y2xhc3MgT1NSRXhpdENvbXBpbGF0aW9uSW5mbzsKK2NsYXNzIFN0YXRlOworCitjbGFzcyBFeGl0
VGh1bmtHZW5lcmF0b3IgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBFeGl0
VGh1bmtHZW5lcmF0b3IoU3RhdGUmIHN0YXRlKTsKKyAgICB+RXhpdFRodW5rR2VuZXJhdG9yKCk7
CisgICAgCisgICAgdm9pZCBlbWl0VGh1bmsodW5zaWduZWQgaW5kZXgsIE9TUkV4aXRDb21waWxh
dGlvbkluZm8mKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0
VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK3ZvaWQgRXhpdFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIEludmFsaWRFeGl0VmFsdWU6Cisg
ICAgICAgIG91dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBF
eGl0VmFsdWVEZWFkOgorICAgICAgICBvdXQucHJpbnQoIkRlYWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiQXJndW1l
bnQoIiwgZXhpdEFyZ3VtZW50KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4
aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50KCIsIGNvbnN0YW50
KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoK
KyAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICAKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTEV4aXRWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRWYWx1ZV9oCisKKyNp
bmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVk
ZSAiRlRMRXhpdEFyZ3VtZW50LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
Ky8vIFRoaXMgaXMgbGlrZSBWYWx1ZVJlY292ZXJ5LCBidXQgcmVzcGVjdHMgdGhlIHdheSB0aGF0
IHRoZSBGVEwgZG9lcyBPU1IKKy8vIGV4aXQ6IHRoZSBsaXZlIG5vbi1jb25zdGFudCBub24tZmx1
c2hlZCB2YWx1ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMKKy8vIHRvIGEgbm9yZXR1cm4gdGFp
bCBjYWxsLiBFeGl0VmFsdWUgaXMgaGVuY2UgbW9zdGx5IHJlc3BvbnNpYmxlIGZvcgorLy8gdGVs
bGluZyB1cyB0aGUgbWFwcGluZyBiZXR3ZWVuIG9wZXJhbmRzIGluIGJ5dGVjb2RlIGFuZCB0aGUg
YXJndW1lbnRzIHRvCisvLyB0aGUgY2FsbC4KKworZW51bSBFeGl0VmFsdWVLaW5kIHsKKyAgICBJ
bnZhbGlkRXhpdFZhbHVlLAorICAgIEV4aXRWYWx1ZURlYWQsCisgICAgRXhpdFZhbHVlQXJndW1l
bnQsCisgICAgRXhpdFZhbHVlQ29uc3RhbnQKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2ssCisgICAg
RXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMiwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0Jvb2xl
YW4sCisgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGUKK307CisKK2NsYXNzIEV4aXRWYWx1
ZSB7CitwdWJsaWM6CisgICAgRXhpdFZhbHVlKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZEV4
aXRWYWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kID09IEludmFsaWRFeGl0VmFsdWU7IH0KKyAgICAKKyAgICBzdGF0aWMg
RXhpdFZhbHVlIGRlYWQoKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZURlYWQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNrKCkKKyAgICB7Cisg
ICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFs
dWVJbkpTU3RhY2s7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0
YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNrQXNJbnQzMigpCisgICAgeworICAgICAgICBFeGl0VmFs
dWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNJ
bnQzMjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4
aXRWYWx1ZSBpbkpTU3RhY2tBc0Jvb2xlYW4oKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFja0FzQm9vbGVh
bjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRW
YWx1ZSBpbkpTU3RhY2tBc0RvdWJsZSgpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUg
Y29uc3RhbnQoSlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVDb25zdGFudDsKKyAgICAgICAgcmVz
dWx0LnUuY29uc3RhbnQgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGV4aXRBcmd1bWVudChj
b25zdCBFeGl0QXJndW1lbnQmIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUFyZ3VtZW50OworICAgICAg
ICByZXN1bHQudS5hcmd1bWVudCA9IGFyZ3VtZW50LnJlcHJlc2VudGF0aW9uKCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEV4aXRWYWx1ZUtpbmQga2luZCgpIGNv
bnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyBy
ZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZURlYWQ7IH0KKyAgICBib29sIGlzSW5KU1N0YWNrU29t
ZWhvdygpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBj
YXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tB
c0ludDMyOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzQm9vbGVhbjoKKyAgICAg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBFeGl0VmFsdWVDb25zdGFudDsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0
dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1bWVudDsgfQorICAgIAorICAgIEV4aXRBcmd1bWVu
dCBleGl0QXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQXJndW1lbnQo
KSk7CisgICAgICAgIHJldHVybiBFeGl0QXJndW1lbnQodS5hcmd1bWVudCk7CisgICAgfQorICAg
IAorICAgIEpTVmFsdWUgY29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
Q29uc3RhbnQoKSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS5jb25zdGFudCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICBFeGl0VmFsdWVLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAgICAg
IEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIGFyZ3VtZW50OworICAgICAgICBFbmNvZGVkSlNW
YWx1ZSBjb25zdGFudDsKKyAgICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRWYWx1ZV9o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5o
CShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1h
dHRlZFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUo
RlRMX0pJVCkKIAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExW
YWx1ZUZvcm1hdC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTQx
LDE4ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIC8vIHVzZSB0aGlz
IGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gc2F5IHdoYXQgbm9k
ZSB0aGUgdmFsdWUgY2FtZQogLy8gZnJvbS4KIAotLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2Fy
ZGx5IHNpbWlsYXIgdG8gRGF0YUZvcm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0
aGF0Ci0vLyB1bmxpa2UgRGF0YUZvcm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0
aW5ndWlzaGVzIGJldHdlZW4gVUludDMyIGFuZCBJbnQzMi4KLQotZW51bSBWYWx1ZUZvcm1hdCB7
Ci0gICAgSW52YWxpZFZhbHVlRm9ybWF0LAotICAgIFZhbHVlRm9ybWF0SW50MzIsCi0gICAgVmFs
dWVGb3JtYXRVSW50MzIsCi0gICAgVmFsdWVGb3JtYXRCb29sZWFuLAotICAgIFZhbHVlRm9ybWF0
SlNWYWx1ZSwKLSAgICBWYWx1ZUZvcm1hdERvdWJsZQotfTsKLQogY2xhc3MgRm9ybWF0dGVkVmFs
dWUgewogcHVibGljOgogICAgIEZvcm1hdHRlZFZhbHVlKCkKQEAgLTgxLDYgKzcwLDEzIEBAIHBy
aXZhdGU6CiAgICAgTFZhbHVlIG1fdmFsdWU7CiB9OwogCitzdGF0aWMgaW5saW5lIEZvcm1hdHRl
ZFZhbHVlIG5vVmFsdWUoKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZSgpOyB9CitzdGF0aWMgaW5s
aW5lIEZvcm1hdHRlZFZhbHVlIGludDMyVmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3Jt
YXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEludDMyLCB2YWx1ZSk7IH0KK3N0YXRpYyBpbmxpbmUgRm9y
bWF0dGVkVmFsdWUgdUludDMyVmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRW
YWx1ZShWYWx1ZUZvcm1hdFVJbnQzMiwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRl
ZFZhbHVlIGJvb2xlYW5WYWx1ZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVl
KFZhbHVlRm9ybWF0Qm9vbGVhbiwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZh
bHVlIGpzVmFsdWVWYWx1ZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZh
bHVlRm9ybWF0SlNWYWx1ZSwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVl
IGRvdWJsZVZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVG
b3JtYXREb3VibGUsIHZhbHVlKTsgfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAgSklU
Q29kZTo6fkpJVENvZGUoKQogICAgICAgICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2Vu
Z2luZSk7CiB9CiAKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29kZVJlZiBl
eGl0VGh1bmtzKQoreworICAgIG1fZXhpdFRodW5rcyA9IGV4aXRUaHVua3M7Cit9CisKIHZvaWQg
SklUQ29kZTo6aW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmUsIENv
ZGVSZWYgZW50cnlwb2ludCkKIHsKICAgICBtX2VuZ2luZSA9IGVuZ2luZTsKQEAgLTk3LDYgKzEw
MiwxMSBAQCBib29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogICAgIHJldHVybiBmYWxzZTsK
IH0KIAorQ29kZVB0ciBKSVRDb2RlOjpleGl0VGh1bmtzKCkKK3sKKyAgICByZXR1cm4gbV9leGl0
VGh1bmtzLmNvZGUoKTsKK30KKwogSklUQ29kZSogSklUQ29kZTo6ZnRsKCkKIHsKICAgICByZXR1
cm4gdGhpczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZp
c2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNDgsMTIgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6
ZSgpOwogICAgIGJvb2wgY29udGFpbnModm9pZCopOwogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6
ZUV4aXRUaHVua3MoQ29kZVJlZik7CiAgICAgdm9pZCBpbml0aWFsaXplQ29kZShMTFZNRXhlY3V0
aW9uRW5naW5lUmVmLCBDb2RlUmVmIGVudHJ5cG9pbnQpOwogICAgIAorICAgIENvZGVQdHIgZXhp
dFRodW5rcygpOworICAgIAogICAgIEpJVENvZGUqIGZ0bCgpOwogICAgIERGRzo6Q29tbW9uRGF0
YSogZGZnQ29tbW9uKCk7CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKKyAgICBT
ZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICAKIHByaXZhdGU6CiAgICAg
Ly8gRklYTUU6IExMVk0gc2hvdWxkIHVzZSBvdXIgb3duIEpJVCBtZW1vcnkgYWxsb2NhdG9yLCBh
bmQgd2Ugc2hvdWxkbid0IGhhdmUgdG8KQEAgLTYxLDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjE5CiAgICAgTExW
TUV4ZWN1dGlvbkVuZ2luZVJlZiBtX2VuZ2luZTsKICAgICBDb2RlUmVmIG1fZW50cnlwb2ludDsK
KyAgICBDb2RlUmVmIG1fZXhpdFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTAgQEAKIAog
I2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVk
ZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRl
ICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQxLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsK
IC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1Y2UgdGhl
IGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKIC8vIHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNv
ZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFz
c2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBcCi0gICAgICAgIExWYWx1ZSBfZnRjX2xv
d1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIEZvcm1hdHRlZFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUpOyAgICAgICAgICAg
ICAgICAgICAgICBcCiAgICAgICAgIEVkZ2UgX2Z0Y19oaWdoVmFsdWUgPSAoaGlnaFZhbHVlKTsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIF9m
dGNfdHlwZXNQYXNzZWRUaHJvdWdoID0gKHR5cGVzUGFzc2VkVGhyb3VnaCk7ICBcCiAgICAgICAg
IGlmICghbV9zdGF0ZS5uZWVkc1R5cGVDaGVjayhfZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bh
c3NlZFRocm91Z2gpKSBcCkBAIC01Nyw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2xv
Y2Fsc0Jvb2xlYW4oT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFi
bGVzQXRIZWFkKQogICAgICAgICAsIG1fbG9jYWxzMzIoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFw
aC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbG9jYWxzNjQoT3Bl
cmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQorICAg
ICAgICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3Nb
MF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0
ZSkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgIHsKICAgICB9CkBAIC04MCwx
NCArODQsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgbV9sb2NhbHM2NFtpbmRleF0gPSBidWls
ZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludDY0KTsKICAgICAgICAgfQogICAgICAg
ICAKKyAgICAgICAgbV9pbml0aWFsaXphdGlvbiA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0
ZS5mdW5jdGlvbik7CisgICAgICAgIG1fb3V0Lmp1bXAobV9pbml0aWFsaXphdGlvbik7CisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1faW5pdGlhbGl6YXRpb24pOworICAgICAgICAKICAgICAgICAg
bV9jYWxsRnJhbWUgPSBtX291dC5wYXJhbSgwKTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0g
bV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9v
dXQuY29uc3RJbnQ2NChUYWdNYXNrKTsKICAgICAgICAgCi0gICAgICAgIG1fYWJvcnRGdW5jdGlv
biA9IGNvbnN0SW50VG9QdHIoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhYm9ydCks
Ci0gICAgICAgICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5cGUobV9vdXQudm9pZFR5cGUpKSk7
Ci0gICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2Nr
SW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAg
ICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAg
ICAgICAgICAgICBpZiAoIW1faGlnaEJsb2NrKQpAQCAtOTgsMTQgKzEwMiwxNyBAQCBwdWJsaWM6
CiAgICAgICAgIAogICAgICAgICBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKTsKIAotICAgICAg
ICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nr
c1swXS5nZXQoKSkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhtX2luaXRpYWxpemF0aW9uLCBt
X2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkpOwogCiAgICAgICAgIHRyYW5z
ZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAobV9i
bG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKKyAgICAgICAgLy8gTGVhdmUg
dGhlIGluaXRpYWxpemF0aW9uIGJsb2NrIGhhbmdpbmcsIHNpbmNlIHdlIHdpbGwgYWRkIHRvIGl0
IGxhdGVyLgogICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAw
OyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAg
ICAgICAgICAgIGNvbXBpbGVCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgCisgICAgICAgIC8v
IEFuZCBub3cgY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIGJsb2NrLgorICAgICAgICBsaW5r
T1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9uQmxvY2soKTsKIAogICAgICAgICBpZiAo
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgbV9mdGxTdGF0ZS5kdW1w
U3RhdGUoImFmdGVyIGxvd2VyaW5nIik7CkBAIC0xNTEsOCArMTU4LDkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKQogICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IFNldCB1cCB0aGUgT1NSIHN0b3J5IGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgLy8gV2hpbGUg
Y2hlY2tpbmcgYXJndW1lbnRzLCBldmVyeXRoaW5nIGlzIGluIHRoZSBzdGFjay4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIAogICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsg
KytpKSB7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsK
QEAgLTE3MCwyMSArMTc4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodmFyaWFibGUt
PnNob3VsZFVuYm94SWZQb3NzaWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIXZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSk7CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5w
cmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9
IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAg
ICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9k
ZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJh
Y2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihq
c1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEludDMyKGpzVmFs
dWUpLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2Rl
LCBpc05vdENlbGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNr
d2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1Zh
bHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2xvY2FsczY0
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNr
d2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
anNWYWx1ZSksIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAg
ICAgIG1fb3V0LnNldCh1bmJveEJvb2xlYW4oanNWYWx1ZSksIG1fbG9jYWxzQm9vbGVhbi5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgIH0KQEAgLTIxNiwxOCArMjI0LDE4IEBAIHByaXZhdGU6CiAgICAgICAg
IC8vIG1ha2UgSVIgZHVtcHMgZWFzaWVyIHRvIHJlYWQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGxvd0Jsb2NrLCBtX25leHRMb3dCbG9jayk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIHRyYWNrIHRoZSBPU1Igc2l0dWF0aW9uIGhlcmUuCi0gICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgaW5pdGlh
bGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBtX2ludDMyVmFs
dWVzLmNsZWFyKCk7CiAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5jbGVhcigpOwogICAgICAgICBt
X2Jvb2xlYW5WYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmNsZWFyKCk7
CisgICAgICAgIG1fdGltZVRvTGl2ZS5jbGVhcigpOwogICAgICAgICAKICAgICAgICAgbV9zdGF0
ZS5yZXNldCgpOwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7
CiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRl
eCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQorICAgICAgICBmb3IgKG1fbm9k
ZUluZGV4ID0gMDsgbV9ub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgpOyArK21fbm9kZUlu
ZGV4KQogICAgICAgICAgICAgY29tcGlsZU5vZGUobm9kZUluZGV4KTsKICAgICB9CiAgICAgCkBA
IC0yNDAsOSArMjQ4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGJvb2wgc2hvdWxk
RXhlY3V0ZUVmZmVjdHMgPSBtX3N0YXRlLnN0YXJ0RXhlY3V0aW5nKG1fbm9kZSk7CiAgICAgICAg
IAotICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIHJl
dHVybjsgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgbWFnaWMgaGVyZS4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICAKICAgICAgICAgbV9kaXJl
Y3Rpb24gPSAobV9ub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgPyBGb3J3YXJkU3Bl
Y3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICAKICAgICAgICAgc3dpdGNo
IChtX25vZGUtPm9wKCkpIHsKQEAgLTI1OCw2ICsyNjMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNvbXBpbGVTZXRMb2NhbCgpOwogICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGNvbXBpbGVNb3ZI
aW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAg
ICAgICAgICAgY29tcGlsZVpvbWJpZUhpbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hl
Y2soKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzUyLDYgKzM2MywxMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIERGR19OT0RF
X0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKKyAgICAgICAgCisgICAgICAg
IGlmIChtX25vZGUtPmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgbV90aW1lVG9MaXZlLmFkZCht
X25vZGUsIG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgCiAgICAgICAgIGlm
IChzaG91bGRFeGVjdXRlRWZmZWN0cykKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVj
dHMobm9kZUluZGV4KTsKICAgICB9CkBAIC0zNjgsOCArMzg0LDEyIEBAIHByaXZhdGU6CiAgICAg
CiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKKyAgICAgICAgLy8gR2V0TG9jYWwg
aXMgb25lIG9mIHRoZSBmZXcgbm9kZXMgdGhhdCBtYXkgYmUgbGVmdCBiZWhpbmQsIHdpdGggIXNo
b3VsZEdlbmVyYXRlKCkuCisgICAgICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRh
KiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0
aW9uKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMo
KS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmVk
aWN0aW9uID09IFNwZWNOb25lKSB7CkBAIC00MjAsMTMgKzQ0MCwxMiBAQCBwcml2YXRlOgogICAg
IAogICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKICAgICB7CisgICAgICAgIG9ic2VydmVNb3ZI
aW50KG1fbm9kZSk7CisgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsK
ICAgICAgICAgYm9vbCBuZWVkc0ZsdXNoaW5nID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMo
bV9ub2RlKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQg
Zm9yIE9TUi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTExMzYyMwotICAgICAgICAKICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElm
UG9zc2libGUoKSkgewogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVG
b3JtYXQoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91YmxlcyBp
biBGVEwuCkBAIC00MzgsMjEgKzQ1NywyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGlz
SW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSB2
YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fb3V0
LnNldCh2YWx1ZSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAg
ICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRz
Rmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5
bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7
CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAg
ICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFi
bGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAg
ICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAgICAgICAgICBtX291
dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAg
ICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291
cmNlKENlbGxJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbiht
X25vZGUtPmNoaWxkMSgpKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAg
ICBpZiAobmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0
KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSksIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2Fs
KCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2Fs
KCldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ2MCwx
OCArNDg1LDMyIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUo
bV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7
CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5s
b2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0g
PSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAg
ICAgICBpZiAobmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1
ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNv
dXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoKQorICAgIHsK
KyAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBj
b21waWxlWm9tYmllSGludCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRh
dGEgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBtX2xhc3RTZXRPcGVy
YW5kID0gZGF0YS0+bG9jYWwoKTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXNbZGF0YS0+bG9jYWwo
KV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNv
bXBpbGVNb3ZIaW50QW5kQ2hlY2soKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0
aGUgTW92SGludCBmb3IgT1NSLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CiAg
ICAgICAgIHNwZWN1bGF0ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICB9CiAgICAgCkBAIC01MDAs
NyArNTM5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0
KTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZh
bHVlKHJlc3VsdCwgMSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVl
KCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKICAgICAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTUyNCw3ICs1NjMsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0g
bV9vdXQuc3ViV2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgc3BlY3Vs
YXRlKE92ZXJmbG93LCAwLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7CisgICAg
ICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZh
bHVlKHJlc3VsdCwgMSkpOwogICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBt
X291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQpAQCAtNTQ3LDcgKzU4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVzdWx0
ID0gbV9vdXQubXVsKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg
ICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxl
ZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1f
b3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZs
b3dSZXN1bHQsIDEpKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFs
dWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01
NTYsOCArNTk1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgMCwg
MCwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgMCwgMCwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1f
b3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8s
IG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7Cisg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291
dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7CiAgICAgICAgICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICAgICAgfQpAQCAtNTg1LDcgKzYyNCw3IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIG5lZ2F0ZS13aXRo
LW92ZXJmbG93IGludHJpbnNpYy4gSG9wZWZ1bGx5IHRoaXMKICAgICAgICAgICAgICAgICAvLyBk
b2VzIHRoZSB0cmljaywgdGhvdWdoLgogICAgICAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jl
c3VsdCA9IG1fb3V0LnN1YldpdGhPdmVyZmxvdzMyKG1fb3V0LmludDMyWmVybywgdmFsdWUpOwot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZh
bHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkp
OwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jl
c3VsdCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTY1Niw3ICs2OTUsNyBA
QCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIHNwZWN1bGF0ZUZvcndhcmQoCi0gICAgICAgICAgICBP
dmVyZmxvdywgMCwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0LmludDMyWmVybyksCisg
ICAgICAgICAgICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwg
bV9vdXQuaW50MzJaZXJvKSwKICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0
VUludDMyLCB2YWx1ZSkpOwogICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHZhbHVl
KTsKICAgICB9CkBAIC02NzUsNyArNzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IGlmIChtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBz
cGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIGNlbGwsIDAsCisgICAgICAgICAg
ICAgICAgZXhpdEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKICAgICAgICAgICAgICAgICBt
X291dC5ub3RFcXVhbChzdHJ1Y3R1cmUsIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0
KClbMF0pKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY5Miw3ICs3MzEs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCi0g
ICAgICAgICAgICBleGl0S2luZCwgY2VsbCwgMCwKKyAgICAgICAgICAgIGV4aXRLaW5kLCBqc1Zh
bHVlVmFsdWUoY2VsbCksIDAsCiAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmUs
IHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSkpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03NTUs
NyArNzk0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewog
ICAgICAgICAgICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CiAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywg
MCwgMCwKKyAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwKICAg
ICAgICAgICAgICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAogICAgICAgICAgICAgICAgICAg
ICAgICAgaW5kZXgsIG1fb3V0LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJs
aWNMZW5ndGgpKSk7CiAgICAgICAgICAgICAgICAgCkBAIC03NjQsNyArODAzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGll
cyA6IG1faGVhcHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLAogICAgICAgICAgICAgICAg
ICAgICBzdG9yYWdlLCBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAogICAgICAg
ICAgICAgICAgICAgICBtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5jaGlsZDIoKSkubV92YWx1ZSkp
OwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIDAsIDAsIG1fb3V0Lmlz
WmVybzY0KHJlc3VsdCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUs
IG5vVmFsdWUoKSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAg
bV9qc1ZhbHVlVmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICB9CkBAIC04NjUsMzIgKzkwNCwyNiBAQCBwcml2YXRlOgogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoRXhpdEtpbmQsIExW
YWx1ZSwgTm9kZSosIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgc3BlY3VsYXRlQmFj
a3dhcmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBO
b2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgTEJh
c2ljQmxvY2sgZmFpbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9j
ayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAKLSAgICAgICAgbV9v
dXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZhaWxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51
YXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IE9TUiBleGl0LgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCi0gICAgICAg
IG1fb3V0LmNhbGwobV9hYm9ydEZ1bmN0aW9uKTsKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUo
KTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAg
ICAgIGFwcGVuZE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVl
LCBmYWlsQ29uZGl0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsK
ICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGb3J3YXJkKEV4aXRLaW5kIGtpbmQsIExW
YWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwgY29u
c3QgRm9ybWF0dGVkVmFsdWUmKQorICAgIHZvaWQgc3BlY3VsYXRlRm9yd2FyZCgKKyAgICAgICAg
RXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwg
TFZhbHVlIGZhaWxDb25kaXRpb24sCisgICAgICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiByZWNv
dmVyeSkKICAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVlLCBo
aWdoVmFsdWUsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJl
d2lyaW5nIG9mIE9TUiBleGl0IHRvIGZvcndhcmQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgK
KyAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24sIEZv
cndhcmRTcGVjdWxhdGlvbiwgcmVjb3ZlcnkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1
bGF0ZShFeGl0S2luZCBraW5kLCBMVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZh
bHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCBzcGVjdWxhdGUoCisgICAgICAgIEV4aXRLaW5k
IGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBm
YWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93
VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgcmV3aXJpbmcgdGhlIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09
IEZvcndhcmREaXJlY3Rpb24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAg
IGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24sIG1fZGlyZWN0aW9uLCBG
b3JtYXR0ZWRWYWx1ZSgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB0ZXJtaW5hdGUoRXhpdEtp
bmQga2luZCkKQEAgLTg5OCwyNyArOTMxLDQyIEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0
ZShraW5kLCAwLCAwLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
YmFja3dhcmRUeXBlQ2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2
b2lkIGJhY2t3YXJkVHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwg
RWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAg
ICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAgICBpZiAoIW1fc3RhdGUubmVl
ZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNlS2lu
ZCgpKSk7Ci0gICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdo
VmFsdWUubm9kZSgpLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGhp
Z2hWYWx1ZSkuZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgICAgIGFwcGVuZFR5cGVD
aGVjaygKKyAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3Vn
aCwgZmFpbENvbmRpdGlvbiwgQmFja3dhcmRTcGVjdWxhdGlvbiwKKyAgICAgICAgICAgIEZvcm1h
dHRlZFZhbHVlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soTFZh
bHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRU
aHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2so
CisgICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3Vs
YXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlv
bikKICAgICB7Ci0gICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUs
IHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZC4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBl
bmRUeXBlQ2hlY2soCisgICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3Nl
ZFRocm91Z2gsIGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVjdWxhdGlvbiwKKyAgICAgICAgICAg
IEZvcm1hdHRlZFZhbHVlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHR5cGVDaGVjayhMVmFs
dWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRo
cm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgdHlwZUNoZWNrKAorICAgICAg
ICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBl
IHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAg
ewotICAgICAgICBiYWNrd2FyZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bh
c3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHJld2lyaW5nIG9mIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09IEZvcndh
cmREaXJlY3Rpb24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICAgICAgbG93
VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBtX2Rp
cmVjdGlvbiwKKyAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKCkpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhp
Z2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBMVmFs
dWUgZmFpbENvbmRpdGlvbiwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBGb3JtYXR0
ZWRWYWx1ZSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9zdGF0ZS5uZWVkc1R5cGVD
aGVjayhoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIEFTU0VSVChtYXlIYXZlVHlwZUNoZWNrKGhpZ2hWYWx1ZS51c2VLaW5kKCkpKTsK
KyAgICAgICAgYXBwZW5kT1NSRXhpdChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUo
KSwgZmFpbENvbmRpdGlvbiwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CisgICAgICAgIG1fc3RhdGUu
Zm9yTm9kZShoaWdoVmFsdWUpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOwogICAgIH0KICAg
ICAKICAgICBMVmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2Rl
IG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCkBAIC05MjksNyArOTc3LDggQEAg
cHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBp
ZiAoTFZhbHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkp
IHsKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGJveGVkUmVzdWx0LCBlZGdlLCBTcGVjSW50
MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNL
KAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNJ
bnQzMiwgaXNOb3RJbnQzMihib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHVuYm94SW50MzIoYm94ZWRSZXN1bHQpOwogICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5h
ZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
OTQ1LDcgKzk5NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9k
ZSA9PSBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7
CiAgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVlIHVuY2hlY2tlZFJlc3VsdCA9IG1fanNWYWx1
ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1
bmNoZWNrZWRSZXN1bHQsIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVzdWx0
KSk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBqc1ZhbHVl
VmFsdWUodW5jaGVja2VkUmVzdWx0KSwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNr
ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRSZXN1bHQ7CiAgICAgICAg
IH0KICAgICAgICAgCkBAIC05NzEsNyArMTAyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0
ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIEZUTF9U
WVBFX0NIRUNLKHVuYm94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJvb2xlYW4o
dW5ib3hlZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAg
ICAgICAganNWYWx1ZVZhbHVlKHVuYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNO
b3RCb29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1
bmJveEJvb2xlYW4odW5ib3hlZFJlc3VsdCk7CiAgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMu
YWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAg
LTEwOTQsNyArMTE0NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRn
ZSBlZGdlLCBMVmFsdWUgY2VsbCkKICAgICB7CiAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAg
ICAgICAgICAgY2VsbCwgZWRnZSwgU3BlY09iamVjdCwKKyAgICAgICAgICAgIGpzVmFsdWVWYWx1
ZShjZWxsKSwgZWRnZSwgU3BlY09iamVjdCwKICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAogICAg
ICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJl
KSwKICAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cihnbG9iYWxEYXRhKCkuc3RyaW5n
U3RydWN0dXJlLmdldCgpKSkpOwpAQCAtMTEwNSw2ICsxMTU2LDM1NyBAQCBwcml2YXRlOgogICAg
ICAgICBzcGVjdWxhdGVPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CiAgICAgfQogICAgIAor
ICAgIGJvb2wgaXNMaXZlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBIYXNoTWFwPE5vZGUq
LCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUtPmZpbmQoZWRnZS5ub2Rl
KCkpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUtPmVuZCgpKTsKKyAgICAg
ICAgcmV0dXJuICEhaXRlci0+dmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgdXNlKEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3Ig
aXRlciA9IG1fdGltZVRvTGl2ZS0+ZmluZChlZGdlLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChp
dGVyICE9IG1fdGltZVRvTGl2ZS0+ZW5kKCkpOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUp
OworICAgICAgICBpdGVyLT52YWx1ZS0tOworICAgIH0KKyAgICAKKyAgICAvLyBXcmFwcGVyIHVz
ZWQgb25seSBmb3IgREZHX05PREVfRE9fVE9fQ0hJTERSRU4KKyAgICB2b2lkIHVzZShOb2RlKiwg
RWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgdXNlKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpCisgICAgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
IE5vZGUqIG5vZGUgPSBtX2hpZ2hCbG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOworICAgICAgICAg
ICAgaWYgKCFub2RlKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShTb3VyY2VJc0RlYWQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZh
cmlhYmxlID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNBcmd1bWVudHNBbGlh
cygpKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShB
cmd1bWVudHNTb3VyY2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkp
IHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJj
ZUlzRGVhZCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2Rl
KSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCBoYXZlIGJlZW4gZmx1c2hl
ZCB0byB0aGUgSlNTdGFjayBpbiBzb21lIGZvcm0gb3IKKyAgICAgICAgICAgICAgICAvLyBhbm90
aGVyLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hv
dWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV92
YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24o
cHJlZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNv
dXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5i
b3hJZlBvc3NpYmxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVz
ZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fscyk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShCb29sZWFuSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCBr
aW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFp
bENvbmRpdGlvbiwKKyAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBGb3Jt
YXR0ZWRWYWx1ZSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
b3NyRXhpdC5hcHBlbmQoCisgICAgICAgICAgICBPU1JFeGl0KAorICAgICAgICAgICAgICAgIGtp
bmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGVGb3IoaGlnaFZhbHVlKSwKKyAgICAgICAgICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4sIG1f
bGFzdFNldE9wZXJhbmQsIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBt
X2Z0bFN0YXRlLm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CisgICAg
ICAgIAorICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0
Lmxhc3QoKTsKKyAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3Rh
dGUub3NyRXhpdC5sYXN0KCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBtX291
dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24s
IGZhaWxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5k
VG8obV9wcm9sb2d1ZSk7CisgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9j
YShtX291dC5tX2J1aWxkZXIsIG1fb3V0LmludFB0cik7CisgICAgICAgIAorICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CisgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobV9jYWxsRnJhbWUpOworICAgICAgICBpZiAobG93VmFsdWUpCisg
ICAgICAgICAgICBhcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50cy52YWx1ZSgpKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBWYWx1ZVNvdXJjZSBzb3VyY2UgPSBtX3ZhbHVlU291cmNlc1tp
XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChzb3VyY2Uua2luZCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFZhbHVlSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjaygpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0
Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0luMzIoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgorICAgICAgICAg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6
CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAgICAgICBl
eGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SlNWYWx1ZSwgbV9vdXQuZ2V0KG1fbG9jYWxz
NjRbaV0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50MzJJ
bkxvY2FsczoKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAg
ICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRJbnQzMiwgbV9vdXQuZ2V0KG1f
bG9jYWxzMzJbaV0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Qm9vbGVhbkluTG9jYWxzOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAg
ICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEJvb2xlYW4sIG1f
b3V0LmdldChtX2xvY2Fsc0Jvb2xlYW5baV0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgRG91YmxlSW5Mb2NhbHM6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IGltcGxlbWVudCBkb3VibGVzIGluIEZUTC4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjI0CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQXJndW1lbnRzU291cmNlOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBp
bXBsZW1lbnQgUGhhbnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTg2CisgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgU291cmNlSXNEZWFkOgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNb
aV0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTm9k
ZShleGl0LCBhcmd1bWVudHMsIGksIHNvdXJjZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoZGlyZWN0aW9uID0gRm9yd2FyZFNwZWN1
bGF0aW9uKQorICAgICAgICAgICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJkKG1faGlnaEJsb2NrLCBt
X25vZGUsIG1fbm9kZUluZGV4LCByZWNvdmVyeSwgYXJndW1lbnRzKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFNvLCB0aGUgcmVhbGx5IGxhbWUgdGhpbmcgaGVyZSBpcyB0aGF0IHdlIGhhdmUgdG8g
YnVpbGQgYW4gTExWTSBmdW5jdGlvbiB0eXBlLgorICAgICAgICAvLyBCb29vLgorICAgICAgICBW
ZWN0b3I8TFR5cGUsIDE2PiBhcmd1bWVudFR5cGVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRUeXBl
cy5hcHBlbmQodHlwZU9mKGFyZ3VtZW50c1tpXSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQu
Y2FsbCgKKyAgICAgICAgICAgIG1fb3V0LmludFRvUHRyKAorICAgICAgICAgICAgICAgIG1fb3V0
LmdldChpbmZvLm1fdGh1bmtBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICBwb2ludGVyVHlwZShm
dW5jdGlvblR5cGUobV9vdXQudm9pZFR5cGUsIGFyZ3VtZW50VHlwZXMpKSksCisgICAgICAgICAg
ICBhcmd1bWVudHMpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRXhpdEFyZ3VtZW50Rm9y
Tm9kZSgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCB1bnNpZ25lZCBpbmRleCwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsK
KworICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcnVtZW50KGV4aXQsIGFyZ3VtZW50
cywgaW5kZXgsIG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAg
aWYgKCFpc0xpdmUobm9kZSkpIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyhub2Rl
LT5vcCgpKSkgeworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7
CisgICAgICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwg
YXJndW1lbnRzLCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
Zm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBpbnQzMlRvRG91YmxlID0gMDsKKyAgICAg
ICAgICAgICAgICBOb2RlKiB2YWx1ZVRvSW50MzIgPSAwOworICAgICAgICAgICAgICAgIE5vZGUq
IHVpbnQzMlRvTnVtYmVyID0gMDsKKyAgICAgICAgICAgICAgICBOb2RlKiBkb3VibGVBc0ludDMy
ID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1
bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4oKTsKKyAgICAgICAg
ICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVuZCA9IG1fdGltZVRv
TGl2ZS5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9
IGl0ZXItPmtleTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjYW5kaWRhdGUtPm9wKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJUb0RvdWJsZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlVG9JbnQzMiA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5kaWRhdGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3Vi
bGVBc0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5k
aWRhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmVlZHNPU1JGb3J3
YXJkUmV3aXJpbmcoY2FuZGlkYXRlLT5vcCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZG91YmxlQXNJbnQzMikKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IGRvdWJsZUFzSW4zMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChp
bnQzMlRvRG91YmxlKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gaW50MzJUb0RvdWJsZTsK
KyAgICAgICAgICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzIpCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUgPSB2YWx1ZVRvSW50MzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodWludDMy
VG9OdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB1aW50MzJUb051bWJlcjsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQorICAgICAg
ICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVz
W2luZGV4XSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGlzTGl2ZShu
b2RlKSk7CisgICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1
ZXMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1l
bnRzLCBpbmRleCwgVmFsdWVGb3JtYXRJbnQzMiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jv
b2xlYW5WYWx1ZXMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhp
dCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRCb29sZWFuLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHJl
c3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRB
cmd1bWVudChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEpTVmFsdWUsIHJlc3Vs
dCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgZG91YmxlcyBpbiB0aGUgRlRMLgorICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjI0CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5VG9TZXRDb25z
dGFudEV4aXRBcmd1bWVudCgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAg
IGlmICghbm9kZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAg
IGNhc2UgV2Vha0pTQ29uc3RhbnQ6CisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9
IEV4aXRWYWx1ZTo6Y29uc3RhbnQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgor
ICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBQaGFudG9tQXJndW1lbnRzLgorICAgICAg
ICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk4Ngor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRXhpdEFyZ3VtZW50KAorICAgICAg
ICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGlu
ZGV4LCBWYWx1ZUZvcm1hdCBmb3JtYXQsCisgICAgICAgIExWYWx1ZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudChFeGl0QXJn
dW1lbnQoZm9ybWF0LCBhcmd1bWVudHMuc2l6ZSgpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBl
bmQodmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtPU1JFeGl0c0FuZENvbXBsZXRl
SW5pdGlhbGl6YXRpb25CbG9jaygpCisgICAgeworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb3NyRXhpdFRodW5rID0KKyAgICAgICAgICAgIGdsb2JhbERhdGEoKS5nZXRDVElTdHViKG9z
ckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJl
bCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29kZSgpKTsKKyAgICAg
ICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faW5pdGlhbGl6YXRpb24pOworICAgICAgICAK
KyAgICAgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKAorICAgICAgICAgICAgJmdsb2JhbERhdGEo
KSwgJm1fZXhpdFRodW5rR2VuZXJhdG9yLCBtX2Z0bFN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLAor
ICAgICAgICAgICAgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQobV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmppdENvZGUt
Pm9zckV4aXQuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBtX2Z0bFN0YXRlLm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLm9zckV4aXRbaV07CisgICAgICAg
ICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W2ldOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaW5mby5tX3RodW5rSnVtcCwg
dGFyZ2V0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuc2V0KAorICAgICAgICAg
ICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKAorICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVy
LmxvY2F0aW9uT2YoaW5mby5tX3RodW5rTGFiZWwpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAg
ICAgICAgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MpOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBleGl0Lm1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZmZXIub2Zmc2V0T2YoZXhp
dC5tX3RodW5rSnVtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRlLmppdENv
ZGUtPmluaXRpYWxpemVFeGl0VGh1bmtzKAorICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUo
CisgICAgICAgICAgICAgICAgbGlua0J1ZmZlciwKKyAgICAgICAgICAgICAgICAoIkZUTCBleGl0
IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3Jh
cGgubV9jb2RlQmxvY2ssSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOworCisgICAgICAgIG1f
b3V0Lmp1bXAobV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG5vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgIT0gWm9tYmllSGludCk7CisgICAgICAgIAorICAgICAgICBpbnQgb3BlcmFuZCA9IG5v
ZGUtPmxvY2FsKCk7CisgICAgICAgIAorICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3BlcmFu
ZDsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXNbb3BlcmFuZF0gPSBWYWx1ZVNvdXJjZShub2RlLT5j
aGlsZDEoKS5ub2RlKCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2Uo
SlNDZWxsKiB0YXJnZXQpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1v
bi53ZWFrUmVmZXJlbmNlcy5hcHBlbmQoCkBAIC0xMTUxLDEyICsxNTUzLDEyIEBAIHByaXZhdGU6
CiAgICAgT3V0cHV0IG1fb3V0OwogICAgIAogICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7Cisg
ICAgTEJhc2ljQmxvY2sgbV9pbml0aWFsaXphdGlvbjsKICAgICBIYXNoTWFwPEJhc2ljQmxvY2sq
LCBMQmFzaWNCbG9jaz4gbV9ibG9ja3M7CiAgICAgCiAgICAgTFZhbHVlIG1fY2FsbEZyYW1lOwog
ICAgIExWYWx1ZSBtX3RhZ1R5cGVOdW1iZXI7CiAgICAgTFZhbHVlIG1fdGFnTWFzazsKLSAgICBM
VmFsdWUgbV9hYm9ydEZ1bmN0aW9uOwogICAgIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hl
ZExvY2FsT3BzOwogICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwpA
QCAtMTE2NSwxNSArMTU2NywyMSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1
ZT4gbV9qc1ZhbHVlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9ib29sZWFu
VmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOworICAg
IEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPiBtX3RpbWVUb0xpdmU7CiAgICAgCiAgICAgT3BlcmFu
ZHM8TFZhbHVlPiBtX2xvY2Fsc0Jvb2xlYW47CiAgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2Fs
czMyOwogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHM2NDsKICAgICAKKyAgICBPcGVyYW5k
czxWYWx1ZVNvdXJjZT4gbV92YWx1ZVNvdXJjZXM7CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7
CisgICAgRXhpdFRodW5rR2VuZXJhdG9yIG1fZXhpdFRodW5rR2VuZXJhdG9yOworICAgIAogICAg
IEFic3RyYWN0U3RhdGUgbV9zdGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKICAg
ICBCYXNpY0Jsb2NrKiBtX25leHRIaWdoQmxvY2s7CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0TG93
QmxvY2s7CisgICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7CiAgICAgTm9kZSogbV9ub2RlOwogICAg
IFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworT1NSRXhpdDo6T1NS
RXhpdCgKKyAgICBFeGl0S2luZCBleGl0S2luZCwgVmFsdWVGb3JtYXQgcHJvZmlsZVZhbHVlRm9y
bWF0LAorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBDb2Rl
T3JpZ2luIGNvZGVPcmlnaW4sCisgICAgaW50IGxhc3RTZXRPcGVyYW5kLCB1bnNpZ25lZCBudW1i
ZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpCisgICAgOiBPU1JFeGl0QmFz
ZShleGl0S2luZCwgY29kZU9yaWdpbikKKyAgICAsIG1fcHJvZmlsZVZhbHVlRm9ybWF0KHByb2Zp
bGVWYWx1ZUZvcm1hdCkKKyAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKKyAgICAs
IG1fY29kZU9yaWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDAp
CisgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGxhc3RTZXRPcGVyYW5kKQorICAgICwgbV92YWx1ZXMo
bnVtYmVyT2ZBcmd1bWVudHMsIG51bWJlck9mTG9jYWxzKQoreworfQorCitDb2RlTG9jYXRpb25K
dW1wIE9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxv
Y2spIGNvbnN0Cit7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoCisgICAgICAgIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KAorICAgICAgICAgICAgZnRsQ29kZUJsb2NrLT5nZXRKSVRDb2Rl
KCktPmZ0bCgpLT5leGl0VGh1bmtzKCkuZGF0YUxvY2F0aW9uKCkpICsKKyAgICAgICAgbV9wYXRj
aGFibGVDb2RlT2Zmc2V0KTsKK30KKwordm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKAor
ICAgIERGRzo6QmFzaWNCbG9jayogYmxvY2ssIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2ln
bmVkIG5vZGVJbmRleCwKKyAgICBjb25zdCBGb3JtYXR0ZWRWYWx1ZSAmdmFsdWUsIEV4aXRBcmd1
bWVudExpc3QmIGFyZ3VtZW50cykKK3sKKyAgICBOb2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RN
b3ZIaW50OworICAgIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnRO
b2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSk7CisKKyAgICBBU1NFUlQobm9kZS0+Y29k
ZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCisgICAgbV9jb2RlT3Jp
Z2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgaW50IG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxv
Y2FsKCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG92ZXJyaWRkZW5PcGVyYW5kOworICAgIAor
ICAgIC8vIElzIHRoZSB2YWx1ZSBmb3IgdGhpcyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBh
cmd1bWVudCB0byB0aGUgZXhpdCwgb3IgaXMKKyAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8gSWYg
aXQncyBhbiBhcmd1bWVudCBhbHJlYWR5LCB0aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsKKyAg
ICAvLyBvdGhlcndpc2UgYWRkIGFub3RoZXIgYXJndW1lbnQuCisgICAgaWYgKG1fdmFsdWVzW292
ZXJyaWRkZW5PcGVyYW5kXS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgRXhpdEFyZ3VtZW50IGFy
Z3VtZW50ID0gbV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdLmV4aXRBcmd1bWVudCgpOworICAg
ICAgICBhcmd1bWVudHNbZXhpdEFyZ3VtZW50LmFyZ3VtZW50KCldID0gdmFsdWUudmFsdWUoKTsK
KyAgICAgICAgbV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJn
dW1lbnQoCisgICAgICAgICAgICBleGl0QXJndW1lbnQud2l0aEZvcm1hdCh2YWx1ZS5mb3JtYXQo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50
ID0gYXJndW1lbnRzLnNpemUoKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlLnZhbHVlKCkp
OworICAgIG1fdmFsdWVzW21fbGFzdFNldE9wZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1l
bnQoCisgICAgICAgIEV4aXRBcmd1bWVudCh2YWx1ZS5mb3JtYXQoKSwgYXJndW1lbnQpKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGVExPU1JFeGl0X2gKKyNkZWZpbmUgRlRMT1NSRXhpdF9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVk
ZSAiREZHT1NSRXhpdEJhc2UuaCIKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5j
bHVkZSAiRlRMRXhpdEFyZ3VtZW50TGlzdC5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgor
I2luY2x1ZGUgIk1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJPcGVy
YW5kcy5oIgorI2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKKy8vIFRyYWNrcyBvbmUgT1NSIGV4aXQgc2l0ZSB3aXRoaW4gdGhlIEZU
TCBKSVQuIE9TUiBleGl0IGluIEZUTCB3b3JrcyBieSBkZWNvbnN0cnVjdGluZworLy8gdGhlIGNy
YXp5IHRoYXQgaXMgT1NSIGRvd24gdG8gc2ltcGxlIFNTQSBDRkcgcHJpbWl0aXZlcyB0aGF0IGFu
eSBjb21waWxlciBiYWNrZW5kCisvLyAoaW5jbHVkaW5nIG9mIGNvdXJzZSBMTFZNKSBjYW4gZ3Jv
ayBhbmQgZG8gbWVhbmluZ2Z1bCB0aGluZ3MgdG8uIEV4Y2VwdCBmb3IKKy8vIHdhdGNocG9pbnQt
YmFzZWQgZXhpdHMsIHdoaWNoIGhhdmVuJ3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQgKHNlZSB3ZWJr
aXQub3JnL2IvMTEzNjQ3KSwKKy8vIGFuIGV4aXQgaXMganVzdCBhIGNvbmRpdGlvbmFsIGJyYW5j
aCBpbiB0aGUgZW1pdHRlZCBjb2RlIHdoZXJlIG9uZSBkZXN0aW5hdGlvbiBpcyB0aGUKKy8vIGNv
bnRpbnVhdGlvbiBhbmQgdGhlIG90aGVyIGlzIGEgYmFzaWMgYmxvY2sgdGhhdCBwZXJmb3JtcyBh
IG5vLXJldHVybiB0YWlsLWNhbGwgdG8gYW4KKy8vIGV4aXQgdGh1bmsuIFRoaXMgdGh1bmsgdGFr
ZXMgYXMgaXRzIGFyZ3VtZW50cyB0aGUgbGl2ZSBub24tY29uc3RhbnQKKy8vIG5vdC1hbHJlYWR5
LWFjY291bnRlZC1mb3IgYnl0ZWNvZGUgc3RhdGUuIFRvIGFwcHJlY2lhdGUgaG93IHRoaXMgd29y
a3MgY29uc2lkZXIgdGhlCisvLyBmb2xsb3dpbmcgSmF2YVNjcmlwdCBwcm9ncmFtLCBhbmQgaXRz
IGxvd2VyaW5nIGRvd24gdG8gTExWTSBJUiBpbmNsdWRpbmcgdGhlIHJlbGV2YW50CisvLyBleGl0
czoKKy8vCisvLyBmdW5jdGlvbiBmb28obykgeworLy8gICAgIHZhciBhID0gby5hOyAvLyBwcmVk
aWN0ZWQgaW50CisvLyAgICAgdmFyIGIgPSBvLmI7CisvLyAgICAgdmFyIGMgPSBvLmM7IC8vIE5C
IHRoaXMgaXMgZGVhZAorLy8gICAgIGEgPSBhIHwgNTsgLy8gb3VyIGV4YW1wbGUgT1NSIGV4aXQ6
IG5lZWQgdG8gY2hlY2sgaWYgYSBpcyBhbiBpbnQKKy8vICAgICByZXR1cm4gYSArIGI7CisvLyB9
CisvLworLy8gSnVzdCBjb25zaWRlciB0aGUgImEgfCA1Ii4gSW4gdGhlIERGRyBJUiwgdGhpcyBs
b29rcyBsaWtlOgorLy8KKy8vIEJpdE9yKENoZWNrOkludDMyOkBhLCBJbnQzMjo1KQorLy8KKy8v
IFdoZXJlIEBhIGlzIHRoZSBub2RlIGZvciB0aGUgR2V0TG9jYWwgbm9kZSB0aGF0IGdldHMgdGhl
IHZhbHVlIG9mIHRoZSAnYScgdmFyaWFibGUuCisvLyBDb25jZXB0dWFsbHksIHRoaXMgbm9kZSBj
YW4gYmUgZnVydGhlciBicm9rZW4gZG93biB0byB0aGUgZm9sbG93aW5nIChub3RlIHRoYXQgdGhp
cworLy8gcGFydGljdWxhciBsb3dlcmluZyBuZXZlciBhY3R1YWxseSBoYXBwZW5zIC0gd2Ugc2tp
cCB0aGlzIHN0ZXAgYW5kIGdvIHN0cmFpZ2h0IHRvCisvLyBMTFZNIElSIC0gYnV0IGl0J3Mgc3Rp
bGwgdXNlZnVsIHRvIHNlZSB0aGlzKToKKy8vCisvLyBleGl0SWYoQGEgaXMgbm90IGludDMyKTsK
Ky8vIGNvbnRpbnVhdGlvbjsKKy8vCisvLyBXaGVyZSAnZXhpdElmKCknIGlzIGEgZnVuY3Rpb24g
dGhhdCB3aWxsIGV4aXQgaWYgdGhlIGFyZ3VtZW50IGlzIHRydWUsIGFuZAorLy8gJ2NvbnRpbnVh
dGlvbicgaXMgdGhlIHN0dWZmIHRoYXQgd2Ugd2lsbCBkbyBhZnRlciB0aGUgZXhpdElmKCkgY2hl
Y2suIChOb3RlIHRoYXQKKy8vIEZUTCByZWZlcnMgdG8gJ2V4aXRJZigpJyBhcyAnc3BlY3VsYXRl
KCknLCB3aGljaCBpcyBpbiBsaW5lIHdpdGggREZHIHRlcm1pbm9sb2d5LikKKy8vIFRoaXMgdGhl
biBnZXRzIGJyb2tlbiBkb3duIHRvIHRoZSBmb2xsb3dpbmcgTExWTSBJUiwgYXNzdW1pbmcgdGhh
dCAlMCBpcyB0aGUgTExWTQorLy8gdmFsdWUgY29ycmVzcG9uZGluZyB0byB2YXJpYWJsZSAnYScs
IGFuZCAlMSBpcyB0aGUgTExWTSB2YWx1ZSBmb3IgdmFyaWFibGUgJ2InOgorLy8KKy8vICAgJTIg
PSAuLi4gLy8gdGhlIHByZWRpY3RhdGUgY29ycmVzcG9uZGluZyB0byAnQGEgaXMgbm90IGludDMy
JworLy8gICBiciBpMSAlMiwgbGFiZWwgJTMsIGxhYmVsICU0CisvLyA7IDxsYWJlbD46MworLy8g
ICBjYWxsIHZvaWQgZXhpdFRodW5rMSglMCwgJTEpIC8vIHBhc3MgJ2EnIGFuZCAnYicsIHNpbmNl
IHRoZXkncmUgYm90aCBsaXZlLWluLWJ5dGVjb2RlCisvLyAgIHVucmVhY2hhYmxlCisvLyA7IDxs
YWJlbD46NAorLy8gICAuLi4gLy8gY29kZSBmb3IgdGhlIGNvbnRpbnVhdGlvbgorLy8KKy8vIFdo
ZXJlICdleGl0VGh1bmsxJyBpcyB0aGUgSVIgdG8gZ2V0IHRoZSBleGl0IHRodW5rIGZvciAqdGhp
cyogT1NSIGV4aXQuIEVhY2ggT1NSCisvLyBleGl0IHdpbGwgYXBwZWFyIHRvIExMVk0gdG8gaGF2
ZSBhIGRpc3RpbmN0IGV4aXQgdGh1bmsuCisvLworLy8gTm90ZSB0aGF0IHRoaXMgZGlkbid0IGhh
dmUgdG8gcGFzcyAnNScsICdvJywgb3IgJ2MnIHRvIHRoZSBleGl0IHRodW5rLiA1IGlzIGEKKy8v
IGNvbnN0YW50IGFuZCB0aGUgREZHIGFscmVhZHkga25vd3MgdGhhdCwgYW5kIGNhbiBhbHJlYWR5
IHRlbGwgdGhlIE9TUiBleGl0IG1hY2hpbmVyeQorLy8gd2hhdCB0aGF0IGNvbnRhbnQgaXMgYW5k
IHdoaWNoIGJ5dGVjb2RlIHZhcmlhYmxlcyAoaWYgYW55KSBpdCBuZWVkcyB0byBiZSBkcm9wcGVk
CisvLyBpbnRvLiBUaGlzIGlzIGNvbnZleWVkIHRvIHRoZSBleGl0IHN0YXRpY2FsbHksIHZpYSB0
aGUgT1NSRXhpdCBkYXRhIHN0cnVjdHVyZSBiZWxvdy4KKy8vIFNlZSB0aGUgY29kZSBmb3IgRXhp
dFZhbHVlIGZvciBkZXRhaWxzLiAnbycgaXMgYW4gYXJndW1lbnQsIGFuZCBhcmd1bWVudHMgYXJl
IGFsd2F5cworLy8gImZsdXNoZWQiIC0gaWYgeW91IG5ldmVyIGFzc2lnbiB0aGVtIHRoZW4gdGhl
aXIgdmFsdWVzIGFyZSBzdGlsbCBpbiB0aGUgYXJndW1lbnQKKy8vIHN0YWNrIHNsb3RzLCBhbmQg
aWYgeW91IGRvIGFzc2lnbiB0aGVtIHRoZW4gd2UgZWFnZXJseSBzdG9yZSB0aGVtIGludG8gdGhv
c2Ugc2xvdHMuCisvLyAnYycgaXMgZGVhZCBpbiBieXRlY29kZSwgYW5kIHRoZSBERkcga25vd3Mg
dGhpczsgd2Ugc3RhdGljYWxseSB0ZWxsIHRoZSBleGl0IHRodW5rCisvLyB0aGF0IGl0J3MgZGVh
ZCBhbmQgZG9uJ3QgaGF2ZSB0byBwYXNzIGFueXRoaW5nLiBUaGUgZXhpdCB0aHVuayB3aWxsICJp
bml0aWFsaXplIiBpdHMKKy8vIHZhbHVlIHRvIFVuZGVmaW5lZC4KKy8vCisvLyBUaGlzIGFwcHJv
YWNoIHRvIE9TUiBleGl0IGhhcyBhIG51bWJlciBvZiB2aXJ0dWVzOgorLy8KKy8vIC0gSXQgaXMg
YW4gZW50aXJlbHkgdW5zdXJwcmlzaW5nIHJlcHJlc2VudGF0aW9uIGZvciBhIGNvbXBpbGVyIHRo
YXQgYWxyZWFkeSBncm9rcworLy8gICBDRkctbGlrZSBJUnMgZm9yIEMtbGlrZSBsYW5ndWFnZXMu
IEFsbCBleGlzdGluZyBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zIGp1c3QKKy8vICAgd29y
ay4KKy8vCisvLyAtIEl0IGxlbmRzIGl0c2VsZiBuYXR1cmFsbHkgdG8gbW9kZXJuIGFwcHJvYWNo
ZXMgdG8gY29kZSBtb3Rpb24uIEZvciBleGFtcGxlLCB5b3UKKy8vICAgY291bGQgc2luayBvcGVy
YXRpb25zIGZyb20gYWJvdmUgdGhlIGV4aXQgdG8gYmVsb3cgaXQsIGlmIHlvdSBqdXN0IGR1cGxp
Y2F0ZSB0aGUKKy8vICAgb3BlcmF0aW9uIGludG8gdGhlIE9TUiBleGl0IGJsb2NrLiBUaGlzIGlz
IGJvdGggbGVnYWwgYW5kIGRlc2lyYWJsZS4gSXQgd29ya3MKKy8vICAgYmVjYXVzZSB0aGUgYmFj
a2VuZCBzZWVzIHRoZSBPU1IgZXhpdCBibG9jayBhcyBiZWluZyBubyBkaWZmZXJlbnQgdGhhbiBh
bnkgb3RoZXIsCisvLyAgIGFuZCBMTFZNIGFscmVhZHkgc3VwcG9ydHMgc2lua2luZyBpZiBpdCBz
ZWVzIHRoYXQgYSB2YWx1ZSBpcyBvbmx5IHBhcnRpYWxseSB1c2VkLgorLy8gICBIZW5jZSB0aGVy
ZSBleGlzdHMgYSB2YWx1ZSB0aGF0IGRvbWluYXRlcyB0aGUgZXhpdCBidXQgaXMgb25seSB1c2Vk
IGJ5IHRoZSBleGl0CisvLyAgIHRodW5rIGFuZCBub3QgYnkgdGhlIGNvbnRpbnVhdGlvbiwgc2lu
a2luZyBvdWdodCB0byBraWNrIGluIGZvciB0aGF0IHZhbHVlLgorLy8gICBIb2lzdGluZyBvcGVy
YXRpb25zIGZyb20gYmVsb3cgaXQgdG8gYWJvdmUgaXQgaXMgYWxzbyBwb3NzaWJsZSwgZm9yIHNp
bWlsYXIKKy8vICAgcmVhc29ucy4KKy8vCisvLyAtIFRoZSBuby1yZXR1cm4gdGFpbC1jYWxsIHRv
IHRoZSBPU1IgZXhpdCB0aHVuayBjYW4gYmUgc3ViamVjdGVkIHRvIHNwZWNpYWxpemVkCisvLyAg
IGNvZGUtc2l6ZSByZWR1Y3Rpb24gb3B0aW1pemF0aW9ucywgdGhvdWdoIHRoaXMgaXMgb3B0aW9u
YWwuIEZvciBleGFtcGxlLCBpbnN0ZWFkCisvLyAgIG9mIGFjdHVhbGx5IGVtaXR0aW5nIGEgY2Fs
bCBhbG9uZyB3aXRoIGFsbCB0aGF0IGdvZXMgd2l0aCBpdCAobGlrZSBwbGFjaW5nIHRoZQorLy8g
ICBhcmd1bWVudHMgaW50byBhcmd1bWVudCBwb3NpdGlvbiksIHRoZSBiYWNrZW5kIGNvdWxkIGNo
b29zZSB0byBzaW1wbHkgaW5mb3JtIHVzCisvLyAgIHdoZXJlIGl0IGhhZCBwbGFjZWQgdGhlIGFy
Z3VtZW50cyBhbmQgZXhwZWN0IHRoZSBjYWxsZWUgKGkuZS4gdGhlIGV4aXQgdGh1bmspIHRvCisv
LyAgIGZpZ3VyZSBpdCBvdXQgZnJvbSB0aGVyZS4gSXQgY291bGQgYWxzbyB0ZWxsIHVzIHdoYXQg
d2UgbmVlZCB0byBkbyB0byBwb3Agc3RhY2ssCisvLyAgIGFsdGhvdWdoIGFnYWluLCBpdCBkb2Vz
bid0IGhhdmUgdG87IGl0IGNvdWxkIGp1c3QgZW1pdCB0aGF0IGNvZGUgbm9ybWFsbHkuIFRob3Vn
aAorLy8gICB3ZSBkb24ndCBzdXBwb3J0IHRoaXMgeWV0LCB3ZSBjb3VsZDsgdGhlIG9ubHkgdGhp
bmcgdGhhdCB3b3VsZCBjaGFuZ2Ugb24gb3VyIGVuZAorLy8gICBpcyB0aGF0IHdlJ2QgbmVlZCBm
ZWVkYmFjayBmcm9tIHRoZSBiYWNrZW5kIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgYXJndW1l
bnRzCisvLyAgIGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJl
IGRvbmUgdG8gcG9wIHN0YWNrLiBUaGlzIHdvdWxkCisvLyAgIGludm9sdmUgc3dpdGNoaW5nIHRo
ZSBtX3ZhbHVlcyBhcnJheSB0byB1c2Ugc29tZXRoaW5nIG1vcmUgYWtpbiB0byBWYWx1ZVJlY292
ZXJ5CisvLyAgIHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IEV4aXRWYWx1ZSwgYWxiZWl0IHBvc3Np
Ymx5IHdpdGggc29tZSBoYWNrcyB0byBiZXR0ZXIKKy8vICAgdW5kZXJzdGFuZCB0aGUga2luZHMg
b2YgcGxhY2VzIHdoZXJlIHRoZSBMTFZNIGJhY2tlbmQgd291bGQgcHV0IHZhbHVlcy4KKy8vCisv
LyAtIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIGFsbG93IHRoZSBiYWNrZW5kIHRvIGRvIGl0cyBv
d24gZXhpdCBob2lzdGluZywgYnkgdXNpbmcKKy8vICAgaW50cmluc2ljcyAob3IgbWV0YS1kYXRh
LCBvciBzb21ldGhpbmcpIHRvIGluZm9ybSB0aGUgYmFja2VuZCB0aGF0IGl0J3Mgc2FmZSB0bwor
Ly8gICBtYWtlIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0SWYoKScgbW9yZSB0cnV0aHku
CisvLworLy8gLSBJdCBjb3VsZCBiZSBleHRlbmRlZCB0byBzdXBwb3J0IHdhdGNocG9pbnRzIChz
ZWUgd2Via2l0Lm9yZy9iLzExMzY0NykgYnkgbWFraW5nCisvLyAgIHRoZSBwcmVkaWNhdGUgcGFz
c2VkIHRvICdleGl0SWYoKScgYmUgYW4gaW50cmluc2ljIHRoYXQgdGhlIGJhY2tlbmQga25vd3Mg
dG8gYmUKKy8vICAgdHJ1ZSBhdCBjb21waWxlLXRpbWUuIFRoZSBiYWNrZW5kIGNvdWxkIHRoZW4g
dHVybiB0aGUgY29uZGl0aW9uYWwgYnJhbmNoIGludG8gYQorLy8gICByZXBsYWNlYWJsZSBqdW1w
LCBtdWNoIGxpa2UgdGhlIERGRyBkb2VzLgorCitzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JF
eGl0QmFzZSB7CisgICAgT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQsIFZhbHVlRm9ybWF0IHBy
b2ZpbGVWYWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKKyAgICAgICAg
Q29kZU9yaWdpbiwgaW50IGxhc3RTZXRPcGVyYW5kLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50
cywKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOworICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBtX2NvZGU7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRv
IHRoZSBleGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgorICAgIC8v
IElmIHRoYXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3
ZSdsbCBoYXZlIGEKKyAgICAvLyBtZXRob2Qgb2YgZ2V0dGluZyBhIHZhbHVlIHByb2ZpbGUuIE5v
dGUgdGhhdCBhbGwgb2YgdGhlIEV4aXRBcmd1bWVudCdzCisgICAgLy8gYXJlIGFscmVhZHkgYXdh
cmUgb2YgdGhpcyBwb3NzaWJsZSBvZmYtYnktb25lLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisg
ICAgLy8gY29ycmVjdCB0aGVtLgorICAgIFZhbHVlRm9ybWF0IG1fcHJvZmlsZVZhbHVlRm9ybWF0
OworICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92YWx1ZVByb2ZpbGU7CisgICAg
CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgCisgICAgLy8gT2Zmc2V0IHdpdGhp
biB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhpcyBleGl0LgorICAgIHVuc2lnbmVk
IG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKKyAgICAKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsK
KyAgICAKKyAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOworICAgIAorICAgIENvZGVM
b2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9j
aykgY29uc3Q7CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKAorICAgICAgICBERkc6
OkJhc2ljQmxvY2sqLCBERkc6Ok5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgs
CisgICAgICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT1NSRXhpdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRDb21w
aWxhdGlvbkluZm9faAorI2RlZmluZSBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvX2gKKworI2lu
Y2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRl
ICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0aW9u
SW5mbyB7CisgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCisgICAgICAgIDogbV90aHVua0Fk
ZHJlc3MoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBt
X3RodW5rTGFiZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV90aHVua0p1
bXA7CisgICAgTFZhbHVlIG1fdGh1bmtBZGRyZXNzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JF
eGl0Q29tcGlsYXRpb25JbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsZXIuaCIK
KworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9u
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworZXh0ZXJuICJDIiB2b2lk
KiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGV4aXRJRCkKK3sK
KyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiRlRMIE9TUiBFeGl0IENvbXBpbGF0
aW9uIik7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2so
KTsKKyAgICAKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoY29kZUJsb2NrLT5n
ZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKTsKKyAgICAKKyAgICBKU0dsb2JhbERhdGEq
IGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIE9TUkV4aXQmIGV4
aXQgPSBjb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZnRsKCktPm9zckV4aXRbZXhpdElEXTsKKyAg
ICAKKyAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhpdC5tX2NvZGVPcmlnaW4pOwor
ICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsKKyAgICAK
KyAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGZhaXJseSBlYXN5LCBldmVuIHRob3VnaCBpdCBpcyBo
b3JyaWJseSBncm9zcy4gV2Uga25vdyB0aGF0CisgICAgLy8gTExWTSB3b3VsZCBoYXZlIHBhc3Nl
cyB1cyBhbGwgb2YgdGhlIHN0YXRlIHZpYSBhcmd1bWVudHMuIFdlIGtub3cgaG93IHRvIGdldAor
ICAgIC8vIHRoZSBhcmd1bWVudHMuIEFuZCwgd2Uga25vdyBob3cgdG8gcG9wIHN0YWNrIGJhY2sg
dG8gdGhlIEpJVCBzdGFjayBmcmFtZSwgc29ydAorICAgIC8vIG9mOiB3ZSBrbm93IHRoYXQgaXQn
cyB0d28gZnJhbWVzIGJlbmVhdGggdXMuIFRoaXMgaXMgdGVycmlibGUgYW5kIEkgZmVlbAorICAg
IC8vIGFzaGFtZWQgb2YgaXQsIGJ1dCBpdCB3aWxsIHdvcmsgZm9yIG5vdy4KKyAgICAKKyAgICAK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29t
cGlsZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NS
RXhpdENvbXBpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRD
b21waWxlcl9oCisjZGVmaW5lIEZUTE9TUkV4aXRDb21waWxlcl9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKKy8vIFRha2VzIHRoZSBjYWxsIGZyYW1lIGFuZCB0aGUgaW5kZXggb2Yg
dGhlIGV4aXQsIGFuZCByZXR1cm5zIHRoZSBhZGRyZXNzIHRvCisvLyBqdW1wIHRvLgorZXh0ZXJu
ICJDIiB2b2lkKiBERkdfT1BFUkFUSU9OIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTdGF0ZSosIHVu
c2lnbmVkIGV4aXRJRCkgV1RGX0lOVEVSTkFMOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9TUkV4aXRDb21w
aWxlcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNp
b24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29y
a2luZyBjb3B5KQpAQCAtMTM1LDE5ICsxMzUsMjAgQEAgcHVibGljOgogICAgIExWYWx1ZSB6ZXJv
RXh0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRaRXh0KG1fYnVpbGRl
ciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGludENhc3QoTFZhbHVlIHZhbHVlLCBMVHlw
ZSB0eXBlKSB7IHJldHVybiBidWlsZEludENhc3QobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0K
ICAgICBMVmFsdWUgY2FzdFRvSW50MzIoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBpbnRDYXN0KHZh
bHVlLCBpbnQzMik7IH0KKyAgICBMVmFsdWUgaW50VG9QdHIoTFZhbHVlIHZhbHVlLCBMVHlwZSB0
eXBlKSB7IHJldHVybiBidWlsZEludFRvUHRyKG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAg
ICAgCiAgICAgTFZhbHVlIGdldChMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZExvYWQo
bV9idWlsZGVyLCByZWZlcmVuY2UpOyB9CiAgICAgTFZhbHVlIHNldChMVmFsdWUgdmFsdWUsIExW
YWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkU3RvcmUobV9idWlsZGVyLCB2YWx1ZSwgcmVm
ZXJlbmNlKTsgfQogICAgIAogICAgIExWYWx1ZSBsb2FkKFR5cGVkUG9pbnRlciBwb2ludGVyLCBM
VHlwZSByZWZUeXBlKQogICAgIHsKLSAgICAgICAgTFZhbHVlIHJlc3VsdCA9IGdldChidWlsZElu
dFRvUHRyKG1fYnVpbGRlciwgcG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7CisgICAgICAgIExW
YWx1ZSByZXN1bHQgPSBnZXQoaW50VG9QdHIocG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7CiAg
ICAgICAgIHBvaW50ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24ocmVzdWx0LCAqbV9oZWFw
cyk7CiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQogICAgIHZvaWQgc3RvcmUoTFZhbHVl
IHZhbHVlLCBUeXBlZFBvaW50ZXIgcG9pbnRlciwgTFR5cGUgcmVmVHlwZSkKICAgICB7Ci0gICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBzZXQodmFsdWUsIGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCBw
b2ludGVyLnZhbHVlKCksIHJlZlR5cGUpKTsKKyAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHNldCh2
YWx1ZSwgaW50VG9QdHIocG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7CiAgICAgICAgIHBvaW50
ZXIuaGVhcCgpLmRlY29yYXRlSW5zdHJ1Y3Rpb24ocmVzdWx0LCAqbV9oZWFwcyk7CiAgICAgfQog
ICAgIApAQCAtMjQ0LDEwICsyNDUsMTggQEAgcHVibGljOgogICAgIExWYWx1ZSBzZWxlY3QoTFZh
bHVlIHZhbHVlLCBMVmFsdWUgdGFrZW4sIExWYWx1ZSBub3RUYWtlbikgeyByZXR1cm4gYnVpbGRT
ZWxlY3QobV9idWlsZGVyLCB2YWx1ZSwgdGFrZW4sIG5vdFRha2VuKTsgfQogICAgIExWYWx1ZSBl
eHRyYWN0VmFsdWUoTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIGJ1aWxk
RXh0cmFjdFZhbHVlKG1fYnVpbGRlciwgYWdnVmFsLCBpbmRleCk7IH0KICAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgorICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlv
biwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVy
LCBmdW5jdGlvbiwgdmVjdG9yKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbikg
eyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24pOyB9CiAgICAgTFZhbHVlIGNh
bGwoTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSkgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVp
bGRlciwgZnVuY3Rpb24sIGFyZzEpOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9u
LCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIs
IGZ1bmN0aW9uLCBhcmcxLCBhcmcyKTsgfQogICAgIAorICAgIExWYWx1ZSBjb252ZXJ0VG9UYWls
Q2FsbChMVmFsdWUgY2FsbCkKKyAgICB7CisgICAgICAgIHNldFRhaWxDYWxsKGNhbGwsIElzVGFp
bENhbGwpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBqdW1w
KExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IGJ1aWxkQnIobV9idWlsZGVyLCBkZXN0aW5hdGlv
bik7IH0KICAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtl
biwgTEJhc2ljQmxvY2sgbm90VGFrZW4pIHsgYnVpbGRDb25kQnIobV9idWlsZGVyLCBjb25kaXRp
b24sIHRha2VuLCBub3RUYWtlbik7IH0KICAgICB2b2lkIHJldChMVmFsdWUgdmFsdWUpIHsgYnVp
bGRSZXQobV9idWlsZGVyLCB2YWx1ZSk7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFN0YXRlLmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTEpJ
VENvZGUuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
QEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAgIExNb2R1bGUgbW9kdWxlOwogICAgIExWYWx1
ZSBmdW5jdGlvbjsKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKKyAgICBWZWN0b3I8T1NS
RXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhpdDsKICAgICAKICAgICB2b2lkIGR1bXBTdGF0ZShj
b25zdCBjaGFyKiB3aGVuKTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExU
aHVua3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExU
aHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkZUTFRodW5rcy5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIE1h
Y3JvQXNzZW1ibGVyIGppdDsKKyAgICAKKyAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICogKEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBG
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBz
Y3JhdGNoQnVmZmVyID0gZ2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNp
emUpOworICAgIEVuY29kZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNW
YWx1ZSo+KHNjcmF0Y2hCdWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkK
KyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBidWZm
ZXIgKyBpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZB
cmd1bWVudFJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3Rl
cnMgKyBpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgICAgIGppdC5zdG9yZURvdWJsZShG
UFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAg
IH0KKyAgICAKKyAgICAvLyBUZWxsIEdDIG1hcmsgcGhhc2UgaG93IG11Y2ggb2YgdGhlIHNjcmF0
Y2ggYnVmZmVyIGlzIGFjdGl2ZSBkdXJpbmcgY2FsbC4KKyAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIEdQ
UkluZm86Om5vbkFyZ0dQUjEpOworICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbVB0cihzY3JhdGNoU2l6ZSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworCisgICAgLy8g
YXJndW1lbnQgMCBpcyBhbHJlYWR5IHRoZSBjYWxsIGZyYW1lLgorICAgIGppdC5tb3ZlKEdQUklu
Zm86Om5vbkFyZ0dQUjAsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgTWFjcm9Bc3NlbWJs
ZXI6OkNhbGwgZnVuY3Rpb25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAKKyAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQ
dHIoKSksIEdQUkluZm86Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3Jl
UHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJ
bmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZB
cmd1bWVudFJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OworICAgICAgICBqaXQubG9hZERvdWJsZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5H
UFIsIEZQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgfQorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kp
CisgICAgICAgIGppdC5sb2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lz
dGVyKGkpKTsKKyAgICAKKyAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Cisg
ICAgCisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFM
X1RIVU5LX0lEKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29tcGlsZUZU
TE9TUkV4aXQpOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBP
U1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExUaHVua3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMVGh1bmtz
X2gKKyNkZWZpbmUgRlRMVGh1bmtzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKKworbmFtZXNwYWNlIEZU
TCB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJh
dG9yKEpTR2xvYmFsRGF0YSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFRIdW5rc19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFZhbHVlRm9y
bWF0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkZUTDsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhbHVlRm9ybWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgSW52YWxpZFZhbHVlRm9ybWF0OgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdFVJbnQz
MjoKKyAgICAgICAgb3V0LnByaW50KCJVSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVmFsdWVGb3JtYXRCb29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRKU1ZhbHVlOgorICAgICAgICBvdXQu
cHJpbnQoIkpTVmFsdWUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRE
b3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgRlRMVmFsdWVGb3JtYXRfaAorI2RlZmluZSBGVExWYWx1ZUZvcm1hdF9o
CisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKworLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWlsYXIgdG8gRGF0YUZv
cm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0CisvLyB1bmxpa2UgRGF0YUZv
cm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gVUlu
dDMyIGFuZCBJbnQzMi4KKworZW51bSBWYWx1ZUZvcm1hdCB7CisgICAgSW52YWxpZFZhbHVlRm9y
bWF0LAorICAgIFZhbHVlRm9ybWF0SW50MzIsCisgICAgVmFsdWVGb3JtYXRVSW50MzIsCisgICAg
VmFsdWVGb3JtYXRCb29sZWFuLAorICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwKKyAgICBWYWx1ZUZv
cm1hdERvdWJsZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpGVEw6OlZhbHVl
Rm9ybWF0KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKworI2VuZGlmIC8vIEZUTFZhbHVlRm9ybWF0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
dm9pZCBWYWx1ZVNvdXJjZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAgICAgIG91dC5wcmlu
dCgiU291cmNlTm90U2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5KU1N0
YWNrOgorICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5KU1N0YWNrIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEludDMySW5KU1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIkludDMySW5K
U1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKKyAg
ICAgICAgb3V0LnByaW50KCJEb3VibGVJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVmFsdWVJbkxvY2FsczoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWxzIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMySW5Mb2NhbHM6CisgICAgICAgIG91dC5w
cmludCgiSW50MzJJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFu
SW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbkluTG9jYWxzIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIERvdWJsZUluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIkRv
dWJsZUluTG9jYWxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50c1NvdXJj
ZToKKyAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudHNTb3VyY2UiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU291cmNlSXNEZWFkOgorICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlzRGVh
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgb3V0LnBy
aW50KCJOb2RlKCIsIG5vZGUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgRlRMVmFsdWVTb3VyY2VfaAorI2RlZmluZSBGVExWYWx1ZVNvdXJjZV9oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2VudW0gVmFsdWVTb3VyY2VLaW5kIHsKKyAg
ICBTb3VyY2VOb3RTZXQsCisgICAgVmFsdWVJbkpTU3RhY2ssCisgICAgSW50MzJJbkpTU3RhY2ss
CisgICAgRG91YmxlSW5KU1N0YWNrLAorICAgIFZhbHVlSW5Mb2NhbHMsCisgICAgSW50MzJJbkxv
Y2FscywKKyAgICBCb29sZWFuSW5Mb2NhbHMsCisgICAgRG91YmxlSW5Mb2NhbHMsCisgICAgQXJn
dW1lbnRzU291cmNlLAorICAgIFNvdXJjZUlzRGVhZCwKKyAgICBIYXZlTm9kZQorfTsKKworY2xh
c3MgVmFsdWVTb3VyY2UgeworcHVibGljOgorICAgIFZhbHVlU291cmNlKCkKKyAgICAgICAgOiBt
X3ZhbHVlKFNvdXJjZU5vdFNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZh
bHVlU291cmNlKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgICAgICA6IG1fdmFsdWUoa2luZCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKERGRzo6Tm9kZSog
bm9kZSkKKyAgICAgICAgOiBtX3ZhbHVlKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KG5vZGUpKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgVmFsdWVTb3VyY2VLaW5kKCkga2luZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV92YWx1ZSA8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oSGF2ZU5v
ZGUpKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4obV92
YWx1ZSk7CisgICAgICAgIHJldHVybiBIYXZlTm9kZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gU291cmNlTm90U2V0OyB9CisgICAg
CisgICAgREZHOjpOb2RlKiBub2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gSGF2ZU5vZGUpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PERGRzo6Tm9kZSo+
KG1fdmFsdWUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICB1aW50cHRyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMVmFsdWVTb3VyY2VfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197216</attachid>
            <date>2013-04-10 00:16:18 -0700</date>
            <delta_ts>2013-04-10 12:29:22 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>142835</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OCBA
QAorMjAxMy0wNC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6b2Zmc2V0
T2YpOgorICAgICAgICAoTGlua0J1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgor
ICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpiZWxv
bmdzSW5NaW5pZmllZEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkZvcndhcmRSZXdpcmluZyk6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAoT1NSRXhpdCk6
CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpkb1NlYXJj
aEZvckZvcndhcmRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpP
U1JFeGl0QmFzZSk6CisgICAgICAgIChPU1JFeGl0QmFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVNvdXJj
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBmdGwvRlRM
QWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpmdW5j
dGlvblR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OnR5cGVPZik6CisgICAgICAgIChKU0M6OkZU
TDo6YnVpbGRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpzZXRUYWlsQ2FsbCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OndpdGhGb3JtYXQpOgorICAgICAgICAoSlND
OjpGVEw6OkV4aXRBcmd1bWVudDo6cmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExF
eGl0QXJndW1lbnRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwv
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6RXhpdFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAg
ICAgICAgKiBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTEV4aXRW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChGVEwpOgorICAgICAgICAoRXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OkV4aXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZGVhZCk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjppbkpTU3RhY2spOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppbkpT
U3RhY2tBc0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aW5KU1N0YWNr
QXNEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6Y29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0VmFsdWU6OmtpbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNE
ZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzSW5KU1N0YWNrU29tZWhvdyk6
CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0
ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpub1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6RlRMOjppbnQzMlZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjp1SW50
MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6Ym9vbGVhblZhbHVlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpqc1ZhbHVlVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OmRvdWJsZVZhbHVlKToK
KyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3MpOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpleGl0VGh1bmtzKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgor
ICAgICAgICAoSklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2Vy
REZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cmFuc2ZlckFuZENoZWNrQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoTG93
ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TW92SGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVab21i
aWVIaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhp
bnRBbmRDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVB
ZGQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVUludDMyVG9OdW1iZXIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUZvcndhcmQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpiYWNrd2FyZFR5cGVDaGVjayk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmZvcndhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjphcHBlbmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpsb3dJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dXNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjp0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFs
aXphdGlvbkJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6b2JzZXJ2
ZU1vdkhpbnQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAo
SlNDOjpGVEw6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2gpOgorICAgICAgICAoSlND
OjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKE9TUkV4aXQpOgorICAgICAg
ICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Q29tcGlsYXRpb25JbmZvOjpPU1JFeGl0Q29t
cGlsYXRpb25JbmZvKToKKyAgICAgICAgKE9TUkV4aXRDb21waWxhdGlvbkluZm8pOgorICAgICAg
ICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvUHRy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6c3RvcmUpOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y29udmVydFRvVGFpbENh
bGwpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAoU3RhdGUpOgorICAgICAg
ICAqIGZ0bC9GVExUaHVua3MuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExWYWx1
ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorICAgICAg
ICAqIGZ0bC9GVExWYWx1ZVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTFZhbHVl
U291cmNlLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKFZhbHVlU291cmNlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlZhbHVlU291cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNv
dXJjZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6bm9kZSk6
CisKIDIwMTMtMDQtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIHByb3ZpZGUgdXRpbGl0aWVzIGZvciBjb21tb24gT1NS
IGV4aXQgdGFza3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKS5tX29mZnNl
dDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBvZmZzZXRPZihQYXRjaGFibGVKdW1wIGp1bXApCisg
ICAgeworICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQoanVtcC5tX2p1bXAubV9sYWJlbCkubV9v
ZmZzZXQ7CisgICAgfQorCiAgICAgLy8gVXBvbiBjb21wbGV0aW9uIG9mIGFsbCBwYXRjaGluZyAn
RklOQUxJWkVfQ09ERSgpJyBzaG91bGQgYmUgY2FsbGVkIG9uY2UgdG8KICAgICAvLyBjb21wbGV0
ZSBnZW5lcmF0aW9uIG9mIHRoZSBjb2RlLiBBbHRlcm5hdGl2ZWx5LCBjYWxsCiAgICAgLy8gZmlu
YWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYgeW91IGhhdmUgeW91ciBv
d24gd2F5IG9mCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDggQEAg
dm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0KKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRI
ZWFkLmFyZ3VtZW50KGkpLnNldChTcGVjSW50MzIpOwogICAgICAgICBlbHNlIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDcgKzM2Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZWdpc3RlckZvckluZGV4W251bWJlck9m
QXJndW1lbnRSZWdpc3RlcnNdID0geyBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1IH07CiAgICAg
ICAgIHJldHVybiByZWdpc3RlckZvckluZGV4W2luZGV4XTsKICAgICB9Ci0KKyAgICAKICAgICBz
dGF0aWMgdW5zaWduZWQgdG9JbmRleChHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgQVNTRVJU
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
NyBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgY2FzZSBQ
aGFudG9tQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlQoIW5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyh0eXBlKSAmJiAhbmVlZHNPU1JG
b3J3YXJkUmV3aXJpbmcodHlwZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQ4
MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yODcsNiArMjg3LDI1IEBAIGlubGluZSBOb2RlRmxhZ3MgZGVmYXVsdEZsYWdz
KE5vZGVUeXBlIG8KICAgICB9CiB9CiAKK2lubGluZSBib29sIG5lZWRzT1NSQmFja3dhcmRSZXdp
cmluZyhOb2RlVHlwZSBvcCkKK3sKKyAgICByZXR1cm4gb3AgPT0gVUludDMyVG9OdW1iZXI7Cit9
CisKK2lubGluZSBib29sIG5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9wKQorewor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBGb3J3
YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE0ODA0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDE1ICszNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4
KQotICAgIDogbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCisgICAgOiBPU1JFeGl0QmFz
ZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKKyAgICAsIG1fanNWYWx1ZVNvdXJjZShq
c1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwg
bV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5tX2NvZGVP
cmlnaW5Gb3JPU1IpCi0gICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShtX2NvZGVPcmln
aW4pCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fd2F0Y2hw
b2ludEluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAsIG1f
a2luZChraW5kKQotICAgICwgbV9jb3VudCgwKQogICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1J
bmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewpA
QCAtNzMsNTcgKzcxLDE0IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYg
bGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGxhYmVs
KTsKIH0KIAotYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sp
Ci17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2st
Pm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVu
dEV4aXRTaXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBGcmVxdWVudEV4
aXRTaXRlIGV4aXRTaXRlOwotICAgIAotICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBl
ZCkgewotICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0
ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOwotICAgICAg
ICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBh
cnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0
ZShtX2tpbmQpOwotICAgIH0gZWxzZQotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNp
dGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKLSAg
ICAKLSAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRG
cmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKLX0KLQogdm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9k
ZUluZGV4LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewotICAgIC8vIENo
ZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3IgdGhlIHBy
ZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9y
aWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3ZlcnkuCi0gICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIXZhbHVlUmVjb3ZlcnkKLSAgICAgICAgJiYgIWN1
cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBOb2RlKiBzZXRMb2NhbCA9
IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2Nh
bCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChz
ZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
OwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBi
eXRlY29kZSBpbnN0cnVjdGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAotICAgIC8v
IG9uIHRoaXMgbm9kZS4KLSAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAx
OwotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIE5vZGUqIGxhc3RNb3ZIaW50ID0gMDsKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sgPT0gYmxvY2stPnNpemUoKSkgewot
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFuZCBkbyBh
IGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZlCi0gICAgICAgICAgICAvLyBiZWNh
dXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5kIGl0J3Mg
YWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVjb2RlLgot
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwot
ICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0g
Y3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0TW92SGludCA9IG5vZGU7Ci0gICAgICAgIGlm
IChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAgIH0KLSAgICAKKyAgICBOb2Rl
KiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGRvU2VhcmNoRm9yRm9yd2FyZENv
bnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSk7
CisKICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdp
bik7CisgICAgCiAgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAKICAg
ICBpZiAoIXZhbHVlUmVjb3ZlcnkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdD
b21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQUklu
Zm8uaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlUmVj
b3ZlcnlPdmVycmlkZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAi
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODQsNyArODUsNyBAQCBwcml2YXRl
OgogLy8KIC8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3Vs
YXRpdmUgcGF0aCBieQogLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9TUkV4
aXQgeworc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE9TUkV4aXQo
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIFNw
ZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5k
ZXggPSBVSU5UX01BWCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsK
QEAgLTk0LDIxICs5NSwxMCBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAKICAgICB1bnNpZ25lZCBtX3Bh
dGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgQ29k
ZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICAKICAgICB1bnNpZ25lZCBt
X3JlY292ZXJ5SW5kZXg7CiAgICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXg7CiAgICAgCi0g
ICAgRXhpdEtpbmQgbV9raW5kOwotICAgIHVpbnQzMl90IG1fY291bnQ7Ci0gICAgCi0gICAgYm9v
bCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9j
aywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIGlmICghbV9j
b3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVT
bG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIH0KLQogICAgIHZvaWQg
c2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNv
bnN0OwogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxv
Y2sqKSBjb25zdDsKQEAgLTEyMCw5ICsxMTAsNiBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgaW50
IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgCiAgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVycmlk
ZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb25zaWRl
ckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENv
ZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwogfTsKIAogc3RydWN0IFNwZWN1bGF0aW9uRmFp
bHVyZURlYnVnSW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIE9TUkV4aXRCYXNlOjpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0
PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0
aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOworICAgIAor
ICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgeworICAgICAgICAvLyBDb3VudCB0
aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxv
Y2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOworICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkg
ZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCisg
ICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOworICAgIH0gZWxzZQor
ICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKKyAgICAKKyAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRl
KTsKK30KKworYm9vbCBPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigK
KyAgICBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAorICAgIE5vZGUqJiBub2RlLCBOb2RlKiYgbGFz
dE1vdkhpbnQpCit7CisgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBp
cyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKKyAgICAvLyBTZXRMb2Nh
bCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFs
dWVSZWNvdmVyeS4KKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAmJiAhaGFzVmFs
dWVSZWNvdmVyeQorICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7
CisgICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbiA9
PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhl
IGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uLiBBbHNvIHRyYWNr
IHRoZSBsYXN0IG1vdiBoaW50CisgICAgLy8gb24gdGhpcyBub2RlLgorICAgIHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7CisgICAgbm9kZSA9IDA7CisgICAgbGFzdE1vdkhp
bnQgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGluZGV4SW5CbG9jayA9PSBibG9j
ay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlubGluZSByZXR1cm4uIEdp
dmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBUaGlzIGlzIHNhZmUKKyAgICAg
ICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMgaXRzIG93biBieXRlY29kZSBp
bmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bworICAgICAgICAgICAgLy8gcmVleGVjdXRlIHRo
YXQgYnl0ZWNvZGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBub2RlID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgIGlmIChub2RlLT5jb250YWluc01vdkhpbnQoKSAm
JiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKKyAgICAgICAgICAgIGxhc3RNb3ZIaW50
ID0gbm9kZTsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaW5kZXhJbkJsb2NrKys7Cisg
ICAgfQorICAgIAorICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR09TUkV4aXRCYXNlX2gKKyNkZWZpbmUgREZHT1NSRXhpdEJhc2VfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFByb3ZpZGVzIGZvciB0aGUgT1NSIGV4aXQgcHJv
ZmlsaW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gYmV0d2VlbiB0aGUgREZHCisvLyBh
bmQgdGhlIEZUTC4KKworc3RydWN0IE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0QmFzZShFeGl0
S2luZCBraW5kLCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAg
ICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUo
b3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVp
bnQzMl90IG1fY291bnQ7CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZTsKKworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAg
eworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3VudGFibGUobV9raW5kKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2ZpbGVkQ29kZUJsb2NrKTsK
KyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZlcnNp
b24gaXMgcmVhbGx5IG5lZWRlZC4KKyAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNp
b24oCisgICAgICAgIEJhc2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9k
ZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgICAgIE5vZGUqJiBuZXh0QkNOb2Rl
LCBOb2RlKiYgbGFzdE1vdkhpbnQpOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdEJhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJS
ZXBhdGNoQnVmZmVyLmgiCkBAIC01NCwyMCArNTUsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4
ZWNTdGF0ZSogZXhlYykKICAgICB1aW50MzJfdCBleGl0SW5kZXggPSBnbG9iYWxEYXRhLT5vc3JF
eGl0SW5kZXg7CiAgICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5k
ZmcoKS0+b3NyRXhpdFtleGl0SW5kZXhdOwogICAgIAotICAgIC8vIE1ha2Ugc3VyZSBhbGwgY29k
ZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJVCBjb21waWxlZC4gVGhpcyBpcyBuZWNlc3Nhcnkg
c2luY2UKLSAgICAvLyB3ZSBtYXkgb3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sgZXZlbiBiZWZv
cmUgaXQgaGFkIGV2ZXIgYmVlbiBjb21waWxlZCBieSB0aGUKLSAgICAvLyBKSVQsIGJ1dCBvdXIg
T1NSIGV4aXQgaW5mcmFzdHJ1Y3R1cmUgY3VycmVudGx5IG9ubHkgd29ya3MgaWYgdGhlIHRhcmdl
dCBvZiB0aGUKLSAgICAvLyBPU1IgZXhpdCBpcyBKSVQgY29kZS4gVGhpcyBjb3VsZCBiZSBjaGFu
Z2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxhcmx5Ci0gICAgLy8gaGFyZCBhYm91
dCBkb2luZyBhbiBPU1IgZXhpdCBpbnRvIHRoZSBpbnRlcnByZXRlciwgYnV0IGZvciBub3cgdGhp
cyBzZWVtcyB0byBtYWtlCi0gICAgLy8gc2Vuc2UgaW4gdGhhdCBpZiB3ZSdyZSBPU1IgZXhpdGlu
ZyBmcm9tIGlubGluZWQgY29kZSBvZiBhIERGRyBjb2RlIGJsb2NrLCB0aGVuCi0gICAgLy8gcHJv
YmFibHkgaXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0aW5nIGludG8g
aXMgaG90LiBFdmVuIG1vcmUKLSAgICAvLyBpbnRlcmVzdGluZ2x5LCBzaW5jZSB0aGUgY29kZSB3
YXMgaW5saW5lZCwgaXQgbWF5IG5ldmVyIG90aGVyd2lzZSBnZXQgSklUCi0gICAgLy8gY29tcGls
ZWQgc2luY2UgdGhlIGFjdCBvZiBpbmxpbmluZyBpdCBtYXkgZW5zdXJlIHRoYXQgaXQgb3RoZXJ3
aXNlIG5ldmVyIHJ1bnMuCi0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1f
Y29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxl
LmdldCgpKQotICAgICAgICAgICAgLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KQot
ICAgICAgICAgICAgLT5qaXRDb21waWxlKGV4ZWMpOwotICAgIH0KKyAgICBwcmVwYXJlQ29kZU9y
aWdpbkZvck9TUkV4aXQoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIAogICAgIC8vIENvbXB1dGUg
dGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFu
ZHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorewor
ICAgIGZvciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUu
Z2V0KCkpCisgICAgICAgICAgICAtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpCisg
ICAgICAgICAgICAtPmppdENvbXBpbGUoZXhlYyk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdFByZXBhcmF0aW9u
X2gKKyNkZWZpbmUgREZHT1NSRXhpdFByZXBhcmF0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKy8vIE1ha2Ugc3VyZSBhbGwgY29kZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJ
VCBjb21waWxlZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UKKy8vIHdlIG1heSBvcHQgdG8gaW5s
aW5lIGEgY29kZSBibG9jayBldmVuIGJlZm9yZSBpdCBoYWQgZXZlciBiZWVuIGNvbXBpbGVkIGJ5
IHRoZQorLy8gSklULCBidXQgb3VyIE9TUiBleGl0IGluZnJhc3RydWN0dXJlIGN1cnJlbnRseSBv
bmx5IHdvcmtzIGlmIHRoZSB0YXJnZXQgb2YgdGhlCisvLyBPU1IgZXhpdCBpcyBKSVQgY29kZS4g
VGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxhcmx5
CisvLyBoYXJkIGFib3V0IGRvaW5nIGFuIE9TUiBleGl0IGludG8gdGhlIGludGVycHJldGVyLCBi
dXQgZm9yIG5vdyB0aGlzIHNlZW1zIHRvIG1ha2UKKy8vIHNlbnNlIGluIHRoYXQgaWYgd2UncmUg
T1NSIGV4aXRpbmcgZnJvbSBpbmxpbmVkIGNvZGUgb2YgYSBERkcgY29kZSBibG9jaywgdGhlbgor
Ly8gcHJvYmFibHkgaXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0aW5n
IGludG8gaXMgaG90LiBFdmVuIG1vcmUKKy8vIGludGVyZXN0aW5nbHksIHNpbmNlIHRoZSBjb2Rl
IHdhcyBpbmxpbmVkLCBpdCBtYXkgbmV2ZXIgb3RoZXJ3aXNlIGdldCBKSVQKKy8vIGNvbXBpbGVk
IHNpbmNlIHRoZSBhY3Qgb2YgaW5saW5pbmcgaXQgbWF5IGVuc3VyZSB0aGF0IGl0IG90aGVyd2lz
ZSBuZXZlciBydW5zLgordm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoQ29kZU9yaWdp
biBjb2RlT3JpZ2luKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFeGl0UHJlcGFyYXRpb25faAorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9
IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3Vy
Y2UuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0gICAgICAgIGlmIChp
c0FycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNDZWxsU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNrKTsKICAgICAgICAgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIFZhbHVl
U291cmNlKEJvb2xlYW5JbkpTU3RhY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNDgwNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5vcCgp
ID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBpZiAobm9kZSAmJiBuZWVkc09TUkJh
Y2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKICAgICAgICAgICAgICAgICBNaW5pZmllZElE
IGlkID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3Rh
bnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIGNvZGVCbG9jaywgZ3JhcGguYXQoaWQpKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsNiArMjU3LDcgQEAgdm9pZCBW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZUFzSW50MzJJRCA9IGlkOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIW5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJ
KHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2
aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxMSBAQCBzdGF0aWMgaW5saW5l
IExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByCiB7CiAgICAgcmV0dXJuIExMVk1GdW5jdGlvblR5
cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgcGFyYW1Db3VudCwgdmFyaWFkaWNpdHkgPT0gVmFy
aWFkaWMpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVHlwZSBm
dW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBW
YXJpYWRpY2l0eSB2YXJpYWRpY2l0eSkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVy
blR5cGUsIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpLCB2YXJpYWRpY2l0eSk7Cit9CiBz
dGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBWYXJpYWRp
Y2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQogewogICAgIHJldHVybiBmdW5jdGlvblR5
cGUocmV0dXJuVHlwZSwgMCwgMCwgdmFyaWFkaWNpdHkpOwpAQCAtOTgsNiArMTAzLDggQEAgc3Rh
dGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcgogICAgIHJldHVybiBmdW5jdGlv
blR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgMiwgdmFyaWFkaWNpdHkpOwogfQogCitzdGF0
aWMgaW5saW5lIExUeXBlIHR5cGVPZihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIExMVk1UeXBlT2Yo
dmFsdWUpOyB9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWRLaW5kSUQoY29uc3QgY2hhciog
c3RyaW5nKSB7IHJldHVybiBMTFZNR2V0TURLaW5kSUQoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7
IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgdW5z
aWduZWQgbGVuZ3RoKSB7IHJldHVybiBMTFZNTURTdHJpbmcoc3RyaW5nLCBsZW5ndGgpOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJu
IG1kU3RyaW5nKHN0cmluZywgc3RybGVuKHN0cmluZykpOyB9CkBAIC0xNTUsNiArMTYyLDExIEBA
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICByZXR1cm4g
TExWTUJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgbnVtQXJncywgIiIpOwogfQor
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVmFsdWUgYnVpbGRDYWxsKExC
dWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
KQoreworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5iZWdp
bigpLCB2ZWN0b3Iuc2l6ZSgpKTsKK30KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCiB7CiAgICAgcmV0dXJuIGJ1aWxkQ2Fs
bChidWlsZGVyLCBmdW5jdGlvbiwgMCwgMCk7CkBAIC0xNjgsNiArMTgwLDggQEAgc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIAogICAgIExWYWx1ZSBhcmdzW10gPSB7IGFy
ZzEsIGFyZzIgfTsKICAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdz
LCAyKTsKIH0KK2VudW0gVGFpbENhbGxNb2RlIHsgSXNOb3RUYWlsQ2FsbCwgSXNUYWlsQ2FsbCB9
Oworc3RhdGljIGlubGluZSB2b2lkIHNldFRhaWxDYWxsKExWYWx1ZSBjYWxsLCBUYWlsQ2FsbE1v
ZGUgbW9kZSkgeyBMTFZNU2V0VGFpbENhbGwoY2FsbCwgbW9kZSA9PSBJc1RhaWxDYWxsKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIExMVk1CdWlsZEV4dHJhY3RW
YWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0
YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBMTFZNQnVpbGRTZWxlY3QoYnVpbGRlciwg
Y29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4sICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRCcihMQnVpbGRlciBidWlsZGVyLCBMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyByZXR1
cm4gTExWTUJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMQ0FyZ3VtZW50R2V0dGVyX2gKKyNkZWZpbmUgRlRM
Q0FyZ3VtZW50R2V0dGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMgY3VycmVudGx5IG9ubHkgdW5kZXJzdGFu
ZHMgaG93IHRvIGdldCBhcmd1bWVudHMgb24gWDg2LTY0IGNkZWNsLgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBSZWdpc3RlcktpbmQ+Citib29sIGlzQXJndW1lbnRSZWdpc3RlcihSZWdpc3RlcktpbmQ6
OlJlZ2lzdGVyVHlwZSByZWcpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFJlZ2lz
dGVyS2luZDo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGlmIChS
ZWdpc3RlcktpbmQ6OnRvQXJndW1lbnRSZWdpc3RlcihpKSA9PSByZWcpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjbGFzcyBDQXJndW1l
bnRHZXR0ZXIgeworcHVibGljOgorICAgIC8vIFBlZWsgb2Zmc2V0IGlzIHRoZSBudW1iZXIgb2Yg
dGhpbmdzIG9uIHRoZSBzdGFjayBiZWxvdyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgLy8gSXQg
d2lsbCBiZSAxIGlmIHlvdSBoYXZlbid0IHB1c2hlZCBvciBwb3BwZWQgYWZ0ZXIgdGhlIGNhbGw7
IGkuZS4gdGhlIG9ubHkKKyAgICAvLyB0aGluZyBpcyB0aGUgcmV0dXJuIGFkZHJlc3MuCisgICAg
Q0FyZ3VtZW50R2V0dGVyKE1hY3JvQXNzZW1ibGVyJiBqaXQsIGludCBwZWVrT2Zmc2V0ID0gMSkK
KyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV9wZWVrT2Zmc2V0KHBlZWtPZmZzZXQp
CisgICAgICAgICwgbV9ncHJBcmd1bWVudEluZGV4KDApCisgICAgICAgICwgbV9mcHJBcmd1bWVu
dEluZGV4KDApCisgICAgICAgICwgbV9zdGFja0FyZ3VtZW50SW5kZXgoMCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgbG9hZE5leHQ4KEdQUlJlZyBkZXN0aW5hdGlvbikKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghaXNBcmd1bWVudFJlZ2lzdGVyPEdQUkluZm8+KGRlc3RpbmF0aW9uKSk7
CisgICAgICAgIGlmIChtX2dwckFyZ3VtZW50SW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3Vt
ZW50UmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnRvQXJndW1l
bnRSZWdpc3RlcihtX2dwckFyZ3VtZW50SW5kZXgrKyksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDgobmV4
dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0
MzIoR1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0FyZ3VtZW50
UmVnaXN0ZXI8R1BSSW5mbz4oZGVzdGluYXRpb24pKTsKKyAgICAgICAgaWYgKG1fZ3ByQXJndW1l
bnRJbmRleCA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZ3ByQXJndW1lbnRJ
bmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRpb24p
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0NjQoR1BSUmVnIGRlc3RpbmF0aW9uKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0FyZ3VtZW50UmVnaXN0ZXI8R1BSSW5mbz4oZGVzdGlu
YXRpb24pKTsKKyAgICAgICAgaWYgKG1fZ3ByQXJndW1lbnRJbmRleCA8IEdQUkluZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZ3ByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5s
b2FkNjQobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWROZXh0RG91YmxlKEZQUlJlZyBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VCgKKyAgICAgICAgICAgICFpc0FyZ3VtZW50UmVnaXN0ZXI8RlBSSW5mbz4oZGVzdGluYXRpb24p
CisgICAgICAgICAgICBkZXN0aW5hdGlvbiA9PSBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAg
ICAgICAKKyAgICAgICAgaWYgKG1fZnByQXJndW1lbnRJbmRleCA8IEZQUkluZm86Om51bWJlck9m
QXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZnByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2pp
dC5sb2FkRG91YmxlKG5leHRBZGRyZXNzKCksIGRlc3RpbmF0aW9uKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgbmV4dEFkZHJlc3MoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKG1fcGVla09mZnNl
dCArIG1fc3RhY2tBcmd1bWVudEluZGV4KyspICogc2l6ZW9mKHZvaWQqKSk7CisgICAgfQorICAg
ICAgICAgICAgCisgICAgTWFjcm9Bc3NlbWJsZXImIG1faml0OworICAgIHVuc2lnbmVkIG1fcGVl
a09mZnNldDsKKyAgICB1bnNpZ25lZCBtX2dwckFyZ3VtZW50SW5kZXg7CisgICAgdW5zaWduZWQg
bV9mcHJBcmd1bWVudEluZGV4OworICAgIHVuc2lnbmVkIG1fc3RhY2tBcmd1bWVudEluZGV4Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExDQXJndW1lbnRHZXR0ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVu
dC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
RlRMIHsKKwordm9pZCBFeGl0QXJndW1lbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoImFyZyIsIGFyZ3VtZW50KCksICIgYXMgIiwgZm9ybWF0KCkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdEFyZ3VtZW50X2gKKyNk
ZWZpbmUgRlRMRXhpdEFyZ3VtZW50X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK3N0cnVjdCBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiB7CisgICAgVmFsdWVGb3JtYXQg
Zm9ybWF0OworICAgIHVuc2lnbmVkIGFyZ3VtZW50OworfTsKKworY2xhc3MgRXhpdEFyZ3VtZW50
IHsKK3B1YmxpYzoKKyAgICBFeGl0QXJndW1lbnQoKQorICAgIHsKKyAgICAgICAgbV9yZXByZXNl
bnRhdGlvbi5mb3JtYXQgPSBJbnZhbGlkVmFsdWVGb3JtYXQ7CisgICAgfQorICAgIAorICAgIEV4
aXRBcmd1bWVudChWYWx1ZUZvcm1hdCBmb3JtYXQsIHVuc2lnbmVkIGFyZ3VtZW50KQorICAgIHsK
KyAgICAgICAgbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPSBmb3JtYXQ7CisgICAgICAgIG1fcmVw
cmVzZW50YXRpb24uYXJndW1lbnQgPSBhcmd1bWVudDsKKyAgICB9CisgICAgCisgICAgZXhwbGlj
aXQgRXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9u
KQorICAgIHsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbiA9IHJlcHJlc2VudGF0aW9uOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcmVzZW50
YXRpb24uZm9ybWF0ID09IEludmFsaWRWYWx1ZUZvcm1hdDsgfQorICAgIAorICAgIFZhbHVlRm9y
bWF0IGZvcm1hdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoKnRoaXMpOworICAgICAg
ICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQ7CisgICAgfQorICAgIAorICAgIHVuc2ln
bmVkIGFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAg
ICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmFyZ3VtZW50OworICAgIH0KKyAgICAKKyAgICBF
eGl0QXJndW1lbnQgd2l0aEZvcm1hdChWYWx1ZUZvcm1hdCBmb3JtYXQpCisgICAgeworICAgICAg
ICByZXR1cm4gRXhpdEFyZ3VtZW50KGZvcm1hdCwgYXJndW1lbnQoKSk7CisgICAgfQorICAgIAor
ICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHJlcHJlc2VudGF0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZXByZXNlbnRhdGlvbjsgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlv
biBtX3JlcHJlc2VudGF0aW9uOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0QXJndW1lbnRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudEZvck9wZXJh
bmQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CisKK3ZvaWQgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2V4aXRBcmd1bWVudCwgIiBmb3IgciIsIG9w
ZXJhbmQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZF9oCisjZGVmaW5lIEZU
TEV4aXRBcmd1bWVudEZvck9wZXJhbmRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEV4aXRBcmd1bWVudEZvck9w
ZXJhbmQgeworcHVibGljOgorICAgIEV4aXRBcmd1bWVudEZvck9wZXJhbmQoKQorICAgICAgICA6
IG1fb3BlcmFuZCgtMSkKKyAgICB7CisgICAgfQorICAgIAorICAgIEV4aXRBcmd1bWVudEZvck9w
ZXJhbmQoRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCwgaW50IG9wZXJhbmQpCisgICAgICAgIDog
bV9leGl0QXJndW1lbnQoZXhpdEFyZ3VtZW50KQorICAgICAgICAsIG1fb3BlcmFuZChvcGVyYW5k
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhbV9leGl0QXJndW1lbnQ7IH0KKyAgICAKKyAgICBjb25zdCBFeGl0QXJndW1lbnQmIGV4aXRB
cmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdEFyZ3VtZW50OyB9CisgICAgaW50IG9wZXJh
bmQoKSBjb25zdCB7IHJldHVybiBtX29wZXJhbmQ7IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhpdEFyZ3VtZW50IG1fZXhp
dEFyZ3VtZW50OworICAgIGludCBtX29wZXJhbmQ7Cit9OworCitpbmxpbmUgYm9vbCBsZXNzZXJB
cmd1bWVudEluZGV4KEV4aXRBcmd1bWVudCBhLCBFeGl0QXJndW1lbnQgYikKK3sKKyAgICByZXR1
cm4gYS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpIDwgYi5leGl0QXJndW1lbnQoKS5hcmd1bWVu
dCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudExpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudExpc3QuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJndW1lbnRMaXN0
X2gKKyNkZWZpbmUgRlRMRXhpdEFyZ3VtZW50TGlzdF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZv
cm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9u
cy5oIgorI2luY2xkdWUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCit0eXBlZGVmIFZlY3RvcjxMVmFsdWUsIDE2PiBFeGl0QXJndW1lbnRMaXN0Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KworI2VuZGlmIC8vIEZUTEV4aXRBcmd1bWVudExpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6REZHOworCitFeGl0VGh1bmtHZW5l
cmF0b3I6OkV4aXRUaHVua0dlbmVyYXRvcihTdGF0ZSYgc3RhdGUpCisgICAgOiBDQ2FsbEhlbHBl
cnMoJnN0YXRlLmdyYXBoLm1fZ2xvYmFsRGF0YSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2spCit7
Cit9CisKK0V4aXRUaHVua0dlbmVyYXRvcjo6fkV4aXRUaHVua0dlbmVyYXRvcigpCit7Cit9CisK
K3ZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmsodW5zaWduZWQgaW5kZXgsIE9TUkV4
aXRDb21waWxhdGlvbkluZm8mIGluZm8pCit7CisgICAgaW5mby5tX3RodW5rTGFiZWwgPSBsYWJl
bCgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMyKGluZGV4KSwgR1BSSW5mbzo6bm9uQXJnR1JQMCk7
CisgICAgaW5mby5tX3RodW5rSnVtcCA9IHBhdGNoYWJsZUp1bXAoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2Vu
ZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRUaHVua0dlbmVy
YXRvcl9oCisjZGVmaW5lIEZUTEV4aXRUaHVua0dlbmVyYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHQ0NhbGxI
ZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgT1NS
RXhpdENvbXBpbGF0aW9uSW5mbzsKK2NsYXNzIFN0YXRlOworCitjbGFzcyBFeGl0VGh1bmtHZW5l
cmF0b3IgOiBwdWJsaWMgQ0NhbGxIZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBFeGl0VGh1bmtHZW5l
cmF0b3IoU3RhdGUmIHN0YXRlKTsKKyAgICB+RXhpdFRodW5rR2VuZXJhdG9yKCk7CisgICAgCisg
ICAgdm9pZCBlbWl0VGh1bmsodW5zaWduZWQgaW5kZXgsIE9TUkV4aXRDb21waWxhdGlvbkluZm8m
KTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIK
KworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK3ZvaWQgRXhpdFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
c3dpdGNoIChraW5kKCkpIHsKKyAgICBjYXNlIEludmFsaWRFeGl0VmFsdWU6CisgICAgICAgIG91
dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVE
ZWFkOgorICAgICAgICBvdXQucHJpbnQoIkRlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRXhpdFZhbHVlQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnQoIiwgZXhp
dEFyZ3VtZW50KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUNv
bnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50KCIsIGNvbnN0YW50KCksICIpIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICAgICAg
b3V0LnByaW50KCJJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTEV4aXRWYWx1ZV9oCisjZGVmaW5lIEZUTEV4aXRWYWx1ZV9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMRXhp
dEFyZ3VtZW50LmgiCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMg
aXMgbGlrZSBWYWx1ZVJlY292ZXJ5LCBidXQgcmVzcGVjdHMgdGhlIHdheSB0aGF0IHRoZSBGVEwg
ZG9lcyBPU1IKKy8vIGV4aXQ6IHRoZSBsaXZlIG5vbi1jb25zdGFudCBub24tZmx1c2hlZCB2YWx1
ZXMgYXJlIHBhc3NlZCBhcyBhcmd1bWVudHMKKy8vIHRvIGEgbm9yZXR1cm4gdGFpbCBjYWxsLiBF
eGl0VmFsdWUgaXMgaGVuY2UgbW9zdGx5IHJlc3BvbnNpYmxlIGZvcgorLy8gdGVsbGluZyB1cyB0
aGUgbWFwcGluZyBiZXR3ZWVuIG9wZXJhbmRzIGluIGJ5dGVjb2RlIGFuZCB0aGUgYXJndW1lbnRz
IHRvCisvLyB0aGUgY2FsbC4KKworZW51bSBFeGl0VmFsdWVLaW5kIHsKKyAgICBJbnZhbGlkRXhp
dFZhbHVlLAorICAgIEV4aXRWYWx1ZURlYWQsCisgICAgRXhpdFZhbHVlQXJndW1lbnQsCisgICAg
RXhpdFZhbHVlQ29uc3RhbnQKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2ssCisgICAgRXhpdFZhbHVl
SW5KU1N0YWNrQXNJbnQzMiwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0Jvb2xlYW4sCisgICAg
RXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGUKK307CisKK2NsYXNzIEV4aXRWYWx1ZSB7CitwdWJs
aWM6CisgICAgRXhpdFZhbHVlKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZEV4aXRWYWx1ZSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kID09IEludmFsaWRFeGl0VmFsdWU7IH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVl
IGRlYWQoKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IEV4aXRWYWx1ZURlYWQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
ICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNrKCkKKyAgICB7CisgICAgICAgIEV4
aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3Rh
Y2s7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0
VmFsdWUgaW5KU1N0YWNrQXNJbnQzMigpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBp
bkpTU3RhY2tBc0Jvb2xlYW4oKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFja0FzQm9vbGVhbjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpT
U3RhY2tBc0RvdWJsZSgpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgY29uc3RhbnQo
SlNWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUuY29u
c3RhbnQgPSBKU1ZhbHVlOjplbmNvZGUodmFsdWUpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGV4aXRBcmd1bWVudChjb25zdCBFeGl0
QXJndW1lbnQmIGFyZ3VtZW50KQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUFyZ3VtZW50OworICAgICAgICByZXN1bHQu
dS5hcmd1bWVudCA9IGFyZ3VtZW50LnJlcHJlc2VudGF0aW9uKCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorICAgIAorICAgIEV4aXRWYWx1ZUtpbmQga2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZDsgfQorICAgIAorICAgIGJvb2wgaXNEZWFkKCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IEV4aXRWYWx1ZURlYWQ7IH0KKyAgICBib29sIGlzSW5KU1N0YWNrU29tZWhvdygpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFjazoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgor
ICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzQm9vbGVhbjoKKyAgICAgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIGJvb2wgaXNDb25zdGFudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFs
dWVDb25zdGFudDsgfQorICAgIGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQo
KSA9PSBFeGl0VmFsdWVBcmd1bWVudDsgfQorICAgIAorICAgIEV4aXRBcmd1bWVudCBleGl0QXJn
dW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQXJndW1lbnQoKSk7CisgICAg
ICAgIHJldHVybiBFeGl0QXJndW1lbnQodS5hcmd1bWVudCk7CisgICAgfQorICAgIAorICAgIEpT
VmFsdWUgY29uc3RhbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQo
KSk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpkZWNvZGUodS5jb25zdGFudCk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyAgICBFeGl0VmFsdWVLaW5kIG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIEV4aXRBcmd1
bWVudFJlcHJlc2VudGF0aW9uIGFyZ3VtZW50OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25z
dGFudDsKKyAgICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRWYWx1ZV9oCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCShyZXZpc2lv
biAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkK
IAogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1h
dC5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTQxLDE4ICs0Miw2
IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIC8vIHVzZSB0aGlzIGluIHNpdHVh
dGlvbnMgd2hlcmUgdGhlcmUgaXMgbm8gZ29vZCB3YXkgdG8gc2F5IHdoYXQgbm9kZSB0aGUgdmFs
dWUgY2FtZQogLy8gZnJvbS4KIAotLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWls
YXIgdG8gRGF0YUZvcm1hdCBpbiBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0Ci0vLyB1
bmxpa2UgRGF0YUZvcm1hdCBhbmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVz
IGJldHdlZW4gVUludDMyIGFuZCBJbnQzMi4KLQotZW51bSBWYWx1ZUZvcm1hdCB7Ci0gICAgSW52
YWxpZFZhbHVlRm9ybWF0LAotICAgIFZhbHVlRm9ybWF0SW50MzIsCi0gICAgVmFsdWVGb3JtYXRV
SW50MzIsCi0gICAgVmFsdWVGb3JtYXRCb29sZWFuLAotICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwK
LSAgICBWYWx1ZUZvcm1hdERvdWJsZQotfTsKLQogY2xhc3MgRm9ybWF0dGVkVmFsdWUgewogcHVi
bGljOgogICAgIEZvcm1hdHRlZFZhbHVlKCkKQEAgLTgxLDYgKzcwLDEzIEBAIHByaXZhdGU6CiAg
ICAgTFZhbHVlIG1fdmFsdWU7CiB9OwogCitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIG5v
VmFsdWUoKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZSgpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1h
dHRlZFZhbHVlIGludDMyVmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1
ZShWYWx1ZUZvcm1hdEludDMyLCB2YWx1ZSk7IH0KK3N0YXRpYyBpbmxpbmUgRm9ybWF0dGVkVmFs
dWUgdUludDMyVmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1
ZUZvcm1hdFVJbnQzMiwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIGJv
b2xlYW5WYWx1ZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9y
bWF0Qm9vbGVhbiwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIGpzVmFs
dWVWYWx1ZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0
SlNWYWx1ZSwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIGRvdWJsZVZh
bHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXREb3Vi
bGUsIHZhbHVlKTsgfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmNwcAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
SVRDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAgSklUQ29kZTo6fkpJ
VENvZGUoKQogICAgICAgICBMTFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2VuZ2luZSk7CiB9
CiAKK3ZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29kZVJlZiBleGl0VGh1bmtz
KQoreworICAgIG1fZXhpdFRodW5rcyA9IGV4aXRUaHVua3M7Cit9CisKIHZvaWQgSklUQ29kZTo6
aW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmUsIENvZGVSZWYgZW50
cnlwb2ludCkKIHsKICAgICBtX2VuZ2luZSA9IGVuZ2luZTsKQEAgLTk3LDYgKzEwMiwxMSBAQCBi
b29sIEpJVENvZGU6OmNvbnRhaW5zKHZvaWQqKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorQ29k
ZVB0ciBKSVRDb2RlOjpleGl0VGh1bmtzKCkKK3sKKyAgICByZXR1cm4gbV9leGl0VGh1bmtzLmNv
ZGUoKTsKK30KKwogSklUQ29kZSogSklUQ29kZTo6ZnRsKCkKIHsKICAgICByZXR1cm4gdGhpczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxNDgw
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNDgsMTIgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpOwogICAg
IGJvb2wgY29udGFpbnModm9pZCopOwogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRUaHVu
a3MoQ29kZVJlZik7CiAgICAgdm9pZCBpbml0aWFsaXplQ29kZShMTFZNRXhlY3V0aW9uRW5naW5l
UmVmLCBDb2RlUmVmIGVudHJ5cG9pbnQpOwogICAgIAorICAgIENvZGVQdHIgZXhpdFRodW5rcygp
OworICAgIAogICAgIEpJVENvZGUqIGZ0bCgpOwogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29t
bW9uKCk7CiAgICAgCiAgICAgREZHOjpDb21tb25EYXRhIGNvbW1vbjsKKyAgICBTZWdtZW50ZWRW
ZWN0b3I8T1NSRXhpdCwgOD4gb3NyRXhpdDsKICAgICAKIHByaXZhdGU6CiAgICAgLy8gRklYTUU6
IExMVk0gc2hvdWxkIHVzZSBvdXIgb3duIEpJVCBtZW1vcnkgYWxsb2NhdG9yLCBhbmQgd2Ugc2hv
dWxkbid0IGhhdmUgdG8KQEAgLTYxLDYgKzY1LDcgQEAgcHJpdmF0ZToKICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjE5CiAgICAgTExWTUV4ZWN1dGlv
bkVuZ2luZVJlZiBtX2VuZ2luZTsKICAgICBDb2RlUmVmIG1fZW50cnlwb2ludDsKKyAgICBDb2Rl
UmVmIG1fZXhpdFRodW5rczsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShy
ZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsOCArMzAsMTAgQEAKIAogI2luY2x1ZGUg
IkRGR0Fic3RyYWN0U3RhdGUuaCIKICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5
LmgiCisjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9y
bWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExUaHVu
a3MuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKQEAgLTQxLDcgKzQzLDcgQEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIC8vIFVzaW5n
IHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hlY2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24g
TExWTSwgYnkgY3JlYXRpbmcKIC8vIHNpZ25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAjZGVm
aW5lIEZUTF9UWVBFX0NIRUNLKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3Vn
aCwgZmFpbENvbmRpdGlvbikgZG8geyBcCi0gICAgICAgIExWYWx1ZSBfZnRjX2xvd1ZhbHVlID0g
KGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZvcm1h
dHRlZFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUpOyAgICAgICAgICAgICAgICAgICAg
ICBcCiAgICAgICAgIEVkZ2UgX2Z0Y19oaWdoVmFsdWUgPSAoaGlnaFZhbHVlKTsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIF9mdGNfdHlwZXNQ
YXNzZWRUaHJvdWdoID0gKHR5cGVzUGFzc2VkVGhyb3VnaCk7ICBcCiAgICAgICAgIGlmICghbV9z
dGF0ZS5uZWVkc1R5cGVDaGVjayhfZnRjX2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91
Z2gpKSBcCkBAIC01Nyw2ICs1OSw4IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2xvY2Fsc0Jvb2xl
YW4oT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFk
KQogICAgICAgICAsIG1fbG9jYWxzMzIoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nr
c1swXS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbG9jYWxzNjQoT3BlcmFuZHNMaWtl
LCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1f
dmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlh
Ymxlc0F0SGVhZCkKKyAgICAgICAgLCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSkKICAgICAg
ICAgLCBtX3N0YXRlKHN0YXRlLmdyYXBoKQogICAgIHsKICAgICB9CkBAIC04MCwxNCArODQsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgbV9sb2NhbHM2NFtpbmRleF0gPSBidWlsZEFsbG9jYSht
X291dC5tX2J1aWxkZXIsIG1fb3V0LmludDY0KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAg
ICAgbV9pbml0aWFsaXphdGlvbiA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5mdW5jdGlv
bik7CisgICAgICAgIG1fb3V0Lmp1bXAobV9pbml0aWFsaXphdGlvbik7CisgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG1faW5pdGlhbGl6YXRpb24pOworICAgICAgICAKICAgICAgICAgbV9jYWxsRnJh
bWUgPSBtX291dC5wYXJhbSgwKTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29u
c3RJbnQ2NChUYWdUeXBlTnVtYmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9vdXQuY29uc3RJ
bnQ2NChUYWdNYXNrKTsKICAgICAgICAgCi0gICAgICAgIG1fYWJvcnRGdW5jdGlvbiA9IGNvbnN0
SW50VG9QdHIoCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihhYm9ydCksCi0gICAgICAg
ICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5cGUobV9vdXQudm9pZFR5cGUpKSk7Ci0gICAgICAg
IAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBt
X2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBtX2hp
Z2hCbG9jayA9IG1fZ3JhcGgubV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgICAg
ICBpZiAoIW1faGlnaEJsb2NrKQpAQCAtOTgsMTQgKzEwMiwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IAogICAgICAgICBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKTsKIAotICAgICAgICBtX291dC5h
cHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQo
KSkpOworICAgICAgICBtX291dC5hcHBlbmRUbyhtX2luaXRpYWxpemF0aW9uLCBtX2Jsb2Nrcy5n
ZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkpOwogCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hl
Y2tBcmd1bWVudHMoKTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAobV9ibG9ja3MuZ2V0
KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKKyAgICAgICAgLy8gTGVhdmUgdGhlIGluaXRp
YWxpemF0aW9uIGJsb2NrIGhhbmdpbmcsIHNpbmNlIHdlIHdpbGwgYWRkIHRvIGl0IGxhdGVyLgog
ICAgICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0lu
ZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAgICAg
IGNvbXBpbGVCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBub3cg
Y29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9uIGJsb2NrLgorICAgICAgICBsaW5rT1NSRXhpdHNB
bmRDb21wbGV0ZUluaXRpYWxpemF0aW9uQmxvY2soKTsKIAogICAgICAgICBpZiAodmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpKQogICAgICAgICAgICAgbV9mdGxTdGF0ZS5kdW1wU3RhdGUoImFm
dGVyIGxvd2VyaW5nIik7CkBAIC0xNTEsOCArMTU4LDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2
b2lkIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6
IFNldCB1cCB0aGUgT1NSIHN0b3J5IGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcg
YXJndW1lbnRzLCBldmVyeXRoaW5nIGlzIGluIHRoZSBzdGFjay4KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBW
YWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CiAg
ICAgICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKQEAgLTE3MCwy
MSArMTc4LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVu
Ym94SWZQb3NzaWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlh
YmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9u
KCk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxl
LT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAg
ICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RJ
bnQzMihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJh
ZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7
CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEludDMyKGpzVmFsdWUpLCBtX2xv
Y2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2RlLCBpc05vdENl
bGwoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRU
eXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRU
eXBlLCBqc1ZhbHVlLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSks
IG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0
LnNldCh1bmJveEJvb2xlYW4oanNWYWx1ZSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIH0KQEAgLTIxNiwxOCArMjI0LDE4IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIG1ha2Ug
SVIgZHVtcHMgZWFzaWVyIHRvIHJlYWQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Jsb2Nr
LCBtX25leHRMb3dCbG9jayk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IHRyYWNrIHRoZSBPU1Igc2l0dWF0aW9uIGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgaW5pdGlhbGl6ZU9TUkV4
aXRTdGF0ZUZvckJsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBtX2ludDMyVmFsdWVzLmNsZWFy
KCk7CiAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5jbGVhcigpOwogICAgICAgICBtX2Jvb2xlYW5W
YWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmNsZWFyKCk7CisgICAgICAg
IG1fdGltZVRvTGl2ZS5jbGVhcigpOwogICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5yZXNldCgp
OwogICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CiAgICAgICAg
IAotICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1faGln
aEJsb2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQorICAgICAgICBmb3IgKG1fbm9kZUluZGV4ID0g
MDsgbV9ub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgpOyArK21fbm9kZUluZGV4KQogICAg
ICAgICAgICAgY29tcGlsZU5vZGUobm9kZUluZGV4KTsKICAgICB9CiAgICAgCkBAIC0yNDAsOSAr
MjQ4LDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGJvb2wgc2hvdWxkRXhlY3V0ZUVm
ZmVjdHMgPSBtX3N0YXRlLnN0YXJ0RXhlY3V0aW5nKG1fbm9kZSk7CiAgICAgICAgIAotICAgICAg
ICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAgICAgICAgICAgIHJldHVybjsgLy8g
RklYTUU6IEltcGxlbWVudCBPU1IgbWFnaWMgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICAKICAgICAgICAgbV9kaXJlY3Rpb24gPSAo
bV9ub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkgPyBGb3J3YXJkU3BlY3VsYXRpb24g
OiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUt
Pm9wKCkpIHsKQEAgLTI1OCw2ICsyNjMsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBTZXRM
b2NhbDoKICAgICAgICAgICAgIGNvbXBpbGVTZXRMb2NhbCgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50KCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBab21iaWVIaW50OgorICAgICAgICAgICAg
Y29tcGlsZVpvbWJpZUhpbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1v
dkhpbnRBbmRDaGVjazoKICAgICAgICAgICAgIGNvbXBpbGVNb3ZIaW50QW5kQ2hlY2soKTsKICAg
ICAgICAgICAgIGJyZWFrOwpAQCAtMzUyLDYgKzM2MywxMSBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIERGR19OT0RFX0RPX1RPX0NI
SUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25v
ZGUtPmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgbV90aW1lVG9MaXZlLmFkZChtX25vZGUsIG1f
bm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRF
eGVjdXRlRWZmZWN0cykKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVjdHMobm9kZUlu
ZGV4KTsKICAgICB9CkBAIC0zNjgsOCArMzg0LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKKyAgICAgICAgLy8gR2V0TG9jYWwgaXMgb25lIG9m
IHRoZSBmZXcgbm9kZXMgdGhhdCBtYXkgYmUgbGVmdCBiZWhpbmQsIHdpdGggIXNob3VsZEdlbmVy
YXRlKCkuCisgICAgICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAg
ICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5k
KHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09
IFNwZWNOb25lKSB7CkBAIC00MjAsMTMgKzQ0MCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZv
aWQgY29tcGlsZVNldExvY2FsKCkKICAgICB7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9k
ZSk7CisgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9u
b2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAg
Ym9vbCBuZWVkc0ZsdXNoaW5nID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobV9ub2RlKTsK
ICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4K
LSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYy
MwotICAgICAgICAKICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUo
KSkgewogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkg
ewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91YmxlcyBpbiBGVEwuCkBA
IC00MzgsMjEgKzQ1NywyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxv
d0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1
ZSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcp
IHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2
YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1t2
YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAg
ICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2Fs
KCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAg
ICBpZiAobmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0
KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKENlbGxJ
bkpTU3RhY2spOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpIHsKICAgICAgICAgICAgICAgICBtX291dC5zZXQobG93Qm9vbGVhbihtX25vZGUtPmNo
aWxkMSgpKSwgbV9sb2NhbHNCb29sZWFuLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAg
ICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICBpZiAobmVl
ZHNGbHVzaGluZykgewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTY0KGxvd0pTVmFs
dWUobV9ub2RlLT5jaGlsZDEoKSksIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ2MCwxOCArNDg1LDMy
IEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNDYXB0dXJlZCgpKSB7CiAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNv
dXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICBpZiAo
bmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVz
c0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFy
aWFibGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZU1vdkhpbnQoKQorICAgIHsKKyAgICAgICAg
b2JzZXJ2ZU1vdkhpbnQobV9ub2RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlWm9t
YmllSGludCgpCisgICAgeworICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIGRhdGEgPSBtX25v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gZGF0
YS0+bG9jYWwoKTsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXNbZGF0YS0+bG9jYWwoKV0gPSBWYWx1
ZVNvdXJjZShTb3VyY2VJc0RlYWQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZI
aW50QW5kQ2hlY2soKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGlu
dCBmb3IgT1NSLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTEzNjIzCisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CiAgICAgICAgIHNw
ZWN1bGF0ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICB9CiAgICAgCkBAIC01MDAsNyArNTM5LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3Vs
dCwgMSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTUyNCw3ICs1NjMsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuc3Vi
V2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCAwLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7CisgICAgICAgICAgICBz
cGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3Vs
dCwgMSkpOwogICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5leHRy
YWN0VmFsdWUocmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt
NTQ3LDcgKzU4Niw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQu
bXVsKGxlZnQsIHJpZ2h0KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIExW
YWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0
KTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJh
Y3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShP
dmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQs
IDEpKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZs
b3dSZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01NTYsOCArNTk1
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExC
YXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlv
bik7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgMCwgMCwgbV9vdXQu
bGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKE5lZ2F0aXZlWmVybywgMCwgMCwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDMy
WmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUo
KSwgMCwgbV9vdXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhh
bihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwogICAgICAgICAgICAgfQpAQCAtNTg1LDcgKzYyNCw3IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIG5lZ2F0ZS13aXRoLW92ZXJmbG93
IGludHJpbnNpYy4gSG9wZWZ1bGx5IHRoaXMKICAgICAgICAgICAgICAgICAvLyBkb2VzIHRoZSB0
cmljaywgdGhvdWdoLgogICAgICAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1f
b3V0LnN1YldpdGhPdmVyZmxvdzMyKG1fb3V0LmludDMyWmVybywgdmFsdWUpOwotICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJm
bG93UmVzdWx0LCAxKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1Zh
bHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOwogICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMCk7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTY1Niw3ICs2OTUsNyBAQCBwcml2YXRl
OgogICAgICAgICAKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGls
ZDEoKSk7CiAgICAgICAgIHNwZWN1bGF0ZUZvcndhcmQoCi0gICAgICAgICAgICBPdmVyZmxvdywg
MCwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0LmludDMyWmVybyksCisgICAgICAgICAg
ICBPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwgbV9vdXQuaW50
MzJaZXJvKSwKICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0VUludDMyLCB2
YWx1ZSkpOwogICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHZhbHVlKTsKICAgICB9
CkBAIC02NzUsNyArNzE0LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChtX25v
ZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGUo
Ci0gICAgICAgICAgICAgICAgZXhpdEtpbmQsIGNlbGwsIDAsCisgICAgICAgICAgICAgICAgZXhp
dEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKICAgICAgICAgICAgICAgICBtX291dC5ub3RF
cXVhbChzdHJ1Y3R1cmUsIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKSk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY5Miw3ICs3MzEsNyBAQCBwcml2
YXRlOgogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAg
ICBleGl0S2luZCwgY2VsbCwgMCwKKyAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUo
Y2VsbCksIDAsCiAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmUsIHdlYWtQb2lu
dGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSkpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03NTUsNyArNzk0LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewogICAgICAgICAg
ICAgaWYgKG1fbm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgMCwgMCwKKyAg
ICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwKICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuYWJvdmVPckVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5k
ZXgsIG1fb3V0LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgp
KSk7CiAgICAgICAgICAgICAgICAgCkBAIC03NjQsNyArODAzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVh
cHMuaW5kZXhlZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLAogICAgICAgICAgICAgICAgICAgICBzdG9y
YWdlLCBtX291dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAogICAgICAgICAgICAgICAg
ICAgICBtX3N0YXRlLmZvck5vZGUobV9ub2RlLT5jaGlsZDIoKSkubV92YWx1ZSkpOwotICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIDAsIDAsIG1fb3V0LmlzWmVybzY0KHJl
c3VsdCkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUo
KSwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgbV9qc1ZhbHVl
VmFsdWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CkBAIC04NjUsMzIgKzkwNCwyNiBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoRXhpdEtpbmQsIExWYWx1ZSwgTm9k
ZSosIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoCisg
ICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdo
VmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sg
ZmFpbENhc2UgPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51
YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNo
KGZhaWxDb25kaXRpb24sIGZhaWxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOwot
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IE9TUiBleGl0LgotICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCi0gICAgICAgIG1fb3V0LmNh
bGwobV9hYm9ydEZ1bmN0aW9uKTsKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIGFwcGVu
ZE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29u
ZGl0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKICAgICB9CiAg
ICAgCi0gICAgdm9pZCBzcGVjdWxhdGVGb3J3YXJkKEV4aXRLaW5kIGtpbmQsIExWYWx1ZSBsb3dW
YWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwgY29uc3QgRm9ybWF0
dGVkVmFsdWUmKQorICAgIHZvaWQgc3BlY3VsYXRlRm9yd2FyZCgKKyAgICAgICAgRXhpdEtpbmQg
a2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZh
aWxDb25kaXRpb24sCisgICAgICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiByZWNvdmVyeSkKICAg
ICB7Ci0gICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUs
IGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5nIG9m
IE9TUiBleGl0IHRvIGZvcndhcmQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAg
ICAgIGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVj
dWxhdGlvbiwgcmVjb3ZlcnkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZShFeGl0
S2luZCBraW5kLCBMVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxD
b25kaXRpb24pCisgICAgdm9pZCBzcGVjdWxhdGUoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZv
cm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0
aW9uKQogICAgIHsKLSAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93VmFsdWUsIGhp
Z2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV3
aXJpbmcgdGhlIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09IEZvcndhcmRE
aXJlY3Rpb24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQsIGxv
d1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24sIG1fZGlyZWN0aW9uLCBGb3JtYXR0ZWRW
YWx1ZSgpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCB0ZXJtaW5hdGUoRXhpdEtpbmQga2luZCkK
QEAgLTg5OCwyNyArOTMxLDQyIEBAIHByaXZhdGU6CiAgICAgICAgIHNwZWN1bGF0ZShraW5kLCAw
LCAwLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmFja3dhcmRU
eXBlQ2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIGJhY2t3
YXJkVHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdo
VmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVl
IGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hl
Y2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNlS2luZCgpKSk7Ci0g
ICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9k
ZSgpLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGhpZ2hWYWx1ZSku
ZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgICAgIGFwcGVuZFR5cGVDaGVjaygKKyAg
ICAgICAgICAgIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENv
bmRpdGlvbiwgQmFja3dhcmRTcGVjdWxhdGlvbiwKKyAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVl
KCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soTFZhbHVlIGxvd1Zh
bHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBM
VmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soCisgICAgICAg
IEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7
Ci0gICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFz
c2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
cmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBlbmRUeXBlQ2hl
Y2soCisgICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gs
IGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVjdWxhdGlvbiwKKyAgICAgICAgICAgIEZvcm1hdHRl
ZFZhbHVlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHR5cGVDaGVjayhMVmFsdWUgbG93VmFs
dWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgdHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFz
c2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAg
ICBiYWNrd2FyZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5n
IG9mIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09IEZvcndhcmREaXJlY3Rp
b24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjMKKyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICAgICAgbG93VmFsdWUsIGhp
Z2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBtX2RpcmVjdGlvbiwK
KyAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFw
cGVuZFR5cGVDaGVjaygKKyAgICAgICAgTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwg
U3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBMVmFsdWUgZmFpbENv
bmRpdGlvbiwgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1ZSBy
ZWNvdmVyeSkKKyAgICB7CisgICAgICAgIGlmICghbV9zdGF0ZS5uZWVkc1R5cGVDaGVjayhoaWdo
VmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IEFTU0VSVChtYXlIYXZlVHlwZUNoZWNrKGhpZ2hWYWx1ZS51c2VLaW5kKCkpKTsKKyAgICAgICAg
YXBwZW5kT1NSRXhpdChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLm5vZGUoKSwgZmFpbENv
bmRpdGlvbiwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CisgICAgICAgIG1fc3RhdGUuZm9yTm9kZSho
aWdoVmFsdWUpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOwogICAgIH0KICAgICAKICAgICBM
VmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRpb25Nb2RlIG1vZGUgPSBB
dXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCkBAIC05MjksNyArOTc3LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVl
IGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAg
ICAgICAgIEZUTF9UWVBFX0NIRUNLKGJveGVkUmVzdWx0LCBlZGdlLCBTcGVjSW50MzIsIGlzTm90
SW50MzIoYm94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAg
ICAgICAgICAgIGpzVmFsdWVWYWx1ZShib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNJbnQzMiwgaXNO
b3RJbnQzMihib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVuYm94
SW50MzIoYm94ZWRSZXN1bHQpOwogICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoZWRnZS5u
b2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtOTQ1LDcgKzk5
NCw4IEBAIHByaXZhdGU6CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobW9kZSwgbW9kZSA9PSBNYW51
YWxPcGVyYW5kU3BlY3VsYXRpb24gfHwgaXNDZWxsKGVkZ2UudXNlS2luZCgpKSk7CiAgICAgICAg
IAogICAgICAgICBpZiAoTFZhbHVlIHVuY2hlY2tlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5n
ZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1bmNoZWNrZWRS
ZXN1bHQsIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVzdWx0KSk7CisgICAg
ICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5j
aGVja2VkUmVzdWx0KSwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRSZXN1bHQp
KTsKICAgICAgICAgICAgIHJldHVybiB1bmNoZWNrZWRSZXN1bHQ7CiAgICAgICAgIH0KICAgICAg
ICAgCkBAIC05NzEsNyArMTAyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSB1bmJveGVkUmVzdWx0ID0gbV9qc1Zh
bHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNL
KHVuYm94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05vdEJvb2xlYW4odW5ib3hlZFJl
c3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNW
YWx1ZVZhbHVlKHVuYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFu
KHVuYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEJvb2xl
YW4odW5ib3hlZFJlc3VsdCk7CiAgICAgICAgICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKGVkZ2Uu
bm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTEwOTQsNyAr
MTE0NSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzcGVjdWxhdGVPYmplY3QoRWRnZSBlZGdlLCBM
VmFsdWUgY2VsbCkKICAgICB7CiAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAg
Y2VsbCwgZWRnZSwgU3BlY09iamVjdCwKKyAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShjZWxsKSwg
ZWRnZSwgU3BlY09iamVjdCwKICAgICAgICAgICAgIG1fb3V0LmVxdWFsKAogICAgICAgICAgICAg
ICAgIG1fb3V0LmxvYWRQdHIoY2VsbCwgbV9oZWFwcy5KU0NlbGxfc3RydWN0dXJlKSwKICAgICAg
ICAgICAgICAgICBtX291dC5jb25zdEludFB0cihnbG9iYWxEYXRhKCkuc3RyaW5nU3RydWN0dXJl
LmdldCgpKSkpOwpAQCAtMTEwNSw2ICsxMTU2LDM1NyBAQCBwcml2YXRlOgogICAgICAgICBzcGVj
dWxhdGVPYmplY3QoZWRnZSwgbG93Q2VsbChlZGdlKSk7CiAgICAgfQogICAgIAorICAgIGJvb2wg
aXNMaXZlKE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25l
ZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUtPmZpbmQoZWRnZS5ub2RlKCkpOworICAg
ICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUtPmVuZCgpKTsKKyAgICAgICAgcmV0dXJu
ICEhaXRlci0+dmFsdWU7CisgICAgfQorICAgIAorICAgIHZvaWQgdXNlKEVkZ2UgZWRnZSkKKyAg
ICB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1f
dGltZVRvTGl2ZS0+ZmluZChlZGdlLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1f
dGltZVRvTGl2ZS0+ZW5kKCkpOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUpOworICAgICAg
ICBpdGVyLT52YWx1ZS0tOworICAgIH0KKyAgICAKKyAgICAvLyBXcmFwcGVyIHVzZWQgb25seSBm
b3IgREZHX05PREVfRE9fVE9fQ0hJTERSRU4KKyAgICB2b2lkIHVzZShOb2RlKiwgRWRnZSBlZGdl
KQorICAgIHsKKyAgICAgICAgdXNlKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRp
YWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5v
ZGUgPSBtX2hpZ2hCbG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOworICAgICAgICAgICAgaWYgKCFu
b2RlKSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShT
b3VyY2VJc0RlYWQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0g
bm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNBcmd1bWVudHNBbGlhcygpKSB7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShBcmd1bWVudHNT
b3VyY2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkgeworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCBoYXZlIGJlZW4gZmx1c2hlZCB0byB0aGUg
SlNTdGFjayBpbiBzb21lIGZvcm0gb3IKKyAgICAgICAgICAgICAgICAvLyBhbm90aGVyLgorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJ
ZlBvc3NpYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRV
c2VEb3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoSW50MzJJbkpTU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1
ZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3Np
YmxlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZv
cm1hdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFs
dWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fscyk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29sZWFu
SW5Mb2NhbHMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdmFsdWVTb3Vy
Y2VzW2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3Jt
YXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlv
biwKKyAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1
ZSByZWNvdmVyeSkKKyAgICB7CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5h
cHBlbmQoCisgICAgICAgICAgICBPU1JFeGl0KAorICAgICAgICAgICAgICAgIGtpbmQsIGxvd1Zh
bHVlLmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGln
aFZhbHVlKSwKKyAgICAgICAgICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4sIG1fbGFzdFNldE9w
ZXJhbmQsIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBtX2Z0bFN0YXRl
Lm9zckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIAorICAg
ICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsK
KyAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhp
dC5sYXN0KCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBtX291dC5uZXdCbG9j
aygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZhaWxDYXNl
LCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9s
b2d1ZSk7CisgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9jYShtX291dC5t
X2J1aWxkZXIsIG1fb3V0LmludFB0cik7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOworICAgICAg
ICAKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50
cy5hcHBlbmQobV9jYWxsRnJhbWUpOworICAgICAgICBpZiAobG93VmFsdWUpCisgICAgICAgICAg
ICBhcmd1bWVudHMuYXBwZW5kKGFyZ3VtZW50cy52YWx1ZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBWYWx1ZVNvdXJjZSBzb3VyY2UgPSBtX3ZhbHVlU291cmNlc1tpXTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChzb3VyY2Uua2luZCgpKSB7CisgICAgICAgICAg
ICBjYXNlIFZhbHVlSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0g
PSBFeGl0VmFsdWU6OmluSlNTdGFjaygpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVz
W2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0luMzIoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgIGV4
aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6CisgICAgICAg
ICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1
bWVudHMsIGksIFZhbHVlRm9ybWF0SlNWYWx1ZSwgbV9vdXQuZ2V0KG1fbG9jYWxzNjRbaV0pKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50MzJJbkxvY2FsczoK
KyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAgIGV4
aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRJbnQzMiwgbV9vdXQuZ2V0KG1fbG9jYWxzMzJb
aV0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQm9vbGVhbklu
TG9jYWxzOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAg
ICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEJvb2xlYW4sIG1fb3V0LmdldCht
X2xvY2Fsc0Jvb2xlYW5baV0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgRG91YmxlSW5Mb2NhbHM6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVu
dCBkb3VibGVzIGluIEZUTC4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjI0CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgQXJndW1lbnRzU291cmNlOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
UGhhbnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzOTg2CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNh
c2UgU291cmNlSXNEZWFkOgorICAgICAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0
VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SGF2ZU5vZGU6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZShleGl0LCBh
cmd1bWVudHMsIGksIHNvdXJjZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBpZiAoZGlyZWN0aW9uID0gRm9yd2FyZFNwZWN1bGF0aW9uKQor
ICAgICAgICAgICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJkKG1faGlnaEJsb2NrLCBtX25vZGUsIG1f
bm9kZUluZGV4LCByZWNvdmVyeSwgYXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNv
LCB0aGUgcmVhbGx5IGxhbWUgdGhpbmcgaGVyZSBpcyB0aGF0IHdlIGhhdmUgdG8gYnVpbGQgYW4g
TExWTSBmdW5jdGlvbiB0eXBlLgorICAgICAgICAvLyBCb29vLgorICAgICAgICBWZWN0b3I8TFR5
cGUsIDE2PiBhcmd1bWVudFR5cGVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQo
dHlwZU9mKGFyZ3VtZW50c1tpXSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuY2FsbCgKKyAg
ICAgICAgICAgIG1fb3V0LmludFRvUHRyKAorICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZv
Lm1fdGh1bmtBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5
cGUobV9vdXQudm9pZFR5cGUsIGFyZ3VtZW50VHlwZXMpKSksCisgICAgICAgICAgICBhcmd1bWVu
dHMpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0
TmV4dCk7CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSgKKyAg
ICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25l
ZCBpbmRleCwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKKworICAgICAg
ICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcnVtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgs
IG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICAgICAgaWYgKCFpc0xp
dmUobm9kZSkpIHsKKyAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgKG5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgpKSkg
eworICAgICAgICAgICAgICAgIG5vZGUgPSBub2RlLT5jaGlsZDEoKS5ub2RlKCk7CisgICAgICAg
ICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRz
LCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICBpZiAoaXNMaXZlKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghZm91bmQpIHsK
KyAgICAgICAgICAgICAgICBOb2RlKiBpbnQzMlRvRG91YmxlID0gMDsKKyAgICAgICAgICAgICAg
ICBOb2RlKiB2YWx1ZVRvSW50MzIgPSAwOworICAgICAgICAgICAgICAgIE5vZGUqIHVpbnQzMlRv
TnVtYmVyID0gMDsKKyAgICAgICAgICAgICAgICBOb2RlKiBkb3VibGVBc0ludDMyID0gMDsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46
Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4oKTsKKyAgICAgICAgICAgICAgICBI
YXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVuZCA9IG1fdGltZVRvTGl2ZS5lbmQo
KTsKKyAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IGl0ZXItPmtl
eTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYW5k
aWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjYW5kaWRhdGUtPm9wKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAgICAgICAgICBj
YXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAgICAgICAgICAgICAgaW50MzJU
b0RvdWJsZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlVG9JbnQzMiA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgorICAgICAgICAg
ICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVBc0ludDMy
OgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5kaWRhdGU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmVlZHNPU1JGb3J3YXJkUmV3aXJp
bmcoY2FuZGlkYXRlLT5vcCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiAoZG91YmxlQXNJbnQzMikKKyAgICAgICAgICAgICAgICAgICAg
bm9kZSA9IGRvdWJsZUFzSW4zMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbnQzMlRvRG91
YmxlKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gaW50MzJUb0RvdWJsZTsKKyAgICAgICAg
ICAgICAgICBlbHNlIGlmICh2YWx1ZVRvSW50MzIpCisgICAgICAgICAgICAgICAgICAgIG5vZGUg
PSB2YWx1ZVRvSW50MzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodWludDMyVG9OdW1iZXIp
CisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSB1aW50MzJUb051bWJlcjsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQorICAgICAgICAgICAgICAg
ICAgICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9
IEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQVNTRVJUKGlzTGl2ZShub2RlKSk7Cisg
ICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1faW50MzJWYWx1ZXMuZ2V0KG5v
ZGUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRl
eCwgVmFsdWVGb3JtYXRJbnQzMiwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2Jvb2xlYW5WYWx1
ZXMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1l
bnRzLCBpbmRleCwgVmFsdWVGb3JtYXRCb29sZWFuLCByZXN1bHQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChl
eGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEpTVmFsdWUsIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgZG91YmxlcyBpbiB0aGUgRlRMLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjI0CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgdHJ5VG9TZXRDb25zdGFudEV4aXRB
cmd1bWVudCgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1l
bnRzLCB1bnNpZ25lZCBpbmRleCwgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIGlmICghbm9k
ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgV2Vh
a0pTQ29uc3RhbnQ6CisgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9IEV4aXRWYWx1
ZTo6Y29uc3RhbnQobV9ncmFwaC52YWx1ZU9mSlNDb25zdGFudChub2RlKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgorICAgICAgICAg
ICAgLy8gRklYTUU6IGltcGxlbWVudCBQaGFudG9tQXJndW1lbnRzLgorICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk4NgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICBPU1JFeGl0
JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGluZGV4LCBWYWx1
ZUZvcm1hdCBmb3JtYXQsCisgICAgICAgIExWYWx1ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIGV4
aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudChFeGl0QXJndW1lbnQoZm9y
bWF0LCBhcmd1bWVudHMuc2l6ZSgpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6
YXRpb25CbG9jaygpCisgICAgeworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhp
dFRodW5rID0KKyAgICAgICAgICAgIGdsb2JhbERhdGEoKS5nZXRDVElTdHViKG9zckV4aXRHZW5l
cmF0aW9uVGh1bmtHZW5lcmF0b3IpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQg
PSBDb2RlTG9jYXRpb25MYWJlbChvc3JFeGl0VGh1bmsuY29kZSgpKTsKKyAgICAgICAgCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKG1faW5pdGlhbGl6YXRpb24pOworICAgICAgICAKKyAgICAgICAg
TGlua0J1ZmZlciBsaW5rQnVmZmVyKAorICAgICAgICAgICAgJmdsb2JhbERhdGEoKSwgJm1fZXhp
dFRodW5rR2VuZXJhdG9yLCBtX2Z0bFN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLAorICAgICAgICAg
ICAgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQo
bV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQu
c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Z0
bFN0YXRlLm9zckV4aXQuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIE9TUkV4aXRDb21waWxh
dGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLm9zckV4aXRbaV07CisgICAgICAgICAgICBPU1JF
eGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICAgICAg
CisgICAgICAgICAgICBsaW5rQnVmZmVyLmxpbmsoaW5mby5tX3RodW5rSnVtcCwgdGFyZ2V0KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9vdXQuc2V0KAorICAgICAgICAgICAgICAgIG1f
b3V0LmNvbnN0SW50UHRyKAorICAgICAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9u
T2YoaW5mby5tX3RodW5rTGFiZWwpLmV4ZWN1dGFibGVBZGRyZXNzKCkpLAorICAgICAgICAgICAg
ICAgIGluZm8ubV90aHVua0FkZHJlc3MpOworICAgICAgICAgICAgCisgICAgICAgICAgICBleGl0
Lm1fcGF0Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZmZXIub2Zmc2V0T2YoZXhpdC5tX3RodW5r
SnVtcCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0YXRlLmppdENvZGUtPmluaXRp
YWxpemVFeGl0VGh1bmtzKAorICAgICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCisgICAgICAg
ICAgICAgICAgbGlua0J1ZmZlciwKKyAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBm
b3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUoc3RhdGUuZ3JhcGgubV9jb2Rl
QmxvY2ssSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkpOworCisgICAgICAgIG1fb3V0Lmp1bXAo
bV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0g
Wm9tYmllSGludCk7CisgICAgICAgIAorICAgICAgICBpbnQgb3BlcmFuZCA9IG5vZGUtPmxvY2Fs
KCk7CisgICAgICAgIAorICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3BlcmFuZDsKKyAgICAg
ICAgbV92YWx1ZVNvdXJjZXNbb3BlcmFuZF0gPSBWYWx1ZVNvdXJjZShub2RlLT5jaGlsZDEoKS5u
b2RlKCkpOworICAgIH0KKyAgICAKICAgICB2b2lkIGFkZFdlYWtSZWZlcmVuY2UoSlNDZWxsKiB0
YXJnZXQpCiAgICAgewogICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi53ZWFrUmVm
ZXJlbmNlcy5hcHBlbmQoCkBAIC0xMTUxLDEyICsxNTUzLDEyIEBAIHByaXZhdGU6CiAgICAgT3V0
cHV0IG1fb3V0OwogICAgIAogICAgIExCYXNpY0Jsb2NrIG1fcHJvbG9ndWU7CisgICAgTEJhc2lj
QmxvY2sgbV9pbml0aWFsaXphdGlvbjsKICAgICBIYXNoTWFwPEJhc2ljQmxvY2sqLCBMQmFzaWNC
bG9jaz4gbV9ibG9ja3M7CiAgICAgCiAgICAgTFZhbHVlIG1fY2FsbEZyYW1lOwogICAgIExWYWx1
ZSBtX3RhZ1R5cGVOdW1iZXI7CiAgICAgTFZhbHVlIG1fdGFnTWFzazsKLSAgICBMVmFsdWUgbV9h
Ym9ydEZ1bmN0aW9uOwogICAgIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3Bz
OwogICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0OwpAQCAtMTE2NSwx
NSArMTU2NywyMSBAQCBwcml2YXRlOgogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9qc1Zh
bHVlVmFsdWVzOwogICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9ib29sZWFuVmFsdWVzOwog
ICAgIEhhc2hNYXA8Tm9kZSosIExWYWx1ZT4gbV9zdG9yYWdlVmFsdWVzOworICAgIEhhc2hNYXA8
Tm9kZSosIHVuc2lnbmVkPiBtX3RpbWVUb0xpdmU7CiAgICAgCiAgICAgT3BlcmFuZHM8TFZhbHVl
PiBtX2xvY2Fsc0Jvb2xlYW47CiAgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczMyOwogICAg
IE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHM2NDsKICAgICAKKyAgICBPcGVyYW5kczxWYWx1ZVNv
dXJjZT4gbV92YWx1ZVNvdXJjZXM7CisgICAgaW50IG1fbGFzdFNldE9wZXJhbmQ7CisgICAgRXhp
dFRodW5rR2VuZXJhdG9yIG1fZXhpdFRodW5rR2VuZXJhdG9yOworICAgIAogICAgIEFic3RyYWN0
U3RhdGUgbV9zdGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKICAgICBCYXNpY0Js
b2NrKiBtX25leHRIaWdoQmxvY2s7CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0TG93QmxvY2s7Cisg
ICAgdW5zaWduZWQgbV9ub2RlSW5kZXg7CiAgICAgTm9kZSogbV9ub2RlOwogICAgIFNwZWN1bGF0
aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExPU1JFeGl0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworT1NSRXhpdDo6T1NSRXhpdCgKKyAg
ICBFeGl0S2luZCBleGl0S2luZCwgVmFsdWVGb3JtYXQgcHJvZmlsZVZhbHVlRm9ybWF0LAorICAg
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW4sCisgICAgaW50IGxhc3RTZXRPcGVyYW5kLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3Vt
ZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpCisgICAgOiBPU1JFeGl0QmFzZShleGl0S2lu
ZCwgY29kZU9yaWdpbikKKyAgICAsIG1fcHJvZmlsZVZhbHVlRm9ybWF0KHByb2ZpbGVWYWx1ZUZv
cm1hdCkKKyAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKKyAgICAsIG1fY29kZU9y
aWdpbihjb2RlT3JpZ2luKQorICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCisgICAgLCBt
X2xhc3RTZXRPcGVyYW5kKGxhc3RTZXRPcGVyYW5kKQorICAgICwgbV92YWx1ZXMobnVtYmVyT2ZB
cmd1bWVudHMsIG51bWJlck9mTG9jYWxzKQoreworfQorCitDb2RlTG9jYXRpb25KdW1wIE9TUkV4
aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKiBmdGxDb2RlQmxvY2spIGNvbnN0
Cit7CisgICAgcmV0dXJuIENvZGVMb2NhdGlvbkp1bXAoCisgICAgICAgIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KAorICAgICAgICAgICAgZnRsQ29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmZ0bCgp
LT5leGl0VGh1bmtzKCkuZGF0YUxvY2F0aW9uKCkpICsKKyAgICAgICAgbV9wYXRjaGFibGVDb2Rl
T2Zmc2V0KTsKK30KKwordm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKAorICAgIERGRzo6
QmFzaWNCbG9jayogYmxvY2ssIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJ
bmRleCwKKyAgICBjb25zdCBGb3JtYXR0ZWRWYWx1ZSAmdmFsdWUsIEV4aXRBcmd1bWVudExpc3Qm
IGFyZ3VtZW50cykKK3sKKyAgICBOb2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50Owor
ICAgIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2Rl
SW5kZXgsICEhdmFsdWVSZWNvdmVyeSk7CisKKyAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAh
PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCisgICAgbV9jb2RlT3JpZ2luID0gbm9k
ZS0+Y29kZU9yaWdpbjsKKyAgICAKKyAgICBpZiAoIXZhbHVlKQorICAgICAgICByZXR1cm47Cisg
ICAgCisgICAgaW50IG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQtPmxvY2FsKCk7Cisg
ICAgbV9sYXN0U2V0T3BlcmFuZCA9IG92ZXJyaWRkZW5PcGVyYW5kOworICAgIAorICAgIC8vIElz
IHRoZSB2YWx1ZSBmb3IgdGhpcyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBhbiBhcmd1bWVudCB0
byB0aGUgZXhpdCwgb3IgaXMKKyAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8gSWYgaXQncyBhbiBh
cmd1bWVudCBhbHJlYWR5LCB0aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsKKyAgICAvLyBvdGhl
cndpc2UgYWRkIGFub3RoZXIgYXJndW1lbnQuCisgICAgaWYgKG1fdmFsdWVzW292ZXJyaWRkZW5P
cGVyYW5kXS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgRXhpdEFyZ3VtZW50IGFyZ3VtZW50ID0g
bV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdLmV4aXRBcmd1bWVudCgpOworICAgICAgICBhcmd1
bWVudHNbZXhpdEFyZ3VtZW50LmFyZ3VtZW50KCldID0gdmFsdWUudmFsdWUoKTsKKyAgICAgICAg
bV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisg
ICAgICAgICAgICBleGl0QXJndW1lbnQud2l0aEZvcm1hdCh2YWx1ZS5mb3JtYXQoKSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIGFyZ3VtZW50ID0gYXJndW1l
bnRzLnNpemUoKTsKKyAgICBhcmd1bWVudHMuYXBwZW5kKHZhbHVlLnZhbHVlKCkpOworICAgIG1f
dmFsdWVzW21fbGFzdFNldE9wZXJhbmRdID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoCisgICAg
ICAgIEV4aXRBcmd1bWVudCh2YWx1ZS5mb3JtYXQoKSwgYXJndW1lbnQpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBGVExPU1JFeGl0X2gKKyNkZWZpbmUgRlRMT1NSRXhpdF9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgorI2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCisjaW5jbHVkZSAiREZHT1NS
RXhpdEJhc2UuaCIKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRM
RXhpdEFyZ3VtZW50TGlzdC5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUg
Ik1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgor
I2luY2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKKy8vIFRyYWNrcyBvbmUgT1NSIGV4aXQgc2l0ZSB3aXRoaW4gdGhlIEZUTCBKSVQuIE9T
UiBleGl0IGluIEZUTCB3b3JrcyBieSBkZWNvbnN0cnVjdGluZworLy8gdGhlIGNyYXp5IHRoYXQg
aXMgT1NSIGRvd24gdG8gc2ltcGxlIFNTQSBDRkcgcHJpbWl0aXZlcyB0aGF0IGFueSBjb21waWxl
ciBiYWNrZW5kCisvLyAoaW5jbHVkaW5nIG9mIGNvdXJzZSBMTFZNKSBjYW4gZ3JvayBhbmQgZG8g
bWVhbmluZ2Z1bCB0aGluZ3MgdG8uIEV4Y2VwdCBmb3IKKy8vIHdhdGNocG9pbnQtYmFzZWQgZXhp
dHMsIHdoaWNoIGhhdmVuJ3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQgKHNlZSB3ZWJraXQub3JnL2Iv
MTEzNjQ3KSwKKy8vIGFuIGV4aXQgaXMganVzdCBhIGNvbmRpdGlvbmFsIGJyYW5jaCBpbiB0aGUg
ZW1pdHRlZCBjb2RlIHdoZXJlIG9uZSBkZXN0aW5hdGlvbiBpcyB0aGUKKy8vIGNvbnRpbnVhdGlv
biBhbmQgdGhlIG90aGVyIGlzIGEgYmFzaWMgYmxvY2sgdGhhdCBwZXJmb3JtcyBhIG5vLXJldHVy
biB0YWlsLWNhbGwgdG8gYW4KKy8vIGV4aXQgdGh1bmsuIFRoaXMgdGh1bmsgdGFrZXMgYXMgaXRz
IGFyZ3VtZW50cyB0aGUgbGl2ZSBub24tY29uc3RhbnQKKy8vIG5vdC1hbHJlYWR5LWFjY291bnRl
ZC1mb3IgYnl0ZWNvZGUgc3RhdGUuIFRvIGFwcHJlY2lhdGUgaG93IHRoaXMgd29ya3MgY29uc2lk
ZXIgdGhlCisvLyBmb2xsb3dpbmcgSmF2YVNjcmlwdCBwcm9ncmFtLCBhbmQgaXRzIGxvd2VyaW5n
IGRvd24gdG8gTExWTSBJUiBpbmNsdWRpbmcgdGhlIHJlbGV2YW50CisvLyBleGl0czoKKy8vCisv
LyBmdW5jdGlvbiBmb28obykgeworLy8gICAgIHZhciBhID0gby5hOyAvLyBwcmVkaWN0ZWQgaW50
CisvLyAgICAgdmFyIGIgPSBvLmI7CisvLyAgICAgdmFyIGMgPSBvLmM7IC8vIE5CIHRoaXMgaXMg
ZGVhZAorLy8gICAgIGEgPSBhIHwgNTsgLy8gb3VyIGV4YW1wbGUgT1NSIGV4aXQ6IG5lZWQgdG8g
Y2hlY2sgaWYgYSBpcyBhbiBpbnQKKy8vICAgICByZXR1cm4gYSArIGI7CisvLyB9CisvLworLy8g
SnVzdCBjb25zaWRlciB0aGUgImEgfCA1Ii4gSW4gdGhlIERGRyBJUiwgdGhpcyBsb29rcyBsaWtl
OgorLy8KKy8vIEJpdE9yKENoZWNrOkludDMyOkBhLCBJbnQzMjo1KQorLy8KKy8vIFdoZXJlIEBh
IGlzIHRoZSBub2RlIGZvciB0aGUgR2V0TG9jYWwgbm9kZSB0aGF0IGdldHMgdGhlIHZhbHVlIG9m
IHRoZSAnYScgdmFyaWFibGUuCisvLyBDb25jZXB0dWFsbHksIHRoaXMgbm9kZSBjYW4gYmUgZnVy
dGhlciBicm9rZW4gZG93biB0byB0aGUgZm9sbG93aW5nIChub3RlIHRoYXQgdGhpcworLy8gcGFy
dGljdWxhciBsb3dlcmluZyBuZXZlciBhY3R1YWxseSBoYXBwZW5zIC0gd2Ugc2tpcCB0aGlzIHN0
ZXAgYW5kIGdvIHN0cmFpZ2h0IHRvCisvLyBMTFZNIElSIC0gYnV0IGl0J3Mgc3RpbGwgdXNlZnVs
IHRvIHNlZSB0aGlzKToKKy8vCisvLyBleGl0SWYoQGEgaXMgbm90IGludDMyKTsKKy8vIGNvbnRp
bnVhdGlvbjsKKy8vCisvLyBXaGVyZSAnZXhpdElmKCknIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxs
IGV4aXQgaWYgdGhlIGFyZ3VtZW50IGlzIHRydWUsIGFuZAorLy8gJ2NvbnRpbnVhdGlvbicgaXMg
dGhlIHN0dWZmIHRoYXQgd2Ugd2lsbCBkbyBhZnRlciB0aGUgZXhpdElmKCkgY2hlY2suIChOb3Rl
IHRoYXQKKy8vIEZUTCByZWZlcnMgdG8gJ2V4aXRJZigpJyBhcyAnc3BlY3VsYXRlKCknLCB3aGlj
aCBpcyBpbiBsaW5lIHdpdGggREZHIHRlcm1pbm9sb2d5LikKKy8vIFRoaXMgdGhlbiBnZXRzIGJy
b2tlbiBkb3duIHRvIHRoZSBmb2xsb3dpbmcgTExWTSBJUiwgYXNzdW1pbmcgdGhhdCAlMCBpcyB0
aGUgTExWTQorLy8gdmFsdWUgY29ycmVzcG9uZGluZyB0byB2YXJpYWJsZSAnYScsIGFuZCAlMSBp
cyB0aGUgTExWTSB2YWx1ZSBmb3IgdmFyaWFibGUgJ2InOgorLy8KKy8vICAgJTIgPSAuLi4gLy8g
dGhlIHByZWRpY3RhdGUgY29ycmVzcG9uZGluZyB0byAnQGEgaXMgbm90IGludDMyJworLy8gICBi
ciBpMSAlMiwgbGFiZWwgJTMsIGxhYmVsICU0CisvLyA7IDxsYWJlbD46MworLy8gICBjYWxsIHZv
aWQgZXhpdFRodW5rMSglMCwgJTEpIC8vIHBhc3MgJ2EnIGFuZCAnYicsIHNpbmNlIHRoZXkncmUg
Ym90aCBsaXZlLWluLWJ5dGVjb2RlCisvLyAgIHVucmVhY2hhYmxlCisvLyA7IDxsYWJlbD46NAor
Ly8gICAuLi4gLy8gY29kZSBmb3IgdGhlIGNvbnRpbnVhdGlvbgorLy8KKy8vIFdoZXJlICdleGl0
VGh1bmsxJyBpcyB0aGUgSVIgdG8gZ2V0IHRoZSBleGl0IHRodW5rIGZvciAqdGhpcyogT1NSIGV4
aXQuIEVhY2ggT1NSCisvLyBleGl0IHdpbGwgYXBwZWFyIHRvIExMVk0gdG8gaGF2ZSBhIGRpc3Rp
bmN0IGV4aXQgdGh1bmsuCisvLworLy8gTm90ZSB0aGF0IHRoaXMgZGlkbid0IGhhdmUgdG8gcGFz
cyAnNScsICdvJywgb3IgJ2MnIHRvIHRoZSBleGl0IHRodW5rLiA1IGlzIGEKKy8vIGNvbnN0YW50
IGFuZCB0aGUgREZHIGFscmVhZHkga25vd3MgdGhhdCwgYW5kIGNhbiBhbHJlYWR5IHRlbGwgdGhl
IE9TUiBleGl0IG1hY2hpbmVyeQorLy8gd2hhdCB0aGF0IGNvbnRhbnQgaXMgYW5kIHdoaWNoIGJ5
dGVjb2RlIHZhcmlhYmxlcyAoaWYgYW55KSBpdCBuZWVkcyB0byBiZSBkcm9wcGVkCisvLyBpbnRv
LiBUaGlzIGlzIGNvbnZleWVkIHRvIHRoZSBleGl0IHN0YXRpY2FsbHksIHZpYSB0aGUgT1NSRXhp
dCBkYXRhIHN0cnVjdHVyZSBiZWxvdy4KKy8vIFNlZSB0aGUgY29kZSBmb3IgRXhpdFZhbHVlIGZv
ciBkZXRhaWxzLiAnbycgaXMgYW4gYXJndW1lbnQsIGFuZCBhcmd1bWVudHMgYXJlIGFsd2F5cwor
Ly8gImZsdXNoZWQiIC0gaWYgeW91IG5ldmVyIGFzc2lnbiB0aGVtIHRoZW4gdGhlaXIgdmFsdWVz
IGFyZSBzdGlsbCBpbiB0aGUgYXJndW1lbnQKKy8vIHN0YWNrIHNsb3RzLCBhbmQgaWYgeW91IGRv
IGFzc2lnbiB0aGVtIHRoZW4gd2UgZWFnZXJseSBzdG9yZSB0aGVtIGludG8gdGhvc2Ugc2xvdHMu
CisvLyAnYycgaXMgZGVhZCBpbiBieXRlY29kZSwgYW5kIHRoZSBERkcga25vd3MgdGhpczsgd2Ug
c3RhdGljYWxseSB0ZWxsIHRoZSBleGl0IHRodW5rCisvLyB0aGF0IGl0J3MgZGVhZCBhbmQgZG9u
J3QgaGF2ZSB0byBwYXNzIGFueXRoaW5nLiBUaGUgZXhpdCB0aHVuayB3aWxsICJpbml0aWFsaXpl
IiBpdHMKKy8vIHZhbHVlIHRvIFVuZGVmaW5lZC4KKy8vCisvLyBUaGlzIGFwcHJvYWNoIHRvIE9T
UiBleGl0IGhhcyBhIG51bWJlciBvZiB2aXJ0dWVzOgorLy8KKy8vIC0gSXQgaXMgYW4gZW50aXJl
bHkgdW5zdXJwcmlzaW5nIHJlcHJlc2VudGF0aW9uIGZvciBhIGNvbXBpbGVyIHRoYXQgYWxyZWFk
eSBncm9rcworLy8gICBDRkctbGlrZSBJUnMgZm9yIEMtbGlrZSBsYW5ndWFnZXMuIEFsbCBleGlz
dGluZyBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zIGp1c3QKKy8vICAgd29yay4KKy8vCisv
LyAtIEl0IGxlbmRzIGl0c2VsZiBuYXR1cmFsbHkgdG8gbW9kZXJuIGFwcHJvYWNoZXMgdG8gY29k
ZSBtb3Rpb24uIEZvciBleGFtcGxlLCB5b3UKKy8vICAgY291bGQgc2luayBvcGVyYXRpb25zIGZy
b20gYWJvdmUgdGhlIGV4aXQgdG8gYmVsb3cgaXQsIGlmIHlvdSBqdXN0IGR1cGxpY2F0ZSB0aGUK
Ky8vICAgb3BlcmF0aW9uIGludG8gdGhlIE9TUiBleGl0IGJsb2NrLiBUaGlzIGlzIGJvdGggbGVn
YWwgYW5kIGRlc2lyYWJsZS4gSXQgd29ya3MKKy8vICAgYmVjYXVzZSB0aGUgYmFja2VuZCBzZWVz
IHRoZSBPU1IgZXhpdCBibG9jayBhcyBiZWluZyBubyBkaWZmZXJlbnQgdGhhbiBhbnkgb3RoZXIs
CisvLyAgIGFuZCBMTFZNIGFscmVhZHkgc3VwcG9ydHMgc2lua2luZyBpZiBpdCBzZWVzIHRoYXQg
YSB2YWx1ZSBpcyBvbmx5IHBhcnRpYWxseSB1c2VkLgorLy8gICBIZW5jZSB0aGVyZSBleGlzdHMg
YSB2YWx1ZSB0aGF0IGRvbWluYXRlcyB0aGUgZXhpdCBidXQgaXMgb25seSB1c2VkIGJ5IHRoZSBl
eGl0CisvLyAgIHRodW5rIGFuZCBub3QgYnkgdGhlIGNvbnRpbnVhdGlvbiwgc2lua2luZyBvdWdo
dCB0byBraWNrIGluIGZvciB0aGF0IHZhbHVlLgorLy8gICBIb2lzdGluZyBvcGVyYXRpb25zIGZy
b20gYmVsb3cgaXQgdG8gYWJvdmUgaXQgaXMgYWxzbyBwb3NzaWJsZSwgZm9yIHNpbWlsYXIKKy8v
ICAgcmVhc29ucy4KKy8vCisvLyAtIFRoZSBuby1yZXR1cm4gdGFpbC1jYWxsIHRvIHRoZSBPU1Ig
ZXhpdCB0aHVuayBjYW4gYmUgc3ViamVjdGVkIHRvIHNwZWNpYWxpemVkCisvLyAgIGNvZGUtc2l6
ZSByZWR1Y3Rpb24gb3B0aW1pemF0aW9ucywgdGhvdWdoIHRoaXMgaXMgb3B0aW9uYWwuIEZvciBl
eGFtcGxlLCBpbnN0ZWFkCisvLyAgIG9mIGFjdHVhbGx5IGVtaXR0aW5nIGEgY2FsbCBhbG9uZyB3
aXRoIGFsbCB0aGF0IGdvZXMgd2l0aCBpdCAobGlrZSBwbGFjaW5nIHRoZQorLy8gICBhcmd1bWVu
dHMgaW50byBhcmd1bWVudCBwb3NpdGlvbiksIHRoZSBiYWNrZW5kIGNvdWxkIGNob29zZSB0byBz
aW1wbHkgaW5mb3JtIHVzCisvLyAgIHdoZXJlIGl0IGhhZCBwbGFjZWQgdGhlIGFyZ3VtZW50cyBh
bmQgZXhwZWN0IHRoZSBjYWxsZWUgKGkuZS4gdGhlIGV4aXQgdGh1bmspIHRvCisvLyAgIGZpZ3Vy
ZSBpdCBvdXQgZnJvbSB0aGVyZS4gSXQgY291bGQgYWxzbyB0ZWxsIHVzIHdoYXQgd2UgbmVlZCB0
byBkbyB0byBwb3Agc3RhY2ssCisvLyAgIGFsdGhvdWdoIGFnYWluLCBpdCBkb2Vzbid0IGhhdmUg
dG87IGl0IGNvdWxkIGp1c3QgZW1pdCB0aGF0IGNvZGUgbm9ybWFsbHkuIFRob3VnaAorLy8gICB3
ZSBkb24ndCBzdXBwb3J0IHRoaXMgeWV0LCB3ZSBjb3VsZDsgdGhlIG9ubHkgdGhpbmcgdGhhdCB3
b3VsZCBjaGFuZ2Ugb24gb3VyIGVuZAorLy8gICBpcyB0aGF0IHdlJ2QgbmVlZCBmZWVkYmFjayBm
cm9tIHRoZSBiYWNrZW5kIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgYXJndW1lbnRzCisvLyAg
IGFuZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRvbmUgdG8g
cG9wIHN0YWNrLiBUaGlzIHdvdWxkCisvLyAgIGludm9sdmUgc3dpdGNoaW5nIHRoZSBtX3ZhbHVl
cyBhcnJheSB0byB1c2Ugc29tZXRoaW5nIG1vcmUgYWtpbiB0byBWYWx1ZVJlY292ZXJ5CisvLyAg
IHJhdGhlciB0aGFuIHRoZSBjdXJyZW50IEV4aXRWYWx1ZSwgYWxiZWl0IHBvc3NpYmx5IHdpdGgg
c29tZSBoYWNrcyB0byBiZXR0ZXIKKy8vICAgdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgcGxhY2Vz
IHdoZXJlIHRoZSBMTFZNIGJhY2tlbmQgd291bGQgcHV0IHZhbHVlcy4KKy8vCisvLyAtIEl0IGNv
dWxkIGJlIGV4dGVuZGVkIHRvIGFsbG93IHRoZSBiYWNrZW5kIHRvIGRvIGl0cyBvd24gZXhpdCBo
b2lzdGluZywgYnkgdXNpbmcKKy8vICAgaW50cmluc2ljcyAob3IgbWV0YS1kYXRhLCBvciBzb21l
dGhpbmcpIHRvIGluZm9ybSB0aGUgYmFja2VuZCB0aGF0IGl0J3Mgc2FmZSB0bworLy8gICBtYWtl
IHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0SWYoKScgbW9yZSB0cnV0aHkuCisvLworLy8g
LSBJdCBjb3VsZCBiZSBleHRlbmRlZCB0byBzdXBwb3J0IHdhdGNocG9pbnRzIChzZWUgd2Via2l0
Lm9yZy9iLzExMzY0NykgYnkgbWFraW5nCisvLyAgIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdl
eGl0SWYoKScgYmUgYW4gaW50cmluc2ljIHRoYXQgdGhlIGJhY2tlbmQga25vd3MgdG8gYmUKKy8v
ICAgdHJ1ZSBhdCBjb21waWxlLXRpbWUuIFRoZSBiYWNrZW5kIGNvdWxkIHRoZW4gdHVybiB0aGUg
Y29uZGl0aW9uYWwgYnJhbmNoIGludG8gYQorLy8gICByZXBsYWNlYWJsZSBqdW1wLCBtdWNoIGxp
a2UgdGhlIERGRyBkb2VzLgorCitzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7
CisgICAgT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQsIFZhbHVlRm9ybWF0IHByb2ZpbGVWYWx1
ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKKyAgICAgICAgQ29kZU9yaWdp
biwgaW50IGxhc3RTZXRPcGVyYW5kLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywKKyAgICAg
ICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBtX2NvZGU7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBleGl0
IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgorICAgIC8vIElmIHRoYXQn
cyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3ZSdsbCBoYXZl
IGEKKyAgICAvLyBtZXRob2Qgb2YgZ2V0dGluZyBhIHZhbHVlIHByb2ZpbGUuIE5vdGUgdGhhdCBh
bGwgb2YgdGhlIEV4aXRBcmd1bWVudCdzCisgICAgLy8gYXJlIGFscmVhZHkgYXdhcmUgb2YgdGhp
cyBwb3NzaWJsZSBvZmYtYnktb25lLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisgICAgLy8gY29y
cmVjdCB0aGVtLgorICAgIFZhbHVlRm9ybWF0IG1fcHJvZmlsZVZhbHVlRm9ybWF0OworICAgIE1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92YWx1ZVByb2ZpbGU7CisgICAgCisgICAgQ29k
ZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgCisgICAgLy8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhp
dCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhpcyBleGl0LgorICAgIHVuc2lnbmVkIG1fcGF0Y2hh
YmxlQ29kZU9mZnNldDsKKyAgICAKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICAKKyAg
ICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOworICAgIAorICAgIENvZGVMb2NhdGlvbkp1
bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7
CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJkKAorICAgICAgICBERkc6OkJhc2ljQmxv
Y2sqLCBERkc6Ok5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsCisgICAgICAg
IGNvbnN0IEZvcm1hdHRlZFZhbHVlJiwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCisjZW5kaWYgLy8gRlRMT1NSRXhpdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRDb21waWxhdGlvbklu
Zm9faAorI2RlZmluZSBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExBYmJy
ZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyB7Cisg
ICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCisgICAgICAgIDogbV90aHVua0FkZHJlc3MoMCkK
KyAgICB7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBtX3RodW5rTGFi
ZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXAgbV90aHVua0p1bXA7CisgICAg
TFZhbHVlIG1fdGh1bmtBZGRyZXNzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsZXIuaCIKKworI2lmIEVO
QUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCisj
aW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCisjaW5jbHVkZSAiRlRMQ0FyZ3VtZW50
R2V0dGVyLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworZXh0ZXJuICJD
IiB2b2lkKiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGV4aXRJ
RCkKK3sKKyAgICBTYW1wbGluZ1JlZ2lvbiBzYW1wbGluZ1JlZ2lvbigiRlRMIE9TUiBFeGl0IENv
bXBpbGF0aW9uIik7CisgICAgCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2Rl
QmxvY2soKTsKKyAgICAKKyAgICBBU1NFUlQoY29kZUJsb2NrKTsKKyAgICBBU1NFUlQoY29kZUJs
b2NrLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29kZTo6RlRMSklUKTsKKyAgICAKKyAgICBKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEgPSAmZXhlYy0+Z2xvYmFsRGF0YSgpOworICAgIAorICAgIE9TUkV4
aXQmIGV4aXQgPSBjb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZnRsKCktPm9zckV4aXRbZXhpdElE
XTsKKyAgICAKKyAgICBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhpdC5tX2NvZGVPcmln
aW4pOworICAgIAorICAgIENDYWxsSGVscGVycyBqaXQoZ2xvYmFsRGF0YSwgY29kZUJsb2NrKTsK
KyAgICAKKyAgICAvLyBUaGlzIGlzIGFjdHVhbGx5IGZhaXJseSBlYXN5LCBldmVuIHRob3VnaCBp
dCBpcyBob3JyaWJseSBncm9zcy4gV2Uga25vdyB0aGF0CisgICAgLy8gTExWTSB3b3VsZCBoYXZl
IHBhc3NlcyB1cyBhbGwgb2YgdGhlIHN0YXRlIHZpYSBhcmd1bWVudHMuIFdlIGtub3cgaG93IHRv
IGdldAorICAgIC8vIHRoZSBhcmd1bWVudHMuIEFuZCwgd2Uga25vdyBob3cgdG8gcG9wIHN0YWNr
IGJhY2sgdG8gdGhlIEpJVCBzdGFjayBmcmFtZSwgc29ydAorICAgIC8vIG9mOiB3ZSBrbm93IHRo
YXQgaXQncyB0d28gZnJhbWVzIGJlbmVhdGggdXMuIFRoaXMgaXMgdGVycmlibGUgYW5kIEkgZmVl
bAorICAgIC8vIGFzaGFtZWQgb2YgaXQsIGJ1dCBpdCB3aWxsIHdvcmsgZm9yIG5vdy4KKyAgICAK
KyAgICBDQXJndW1lbnRHZXR0ZXIgYXJndW1lbnRzKGppdCk7CisgICAgCisgICAgLy8gRmlyc3Qg
cmVjb3ZlciBvdXIgY2FsbCBmcmFtZSBhbmQgdGFnIHRoaW5naWVzLgorICAgIGFyZ3VtZW50cy5s
b2FkUHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBqaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
VGFnTWFzayksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgCisgICAgLy8gRG8gc29t
ZSB2YWx1ZSBwcm9maWxpbmcuCisgICAgCisgICAgCisgICAgLy8gU3RhcnQgYnkgZHVtcGluZyBh
bGwgYXJndW1lbnQgZXhpdCB2YWx1ZXMgdG8gdGhlIHN0YWNrLgorICAgIAorICAgIFZlY3RvcjxF
eGl0QXJndW1lbnRGb3JPcGVyYW5kLCAxNj4gc29ydGVkQXJndW1lbnRzOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEV4
aXRWYWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaV07CisgICAgICAgIGlmICghdmFsdWUuaXNB
cmd1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHNvcnRlZEFyZ3VtZW50
cy5hcHBlbmQoRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCgKKyAgICAgICAgICAgIHZhbHVlLmV4aXRB
cmd1bWVudCgpLCBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKSkpOworICAgIH0KKyAg
ICBzdGQ6OnNvcnQoc29ydGVkQXJndW1lbnRzLmJlZ2luKCksIHNvcnRlZEFyZ3VtZW50cy5lbmQo
KSwgbGVzc2VyQXJndW1lbnRJbmRleCk7CisgICAgCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBGVExPU1JFeGl0Q29tcGlsZXJfaAorI2RlZmluZSBGVExPU1JF
eGl0Q29tcGlsZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUYWtlcyB0
aGUgY2FsbCBmcmFtZSBhbmQgdGhlIGluZGV4IG9mIHRoZSBleGl0LCBhbmQgcmV0dXJucyB0aGUg
YWRkcmVzcyB0bworLy8ganVtcCB0by4KK2V4dGVybiAiQyIgdm9pZCogREZHX09QRVJBVElPTiBj
b21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0SUQpIFdURl9JTlRFUk5B
TDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9K
SVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0Q29tcGlsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxOSArMTM1
LDIwIEBAIHB1YmxpYzoKICAgICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5
cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExW
YWx1ZSBpbnRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRD
YXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGNhc3RUb0ludDMyKExW
YWx1ZSB2YWx1ZSkgeyByZXR1cm4gaW50Q2FzdCh2YWx1ZSwgaW50MzIpOyB9CisgICAgTFZhbHVl
IGludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0
cihtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAogICAgIExWYWx1ZSBnZXQoTFZhbHVl
IHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQog
ICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBi
dWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7IH0KICAgICAKICAgICBMVmFs
dWUgbG9hZChUeXBlZFBvaW50ZXIgcG9pbnRlciwgTFR5cGUgcmVmVHlwZSkKICAgICB7Ci0gICAg
ICAgIExWYWx1ZSByZXN1bHQgPSBnZXQoYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHBvaW50ZXIu
dmFsdWUoKSwgcmVmVHlwZSkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gZ2V0KGludFRvUHRy
KHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNv
cmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwogICAgICAgICByZXR1cm4gcmVzdWx0
OwogICAgIH0KICAgICB2b2lkIHN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50
ZXIsIExUeXBlIHJlZlR5cGUpCiAgICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gc2V0KHZh
bHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRlciwgcG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7
CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBzZXQodmFsdWUsIGludFRvUHRyKHBvaW50ZXIudmFs
dWUoKSwgcmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0
aW9uKHJlc3VsdCwgKm1faGVhcHMpOwogICAgIH0KICAgICAKQEAgLTI0NCwxMCArMjQ1LDE4IEBA
IHB1YmxpYzoKICAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBM
VmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRh
a2VuLCBub3RUYWtlbik7IH0KICAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWws
IHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1aWxkZXIsIGFn
Z1ZhbCwgaW5kZXgpOyB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4K
KyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3Rv
cikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvcik7IH0KICAg
ICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxk
ZXIsIGZ1bmN0aW9uKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQog
ICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcy
KSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMik7IH0K
ICAgICAKKyAgICBMVmFsdWUgY29udmVydFRvVGFpbENhbGwoTFZhbHVlIGNhbGwpCisgICAgewor
ICAgICAgICBzZXRUYWlsQ2FsbChjYWxsLCBJc1RhaWxDYWxsKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAogICAgIHZvaWQganVtcChMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikg
eyBidWlsZEJyKG1fYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CiAgICAgdm9pZCBicmFuY2goTFZh
bHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIExCYXNpY0Jsb2NrIG5vdFRha2VuKSB7
IGJ1aWxkQ29uZEJyKG1fYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAg
ICAgdm9pZCByZXQoTFZhbHVlIHZhbHVlKSB7IGJ1aWxkUmV0KG1fYnVpbGRlciwgdmFsdWUpOyB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNDgwNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZUTEFi
YnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMT1NS
RXhpdENvbXBpbGF0aW9uSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoK
ICAgICBMTW9kdWxlIG1vZHVsZTsKICAgICBMVmFsdWUgZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJ
VENvZGU+IGppdENvZGU7CisgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4
aXQ7CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKKworI2lm
IEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisg
ICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChHUFJJbmZv
OjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJl
Z2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEt
PnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSog
YnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRh
QnVmZmVyKCkpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpu
dW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5zdG9yZTY0KEdQUklu
Zm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgewor
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihidWZmZXIgKyBH
UFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzICsgaSksIEdQUkluZm86Om5vbkFyZ0dQ
UjEpOworICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVy
KGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbCBHQyBt
YXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5n
IGNhbGwuCisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRj
aEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICBq
aXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBH
UFJJbmZvOjpub25BcmdHUFIxKTsKKworICAgIC8vIGFyZ3VtZW50IDAgaXMgYWxyZWFkeSB0aGUg
Y2FsbCBmcmFtZS4KKyAgICBqaXQubW92ZShHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjph
cmd1bWVudEdQUjEpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGpp
dC5jYWxsKCk7CisgICAgCisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1Q
dHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2
ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cigwKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lz
dGVyczsgKytpKSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBpKSwgR1BS
SW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUo
R1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSLCBGUFJJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoaSkpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6
bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKQorICAgICAgICBqaXQubG9hZDY0KGJ1ZmZl
ciArIGksIEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgCisgICAgaml0Lmp1
bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hC
dWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hCdWZm
ZXIubGluayhmdW5jdGlvbkNhbGwsIGNvbXBpbGVGVExPU1JFeGl0KTsKKyAgICByZXR1cm4gRklO
QUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIp
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFRodW5rc19oCisjZGVmaW5lIEZUTFRodW5rc19oCisK
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5j
bHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBKU0dsb2JhbERhdGE7CisKK25hbWVzcGFjZSBGVEwgeworCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExUSHVua3NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExW
YWx1ZUZvcm1hdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZUZvcm1hdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZUZvcm1hdCBmb3JtYXQpCit7
CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIEludmFsaWRWYWx1ZUZvcm1hdDoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZh
bHVlRm9ybWF0SW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRVSW50MzI6CisgICAgICAgIG91dC5wcmludCgiVUlu
dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjoKKyAg
ICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZh
bHVlRm9ybWF0SlNWYWx1ZToKKyAgICAgICAgb3V0LnByaW50KCJKU1ZhbHVlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQo
IkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFs
dWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlRm9ybWF0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFZhbHVlRm9ybWF0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlRm9y
bWF0X2gKKyNkZWZpbmUgRlRMVmFsdWVGb3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIE5vdGUgdGhhdCB0aGlz
IGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlND
LCBleGNlcHQgdGhhdAorLy8gdW5saWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVy
eSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCisKK2VudW0gVmFs
dWVGb3JtYXQgeworICAgIEludmFsaWRWYWx1ZUZvcm1hdCwKKyAgICBWYWx1ZUZvcm1hdEludDMy
LAorICAgIFZhbHVlRm9ybWF0VUludDMyLAorICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKKyAgICBW
YWx1ZUZvcm1hdEpTVmFsdWUsCisgICAgVmFsdWVGb3JtYXREb3VibGUKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6RlRMOjpWYWx1ZUZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExWYWx1ZUZv
cm1hdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3Vy
Y2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1
ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiRlRMVmFsdWVTb3VyY2UuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2Ug
U291cmNlTm90U2V0OgorICAgICAgICBvdXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJW
YWx1ZUluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluSlNTdGFj
azoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5K
U1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6CisgICAg
ICAgIG91dC5wcmludCgiVmFsdWVJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbnQzMkluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIkludDMySW5Mb2NhbHMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9vbGVhbkluTG9jYWxzOgorICAgICAgICBvdXQucHJp
bnQoIkJvb2xlYW5JbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJ
bkxvY2FsczoKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGVJbkxvY2FscyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6CisgICAgICAgIG91dC5wcmludCgiQXJn
dW1lbnRzU291cmNlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNvdXJjZUlzRGVhZDoK
KyAgICAgICAgb3V0LnByaW50KCJTb3VyY2VJc0RlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIG91dC5wcmludCgiTm9kZSgiLCBub2RlKCksICIpIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5B
QkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVT
b3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVl
U291cmNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlU291cmNl
X2gKKyNkZWZpbmUgRlRMVmFsdWVTb3VyY2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCitlbnVtIFZhbHVlU291cmNlS2luZCB7CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVl
SW5KU1N0YWNrLAorICAgIEludDMySW5KU1N0YWNrLAorICAgIERvdWJsZUluSlNTdGFjaywKKyAg
ICBWYWx1ZUluTG9jYWxzLAorICAgIEludDMySW5Mb2NhbHMsCisgICAgQm9vbGVhbkluTG9jYWxz
LAorICAgIERvdWJsZUluTG9jYWxzLAorICAgIEFyZ3VtZW50c1NvdXJjZSwKKyAgICBTb3VyY2VJ
c0RlYWQsCisgICAgSGF2ZU5vZGUKK307CisKK2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoK
KyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAgIDogbV92YWx1ZShTb3VyY2VOb3RTZXQpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQg
a2luZCkKKyAgICAgICAgOiBtX3ZhbHVlKGtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBl
eHBsaWNpdCBWYWx1ZVNvdXJjZShERkc6Ok5vZGUqIG5vZGUpCisgICAgICAgIDogbV92YWx1ZShi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZh
bHVlU291cmNlS2luZCgpIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUg
PCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KEhhdmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtpbmQ+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gSGF2
ZU5vZGU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpICE9IFNvdXJjZU5vdFNldDsgfQorICAgIAorICAgIERGRzo6Tm9kZSogbm9kZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxERkc6Ok5vZGUqPihtX3ZhbHVlKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdWludHB0
cl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTFZhbHVlU291cmNlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197373</attachid>
            <date>2013-04-10 12:29:22 -0700</date>
            <delta_ts>2013-04-10 21:10:41 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>146855</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4OCBA
QAorMjAxMy0wNC0wNSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICog
YXNzZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6b2Zmc2V0
T2YpOgorICAgICAgICAoTGlua0J1ZmZlcik6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgor
ICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpiZWxv
bmdzSW5NaW5pZmllZEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcpOgorICAgICAgICAoREZHKToK
KyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkZvcndhcmRSZXdpcmluZyk6CisgICAgICAgICog
ZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6Ok9TUkV4aXQp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgorICAgICAgICAoT1NSRXhpdCk6
CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmNwcDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVl
bnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpkb1NlYXJj
aEZvckZvcndhcmRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdEJhc2UuaDog
QWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpP
U1JFeGl0QmFzZSk6CisgICAgICAgIChPU1JFeGl0QmFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVNvdXJj
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBmdGwvRlRM
QWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpmdW5j
dGlvblR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OnR5cGVPZik6CisgICAgICAgIChKU0M6OkZU
TDo6YnVpbGRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpzZXRUYWlsQ2FsbCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0
QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50
UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OndpdGhGb3JtYXQpOgorICAgICAgICAoSlND
OjpGVEw6OkV4aXRBcmd1bWVudDo6cmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExF
eGl0QXJndW1lbnRMaXN0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwv
RlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6RXhpdFRodW5rR2VuZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3Ip
OgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaHVua0dlbmVyYXRvcjo6ZW1pdFRodW5rKToKKyAg
ICAgICAgKiBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgICogZnRsL0ZUTEV4aXRW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChGVEwpOgorICAgICAgICAoRXhpdFZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
VmFsdWU6OkV4aXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpvcGVyYXRv
ciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZGVhZCk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdFZhbHVlOjppbkpTU3RhY2spOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppbkpT
U3RhY2tBc0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aW5KU1N0YWNr
QXNEb3VibGUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6Y29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0VmFsdWU6OmtpbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNE
ZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzSW5KU1N0YWNrU29tZWhvdyk6
CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0VmFsdWU6OmlzQXJndW1lbnQpOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0
ZWRWYWx1ZS5oOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpub1ZhbHVlKToK
KyAgICAgICAgKEpTQzo6RlRMOjppbnQzMlZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjp1SW50
MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6Ym9vbGVhblZhbHVlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpqc1ZhbHVlVmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OmRvdWJsZVZhbHVlKToK
KyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29k
ZTo6aW5pdGlhbGl6ZUV4aXRUaHVua3MpOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6
RlRMOjpKSVRDb2RlOjpleGl0VGh1bmtzKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgor
ICAgICAgICAoSklUQ29kZSk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoK
KyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2Vy
REZHVG9MTFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cmFuc2ZlckFuZENoZWNrQXJndW1l
bnRzKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoTG93
ZXJERkdUb0xMVk0pOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxl
TW92SGludCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVab21i
aWVIaW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhp
bnRBbmRDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVB
ZGQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhTdWIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVUludDMyVG9OdW1iZXIp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1
cmUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlWYWwp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUZvcndhcmQpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpiYWNrd2FyZFR5cGVDaGVjayk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmZvcndhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxv
d2VyREZHVG9MTFZNOjphcHBlbmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpsb3dJbnQzMik6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dCb29sZWFu
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlT2JqZWN0KToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aXNMaXZlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dXNlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5kT1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6
TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjp0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YWRkRXhpdEFyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFs
aXphdGlvbkJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6b2JzZXJ2
ZU1vdkhpbnQpOgorICAgICAgICAqIGZ0bC9GVExPU1JFeGl0LmNwcDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAo
SlNDOjpGVEw6Ok9TUkV4aXQ6OmNvZGVMb2NhdGlvbkZvclJlcGF0Y2gpOgorICAgICAgICAoSlND
OjpGVEw6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGZ0bC9GVExPU1JF
eGl0Lmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKE9TUkV4aXQpOgorICAgICAg
ICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Q29tcGlsYXRpb25JbmZvOjpPU1JFeGl0Q29t
cGlsYXRpb25JbmZvKToKKyAgICAgICAgKE9TUkV4aXRDb21waWxhdGlvbkluZm8pOgorICAgICAg
ICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvUHRy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6c3RvcmUpOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpP
dXRwdXQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y29udmVydFRvVGFpbENh
bGwpOgorICAgICAgICAqIGZ0bC9GVExTdGF0ZS5oOgorICAgICAgICAoU3RhdGUpOgorICAgICAg
ICAqIGZ0bC9GVExUaHVua3MuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExWYWx1
ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorICAgICAg
ICAqIGZ0bC9GVExWYWx1ZVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTFZhbHVl
U291cmNlLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKFZhbHVlU291cmNlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlZhbHVlU291cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNv
dXJjZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6bm9kZSk6
CisKIDIwMTMtMDQtMDkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3VydGhUaWVyOiBERkcgc2hvdWxkIHByb3ZpZGUgdXRpbGl0aWVzIGZvciBjb21tb24gT1NS
IGV4aXQgdGFza3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlu
a0J1ZmZlci5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwxMSBAQCBw
dWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBseU9mZnNldChsYWJlbC5tX2xhYmVsKS5tX29mZnNl
dDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBvZmZzZXRPZihQYXRjaGFibGVKdW1wIGp1bXApCisg
ICAgeworICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQoanVtcC5tX2p1bXAubV9sYWJlbCkubV9v
ZmZzZXQ7CisgICAgfQorCiAgICAgLy8gVXBvbiBjb21wbGV0aW9uIG9mIGFsbCBwYXRjaGluZyAn
RklOQUxJWkVfQ09ERSgpJyBzaG91bGQgYmUgY2FsbGVkIG9uY2UgdG8KICAgICAvLyBjb21wbGV0
ZSBnZW5lcmF0aW9uIG9mIHRoZSBjb2RlLiBBbHRlcm5hdGl2ZWx5LCBjYWxsCiAgICAgLy8gZmlu
YWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYgeW91IGhhdmUgeW91ciBv
d24gd2F5IG9mCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3Rh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJh
Y3RTdGF0ZS5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDggQEAg
dm9pZCBBYnN0cmFjdFN0YXRlOjppbml0aWFsaXplKEdyYXBoJiBncgogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24gPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+cHJlZGljdGlvbigpOworICAgICAg
ICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0KKyAgICAgICAgICAgIG5vZGUtPnZhcmlhYmxl
QWNjZXNzRGF0YSgpLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBpZiAoaXNJ
bnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcm9vdC0+dmFsdWVzQXRI
ZWFkLmFyZ3VtZW50KGkpLnNldChTcGVjSW50MzIpOwogICAgICAgICBlbHNlIGlmIChpc0Jvb2xl
YW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR1BSSW5mby5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dQUkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMzY3LDcgKzM2Nyw3IEBAIHB1Ymxp
YzoKICAgICAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZWdpc3RlckZvckluZGV4W251bWJlck9m
QXJndW1lbnRSZWdpc3RlcnNdID0geyBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwgYXJndW1l
bnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1IH07CiAgICAg
ICAgIHJldHVybiByZWdpc3RlckZvckluZGV4W2luZGV4XTsKICAgICB9Ci0KKyAgICAKICAgICBz
dGF0aWMgdW5zaWduZWQgdG9JbmRleChHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAgQVNTRVJU
KHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
NyBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAgY2FzZSBQ
aGFudG9tQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlQoIW5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyh0eXBlKSAmJiAhbmVlZHNPU1JG
b3J3YXJkUmV3aXJpbmcodHlwZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQ4
MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yODcsNiArMjg3LDI1IEBAIGlubGluZSBOb2RlRmxhZ3MgZGVmYXVsdEZsYWdz
KE5vZGVUeXBlIG8KICAgICB9CiB9CiAKK2lubGluZSBib29sIG5lZWRzT1NSQmFja3dhcmRSZXdp
cmluZyhOb2RlVHlwZSBvcCkKK3sKKyAgICByZXR1cm4gb3AgPT0gVUludDMyVG9OdW1iZXI7Cit9
CisKK2lubGluZSBib29sIG5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9wKQorewor
ICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBGb3J3
YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNlIFVJbnQz
MlRvTnVtYmVyOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE0ODA0NykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM2LDE1ICszNiwxMyBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNWYWx1ZVNv
dXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNwZWN1bGF0
aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4
KQotICAgIDogbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCisgICAgOiBPU1JFeGl0QmFz
ZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKKyAgICAsIG1fanNWYWx1ZVNvdXJjZShq
c1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQogICAgICwg
bV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCiAgICAgLCBtX2NvZGVPcmlnaW4oaml0LT5tX2NvZGVP
cmlnaW5Gb3JPU1IpCi0gICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShtX2NvZGVPcmln
aW4pCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1fd2F0Y2hw
b2ludEluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAgICAsIG1f
a2luZChraW5kKQotICAgICwgbV9jb3VudCgwKQogICAgICwgbV9zdHJlYW1JbmRleChzdHJlYW1J
bmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5kKQogewpA
QCAtNzMsNTcgKzcxLDE0IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1ZmZlciYg
bGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGxhYmVs
KTsKIH0KIAotYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNs
b3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2sp
Ci17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2st
Pm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVu
dEV4aXRTaXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBGcmVxdWVudEV4
aXRTaXRlIGV4aXRTaXRlOwotICAgIAotICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBl
ZCkgewotICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0
ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOwotICAgICAg
ICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBh
cnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0
ZShtX2tpbmQpOwotICAgIH0gZWxzZQotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNp
dGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKLSAg
ICAKLSAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVC
bG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRG
cmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKLX0KLQogdm9pZCBPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9k
ZUluZGV4LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewotICAgIC8vIENo
ZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3IgdGhlIHBy
ZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9y
aWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3ZlcnkuCi0gICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIXZhbHVlUmVjb3ZlcnkKLSAgICAgICAgJiYgIWN1
cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBOb2RlKiBzZXRMb2NhbCA9
IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2Nh
bCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChz
ZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
OwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBi
eXRlY29kZSBpbnN0cnVjdGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAotICAgIC8v
IG9uIHRoaXMgbm9kZS4KLSAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAx
OwotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIE5vZGUqIGxhc3RNb3ZIaW50ID0gMDsKLSAgICBm
b3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sgPT0gYmxvY2stPnNpemUoKSkgewot
ICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFuZCBkbyBh
IGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZlCi0gICAgICAgICAgICAvLyBiZWNh
dXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5kIGl0J3Mg
YWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVjb2RlLgot
ICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOwot
ICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0g
Y3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0TW92SGludCA9IG5vZGU7Ci0gICAgICAgIGlm
IChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAgIH0KLSAgICAKKyAgICBOb2Rl
KiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGRvU2VhcmNoRm9yRm9yd2FyZENv
bnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSk7
CisKICAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdp
bik7CisgICAgCiAgICAgbV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAKICAg
ICBpZiAoIXZhbHVlUmVjb3ZlcnkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXQuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdD
b21tb24uaCIKICNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQUklu
Zm8uaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlUmVj
b3ZlcnlPdmVycmlkZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAi
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgpAQCAtODQsNyArODUsNyBAQCBwcml2YXRl
OgogLy8KIC8vIFRoaXMgc3RydWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3Vs
YXRpdmUgcGF0aCBieQogLy8gZ29pbmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9TUkV4
aXQgeworc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE9TUkV4aXQo
RXhpdEtpbmQsIEpTVmFsdWVTb3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIFNw
ZWN1bGF0aXZlSklUKiwgdW5zaWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5k
ZXggPSBVSU5UX01BWCk7CiAgICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsK
QEAgLTk0LDIxICs5NSwxMCBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAKICAgICB1bnNpZ25lZCBtX3Bh
dGNoYWJsZUNvZGVPZmZzZXQ7CiAgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgQ29k
ZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICAKICAgICB1bnNpZ25lZCBt
X3JlY292ZXJ5SW5kZXg7CiAgICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXg7CiAgICAgCi0g
ICAgRXhpdEtpbmQgbV9raW5kOwotICAgIHVpbnQzMl90IG1fY291bnQ7Ci0gICAgCi0gICAgYm9v
bCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9j
aywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIGlmICghbV9j
b3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVT
bG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIH0KLQogICAgIHZvaWQg
c2V0UGF0Y2hhYmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCk7CiAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNv
bnN0OwogICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxv
Y2sqKSBjb25zdDsKQEAgLTEyMCw5ICsxMTAsNiBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgaW50
IG1fbGFzdFNldE9wZXJhbmQ7CiAgICAgCiAgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVycmlk
ZT4gbV92YWx1ZVJlY292ZXJ5T3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb25zaWRl
ckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENv
ZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOwogfTsKIAogc3RydWN0IFNwZWN1bGF0aW9uRmFp
bHVyZURlYnVnSW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRCYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRCYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIE9TUkV4aXRCYXNlOjpj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0
PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0
aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAKKyAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOworICAgIAor
ICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgeworICAgICAgICAvLyBDb3VudCB0
aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxv
Y2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOworICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkg
ZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCisg
ICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOworICAgIH0gZWxzZQor
ICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFBy
b2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsKKyAgICAKKyAgICByZXR1cm4gYmFzZWxpbmVD
b2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRl
KTsKK30KKworYm9vbCBPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigK
KyAgICBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAorICAgIE5vZGUqJiBub2RlLCBOb2RlKiYgbGFz
dE1vdkhpbnQpCit7CisgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBp
cyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKKyAgICAvLyBTZXRMb2Nh
bCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFs
dWVSZWNvdmVyeS4KKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAmJiAhaGFzVmFs
dWVSZWNvdmVyeQorICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7
CisgICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAg
ICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkp
OworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbiA9
PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhl
IGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uLiBBbHNvIHRyYWNr
IHRoZSBsYXN0IG1vdiBoaW50CisgICAgLy8gb24gdGhpcyBub2RlLgorICAgIHVuc2lnbmVkIGlu
ZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7CisgICAgbm9kZSA9IDA7CisgICAgbGFzdE1vdkhp
bnQgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGluZGV4SW5CbG9jayA9PSBibG9j
ay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlubGluZSByZXR1cm4uIEdp
dmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBUaGlzIGlzIHNhZmUKKyAgICAg
ICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMgaXRzIG93biBieXRlY29kZSBp
bmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bworICAgICAgICAgICAgLy8gcmVleGVjdXRlIHRo
YXQgYnl0ZWNvZGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBub2RlID0gYmxvY2st
PmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgIGlmIChub2RlLT5jb250YWluc01vdkhpbnQoKSAm
JiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKKyAgICAgICAgICAgIGxhc3RNb3ZIaW50
ID0gbm9kZTsKKyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNv
ZGVPcmlnaW4pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaW5kZXhJbkJsb2NrKys7Cisg
ICAgfQorICAgIAorICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5j
b2RlT3JpZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIERGR09TUkV4aXRCYXNlX2gKKyNkZWZpbmUgREZHT1NSRXhpdEJhc2VfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUg
IkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIFByb3ZpZGVzIGZvciB0aGUgT1NSIGV4aXQgcHJv
ZmlsaW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gYmV0d2VlbiB0aGUgREZHCisvLyBh
bmQgdGhlIEZUTC4KKworc3RydWN0IE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0QmFzZShFeGl0
S2luZCBraW5kLCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAg
ICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUo
b3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVp
bnQzMl90IG1fY291bnQ7CisgICAgCisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZTsKKworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAg
eworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3VudGFibGUobV9raW5kKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2ZpbGVkQ29kZUJsb2NrKTsK
KyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZlcnNp
b24gaXMgcmVhbGx5IG5lZWRlZC4KKyAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNp
b24oCisgICAgICAgIEJhc2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9k
ZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgICAgIE5vZGUqJiBuZXh0QkNOb2Rl
LCBOb2RlKiYgbGFzdE1vdkhpbnQpOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdEJhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAK
ICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRl
ICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJS
ZXBhdGNoQnVmZmVyLmgiCkBAIC01NCwyMCArNTUsNyBAQCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4
ZWNTdGF0ZSogZXhlYykKICAgICB1aW50MzJfdCBleGl0SW5kZXggPSBnbG9iYWxEYXRhLT5vc3JF
eGl0SW5kZXg7CiAgICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5k
ZmcoKS0+b3NyRXhpdFtleGl0SW5kZXhdOwogICAgIAotICAgIC8vIE1ha2Ugc3VyZSBhbGwgY29k
ZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJVCBjb21waWxlZC4gVGhpcyBpcyBuZWNlc3Nhcnkg
c2luY2UKLSAgICAvLyB3ZSBtYXkgb3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sgZXZlbiBiZWZv
cmUgaXQgaGFkIGV2ZXIgYmVlbiBjb21waWxlZCBieSB0aGUKLSAgICAvLyBKSVQsIGJ1dCBvdXIg
T1NSIGV4aXQgaW5mcmFzdHJ1Y3R1cmUgY3VycmVudGx5IG9ubHkgd29ya3MgaWYgdGhlIHRhcmdl
dCBvZiB0aGUKLSAgICAvLyBPU1IgZXhpdCBpcyBKSVQgY29kZS4gVGhpcyBjb3VsZCBiZSBjaGFu
Z2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxhcmx5Ci0gICAgLy8gaGFyZCBhYm91
dCBkb2luZyBhbiBPU1IgZXhpdCBpbnRvIHRoZSBpbnRlcnByZXRlciwgYnV0IGZvciBub3cgdGhp
cyBzZWVtcyB0byBtYWtlCi0gICAgLy8gc2Vuc2UgaW4gdGhhdCBpZiB3ZSdyZSBPU1IgZXhpdGlu
ZyBmcm9tIGlubGluZWQgY29kZSBvZiBhIERGRyBjb2RlIGJsb2NrLCB0aGVuCi0gICAgLy8gcHJv
YmFibHkgaXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0aW5nIGludG8g
aXMgaG90LiBFdmVuIG1vcmUKLSAgICAvLyBpbnRlcmVzdGluZ2x5LCBzaW5jZSB0aGUgY29kZSB3
YXMgaW5saW5lZCwgaXQgbWF5IG5ldmVyIG90aGVyd2lzZSBnZXQgSklUCi0gICAgLy8gY29tcGls
ZWQgc2luY2UgdGhlIGFjdCBvZiBpbmxpbmluZyBpdCBtYXkgZW5zdXJlIHRoYXQgaXQgb3RoZXJ3
aXNlIG5ldmVyIHJ1bnMuCi0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBleGl0Lm1f
Y29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxl
LmdldCgpKQotICAgICAgICAgICAgLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0KQot
ICAgICAgICAgICAgLT5qaXRDb21waWxlKGV4ZWMpOwotICAgIH0KKyAgICBwcmVwYXJlQ29kZU9y
aWdpbkZvck9TUkV4aXQoZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIAogICAgIC8vIENvbXB1dGUg
dGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgT3BlcmFuZHM8VmFsdWVSZWNvdmVyeT4gb3BlcmFu
ZHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5oIgorCisjaWYg
RU5BQkxFKERGR19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwordm9p
ZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQorewor
ICAgIGZvciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAgc3RhdGljX2Nhc3Q8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUu
Z2V0KCkpCisgICAgICAgICAgICAtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpCisg
ICAgICAgICAgICAtPmppdENvbXBpbGUoZXhlYyk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NSRXhpdFByZXBhcmF0aW9u
X2gKKyNkZWZpbmUgREZHT1NSRXhpdFByZXBhcmF0aW9uX2gKKworI2lmIEVOQUJMRShERkdfSklU
KQorCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CisKKy8vIE1ha2Ugc3VyZSBhbGwgY29kZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJ
VCBjb21waWxlZC4gVGhpcyBpcyBuZWNlc3Nhcnkgc2luY2UKKy8vIHdlIG1heSBvcHQgdG8gaW5s
aW5lIGEgY29kZSBibG9jayBldmVuIGJlZm9yZSBpdCBoYWQgZXZlciBiZWVuIGNvbXBpbGVkIGJ5
IHRoZQorLy8gSklULCBidXQgb3VyIE9TUiBleGl0IGluZnJhc3RydWN0dXJlIGN1cnJlbnRseSBv
bmx5IHdvcmtzIGlmIHRoZSB0YXJnZXQgb2YgdGhlCisvLyBPU1IgZXhpdCBpcyBKSVQgY29kZS4g
VGhpcyBjb3VsZCBiZSBjaGFuZ2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxhcmx5
CisvLyBoYXJkIGFib3V0IGRvaW5nIGFuIE9TUiBleGl0IGludG8gdGhlIGludGVycHJldGVyLCBi
dXQgZm9yIG5vdyB0aGlzIHNlZW1zIHRvIG1ha2UKKy8vIHNlbnNlIGluIHRoYXQgaWYgd2UncmUg
T1NSIGV4aXRpbmcgZnJvbSBpbmxpbmVkIGNvZGUgb2YgYSBERkcgY29kZSBibG9jaywgdGhlbgor
Ly8gcHJvYmFibHkgaXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0aW5n
IGludG8gaXMgaG90LiBFdmVuIG1vcmUKKy8vIGludGVyZXN0aW5nbHksIHNpbmNlIHRoZSBjb2Rl
IHdhcyBpbmxpbmVkLCBpdCBtYXkgbmV2ZXIgb3RoZXJ3aXNlIGdldCBKSVQKKy8vIGNvbXBpbGVk
IHNpbmNlIHRoZSBhY3Qgb2YgaW5saW5pbmcgaXQgbWF5IGVuc3VyZSB0aGF0IGl0IG90aGVyd2lz
ZSBuZXZlciBydW5zLgordm9pZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoQ29kZU9yaWdp
biBjb2RlT3JpZ2luKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8g
RU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFeGl0UHJlcGFyYXRpb25faAorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
Y3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3Nyw3ICsxNzc3LDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y2hlY2tBcmd1bWVudFR5cGVzKAogICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgIAogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgdmlydHVhbFJlZ2lzdGVyID0g
dmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAKICAgICAgICAgSlNWYWx1ZVNvdXJjZSB2YWx1ZVNvdXJjZSA9
IEpTVmFsdWVTb3VyY2UoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3IodmlydHVhbFJlZ2lzdGVyKSk7
CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3Vy
Y2UuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzEsNyArMTMxLDcgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7Ci0gICAgICAgIGlmIChp
c0FycmF5U3BlY3VsYXRpb24ocHJlZGljdGlvbikgfHwgaXNDZWxsU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCisgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShDZWxsSW5KU1N0YWNrKTsKICAgICAgICAgaWYgKGlz
Qm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIFZhbHVl
U291cmNlKEJvb2xlYW5JbkpTU3RhY2spOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCShyZXZpc2lvbiAxNDgwNDcp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBWYXJpYWJsZUV2ZW50U3Ry
ZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgIAogICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAobm9kZSAmJiBub2RlLT5vcCgp
ID09IFVJbnQzMlRvTnVtYmVyKSB7CisgICAgICAgICAgICBpZiAobm9kZSAmJiBuZWVkc09TUkJh
Y2t3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkpIHsKICAgICAgICAgICAgICAgICBNaW5pZmllZElE
IGlkID0gbm9kZS0+Y2hpbGQxKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRyeVRvU2V0Q29uc3Rh
bnRSZWNvdmVyeSh2YWx1ZVJlY292ZXJpZXNbaV0sIGNvZGVCbG9jaywgZ3JhcGguYXQoaWQpKSkK
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC0yNTcsNiArMjU3LDcgQEAgdm9pZCBW
YXJpYWJsZUV2ZW50U3RyZWFtOjpyZWNvbnN0cnVjdCgKICAgICAgICAgICAgICAgICAgICAgICAg
IGRvdWJsZUFzSW50MzJJRCA9IGlkOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NF
UlQoIW5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJ
KHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2
aWF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC04NCw2ICs4NCwxMSBAQCBzdGF0aWMgaW5saW5l
IExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByCiB7CiAgICAgcmV0dXJuIExMVk1GdW5jdGlvblR5
cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgcGFyYW1Db3VudCwgdmFyaWFkaWNpdHkgPT0gVmFy
aWFkaWMpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVHlwZSBm
dW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBW
YXJpYWRpY2l0eSB2YXJpYWRpY2l0eSkKK3sKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVy
blR5cGUsIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpLCB2YXJpYWRpY2l0eSk7Cit9CiBz
dGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBWYXJpYWRp
Y2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQogewogICAgIHJldHVybiBmdW5jdGlvblR5
cGUocmV0dXJuVHlwZSwgMCwgMCwgdmFyaWFkaWNpdHkpOwpAQCAtOTgsNiArMTAzLDggQEAgc3Rh
dGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcgogICAgIHJldHVybiBmdW5jdGlv
blR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgMiwgdmFyaWFkaWNpdHkpOwogfQogCitzdGF0
aWMgaW5saW5lIExUeXBlIHR5cGVPZihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIExMVk1UeXBlT2Yo
dmFsdWUpOyB9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWRLaW5kSUQoY29uc3QgY2hhciog
c3RyaW5nKSB7IHJldHVybiBMTFZNR2V0TURLaW5kSUQoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7
IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgdW5z
aWduZWQgbGVuZ3RoKSB7IHJldHVybiBMTFZNTURTdHJpbmcoc3RyaW5nLCBsZW5ndGgpOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBtZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJu
IG1kU3RyaW5nKHN0cmluZywgc3RybGVuKHN0cmluZykpOyB9CkBAIC0xNTUsNiArMTYyLDExIEBA
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciAKIHsKICAgICByZXR1cm4g
TExWTUJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgYXJncywgbnVtQXJncywgIiIpOwogfQor
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVmFsdWUgYnVpbGRDYWxsKExC
dWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
KQoreworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvci5iZWdp
bigpLCB2ZWN0b3Iuc2l6ZSgpKTsKK30KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCiB7CiAgICAgcmV0dXJuIGJ1aWxkQ2Fs
bChidWlsZGVyLCBmdW5jdGlvbiwgMCwgMCk7CkBAIC0xNjgsNiArMTgwLDggQEAgc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIAogICAgIExWYWx1ZSBhcmdzW10gPSB7IGFy
ZzEsIGFyZzIgfTsKICAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdz
LCAyKTsKIH0KK2VudW0gVGFpbENhbGxNb2RlIHsgSXNOb3RUYWlsQ2FsbCwgSXNUYWlsQ2FsbCB9
Oworc3RhdGljIGlubGluZSB2b2lkIHNldFRhaWxDYWxsKExWYWx1ZSBjYWxsLCBUYWlsQ2FsbE1v
ZGUgbW9kZSkgeyBMTFZNU2V0VGFpbENhbGwoY2FsbCwgbW9kZSA9PSBJc1RhaWxDYWxsKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwg
TFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIExMVk1CdWlsZEV4dHJhY3RW
YWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0
YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBMTFZNQnVpbGRTZWxlY3QoYnVpbGRlciwg
Y29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4sICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUg
YnVpbGRCcihMQnVpbGRlciBidWlsZGVyLCBMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyByZXR1
cm4gTExWTUJ1aWxkQnIoYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTENB
cmd1bWVudEdldHRlci5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKwordm9pZCBDQXJndW1l
bnRHZXR0ZXI6OmxvYWROZXh0QW5kQm94KFZhbHVlRm9ybWF0IGZvcm1hdCwgR1BSUmVnIGRlc3Rp
bmF0aW9uLCBHUFJSZWcgc2NyYXRjaCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNh
c2UgVmFsdWVGb3JtYXRJbnQzMjogeworICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0aW9uKTsK
KyAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3Rp
bmF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBW
YWx1ZUZvcm1hdFVJbnQzMjogeworICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0aW9uKTsKKyAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJbnQgPSBtX2ppdC5icmFuY2gzMigKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAgICAgICBk
ZXN0aW5hdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgICAg
ICAKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwgc2NyYXRj
aCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGRlc3RpbmF0aW9uLCBGUFJJ
bmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAs
IGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaCwgRlBS
SW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICBpc0ludC5saW5r
KCZtX2ppdCk7CisgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVG
b3JtYXRCb29sZWFuOiB7CisgICAgICAgIGxvYWROZXh0OChkZXN0aW5hdGlvbik7CisgICAgICAg
IG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgZGVz
dGluYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNl
IFZhbHVlRm9ybWF0SlNWYWx1ZTogeworICAgICAgICBsb2FkTmV4dDY0KGRlc3RpbmF0aW9uKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1h
dERvdWJsZTogeworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpmcFJlZ1Qw
LCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZE5leHREb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCk7Cisg
ICAgICAgIG1faml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBkZXN0aW5hdGlvbik7Cisg
ICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gsIEZQUkluZm86OmZwUmVnVDApOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0
dGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1
bWVudEdldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMQ0FyZ3VtZW50
R2V0dGVyX2gKKyNkZWZpbmUgRlRMQ0FyZ3VtZW50R2V0dGVyX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdBc3NlbWJs
eUhlbHBlcnMuaCIKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMgY3VycmVudGx5IG9ubHkgdW5kZXJzdGFuZHMg
aG93IHRvIGdldCBhcmd1bWVudHMgb24gWDg2LTY0IGNkZWNsLiBUaGlzIGlzIGFsc28KKy8vIG5v
dCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LiBJdCB3aWxsIGdlbmVyYXRlIHNvbWUgcmVkdW5kYW50
IG1vdmVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWdpc3RlcktpbmQ+Citib29sIGlzQXJndW1l
bnRSZWdpc3RlcihSZWdpc3RlcktpbmQ6OlJlZ2lzdGVyVHlwZSByZWcpCit7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IFJlZ2lzdGVyS2luZDo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGlmIChSZWdpc3RlcktpbmQ6OnRvQXJndW1lbnRSZWdpc3Rlcihp
KSA9PSByZWcpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitjbGFzcyBDQXJndW1lbnRHZXR0ZXIgeworICAgIHVzaW5nIG5hbWVzcGFjZSBE
Rkc7CisgICAgCitwdWJsaWM6CisgICAgLy8gUGVlayBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiB0
aGluZ3Mgb24gdGhlIHN0YWNrIGJlbG93IHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICAvLyBJdCB3
aWxsIGJlIDEgaWYgeW91IGhhdmVuJ3QgcHVzaGVkIG9yIHBvcHBlZCBhZnRlciB0aGUgY2FsbDsg
aS5lLiB0aGUgb25seQorICAgIC8vIHRoaW5nIGlzIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICBD
QXJndW1lbnRHZXR0ZXIoQXNzZW1ibHlIZWxwZXJzJiBqaXQsIGludCBwZWVrT2Zmc2V0ID0gMSkK
KyAgICAgICAgOiBtX2ppdChqaXQpCisgICAgICAgICwgbV9wZWVrT2Zmc2V0KHBlZWtPZmZzZXQp
CisgICAgICAgICwgbV9ncHJBcmd1bWVudEluZGV4KDApCisgICAgICAgICwgbV9mcHJBcmd1bWVu
dEluZGV4KDApCisgICAgICAgICwgbV9zdGFja0FyZ3VtZW50SW5kZXgoMCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHZvaWQgbG9hZE5leHQ4KEdQUlJlZyBkZXN0aW5hdGlvbikKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCghaXNBcmd1bWVudFJlZ2lzdGVyPEdQUkluZm8+KGRlc3RpbmF0aW9uKSk7
CisgICAgICAgIGlmIChtX2dwckFyZ3VtZW50SW5kZXggPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3Vt
ZW50UmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnRvQXJndW1l
bnRSZWdpc3RlcihtX2dwckFyZ3VtZW50SW5kZXgrKyksIGRlc3RpbmF0aW9uKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDgobmV4
dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0
MzIoR1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0FyZ3VtZW50
UmVnaXN0ZXI8R1BSSW5mbz4oZGVzdGluYXRpb24pKTsKKyAgICAgICAgaWYgKG1fZ3ByQXJndW1l
bnRJbmRleCA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZ3ByQXJndW1lbnRJ
bmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRpb24p
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0NjQoR1BSUmVnIGRlc3RpbmF0aW9uKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0FyZ3VtZW50UmVnaXN0ZXI8R1BSSW5mbz4oZGVzdGlu
YXRpb24pKTsKKyAgICAgICAgaWYgKG1fZ3ByQXJndW1lbnRJbmRleCA8IEdQUkluZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZ3ByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5s
b2FkNjQobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGxvYWROZXh0UHRyKEdQUlJlZyBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIGxvYWROZXh0
NjQoZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0RG91YmxlKEZQ
UlJlZyBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgICFp
c0FyZ3VtZW50UmVnaXN0ZXI8RlBSSW5mbz4oZGVzdGluYXRpb24pCisgICAgICAgICAgICBkZXN0
aW5hdGlvbiA9PSBGUFJJbmZvOjphcmd1bWVudEZQUjApOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fZnByQXJndW1lbnRJbmRleCA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMp
IHsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lz
dGVyKG1fZnByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkRG91YmxlKG5leHRB
ZGRyZXNzKCksIGRlc3RpbmF0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkTmV4dEFu
ZEJveChWYWx1ZUZvcm1hdCBmb3JtYXQsIEdQUlJlZyBkZXN0aW5hdGlvbiwgR1BSUmVnIHNjcmF0
Y2gpOworCitwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIG5leHRBZGRyZXNz
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAgICAg
IChtX3BlZWtPZmZzZXQgKyBtX3N0YWNrQXJndW1lbnRJbmRleCsrKSAqIHNpemVvZih2b2lkKikp
OworICAgIH0KKyAgICAgICAgICAgIAorICAgIEFzc2VtYmx5SGVscGVycyYgbV9qaXQ7CisgICAg
dW5zaWduZWQgbV9wZWVrT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fZ3ByQXJndW1lbnRJbmRleDsK
KyAgICB1bnNpZ25lZCBtX2ZwckFyZ3VtZW50SW5kZXg7CisgICAgdW5zaWduZWQgbV9zdGFja0Fy
Z3VtZW50SW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTENBcmd1bWVudEdldHRlcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RlRMRXhpdEFyZ3VtZW50LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRBcmd1bWVudDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYXJnIiwgYXJndW1lbnQoKSwgIiBhcyAi
LCBmb3JtYXQoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRBcmd1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdEFyZ3VtZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRBcmd1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0
QXJndW1lbnRfaAorI2RlZmluZSBGVExFeGl0QXJndW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1Bs
YXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTFZhbHVlRm9y
bWF0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKworc3RydWN0IEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHsKKyAg
ICBWYWx1ZUZvcm1hdCBmb3JtYXQ7CisgICAgdW5zaWduZWQgYXJndW1lbnQ7Cit9OworCitjbGFz
cyBFeGl0QXJndW1lbnQgeworcHVibGljOgorICAgIEV4aXRBcmd1bWVudCgpCisgICAgeworICAg
ICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9IEludmFsaWRWYWx1ZUZvcm1hdDsKKyAgICB9
CisgICAgCisgICAgRXhpdEFyZ3VtZW50KFZhbHVlRm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgYXJn
dW1lbnQpCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9IGZvcm1hdDsK
KyAgICAgICAgbV9yZXByZXNlbnRhdGlvbi5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgIH0KKyAg
ICAKKyAgICBleHBsaWNpdCBFeGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24g
cmVwcmVzZW50YXRpb24pCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uID0gcmVwcmVz
ZW50YXRpb247CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPT0gSW52YWxpZFZhbHVlRm9ybWF0OyB9CisgICAg
CisgICAgVmFsdWVGb3JtYXQgZm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgq
dGhpcyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdDsKKyAgICB9Cisg
ICAgCisgICAgdW5zaWduZWQgYXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uYXJndW1lbnQ7CisgICAg
fQorICAgIAorICAgIEV4aXRBcmd1bWVudCB3aXRoRm9ybWF0KFZhbHVlRm9ybWF0IGZvcm1hdCkK
KyAgICB7CisgICAgICAgIHJldHVybiBFeGl0QXJndW1lbnQoZm9ybWF0LCBhcmd1bWVudCgpKTsK
KyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRp
b24oKSBjb25zdCB7IHJldHVybiBtX3JlcHJlc2VudGF0aW9uOyB9CisgICAgCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEV4aXRBcmd1bWVu
dFJlcHJlc2VudGF0aW9uIG1fcmVwcmVzZW50YXRpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4
aXRBcmd1bWVudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0QXJndW1lbnRGb3JPcGVyYW5kOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZXhpdEFyZ3VtZW50
LCAiIGZvciByIiwgb3BlcmFuZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5k
X2gKKyNkZWZpbmUgRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZF9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRMRXhpdEFy
Z3VtZW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZCB7CitwdWJsaWM6CisgICAgRXhpdEFyZ3VtZW50Rm9yT3BlcmFu
ZCgpCisgICAgICAgIDogbV9vcGVyYW5kKC0xKQorICAgIHsKKyAgICB9CisgICAgCisgICAgRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZChFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50LCBpbnQgb3BlcmFu
ZCkKKyAgICAgICAgOiBtX2V4aXRBcmd1bWVudChleGl0QXJndW1lbnQpCisgICAgICAgICwgbV9v
cGVyYW5kKG9wZXJhbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yISgp
IGNvbnN0IHsgcmV0dXJuICFtX2V4aXRBcmd1bWVudDsgfQorICAgIAorICAgIGNvbnN0IEV4aXRB
cmd1bWVudCYgZXhpdEFyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9leGl0QXJndW1lbnQ7IH0K
KyAgICBpbnQgb3BlcmFuZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBFeGl0
QXJndW1lbnQgbV9leGl0QXJndW1lbnQ7CisgICAgaW50IG1fb3BlcmFuZDsKK307CisKK2lubGlu
ZSBib29sIGxlc3NlckFyZ3VtZW50SW5kZXgoRXhpdEFyZ3VtZW50IGEsIEV4aXRBcmd1bWVudCBi
KQoreworICAgIHJldHVybiBhLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCkgPCBiLmV4aXRBcmd1
bWVudCgpLmFyZ3VtZW50KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50
TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFy
Z3VtZW50TGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0QXJndW1lbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4
aXRBcmd1bWVudExpc3RfaAorI2RlZmluZSBGVExFeGl0QXJndW1lbnRMaXN0X2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJG
VExBYmJyZXZpYXRpb25zLmgiCisjaW5jbGR1ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3R5cGVkZWYgVmVjdG9yPExWYWx1ZSwgMTY+IEV4aXRB
cmd1bWVudExpc3Q7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50TGlzdF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRv
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpERkc7CisK
K0V4aXRUaHVua0dlbmVyYXRvcjo6RXhpdFRodW5rR2VuZXJhdG9yKFN0YXRlJiBzdGF0ZSkKKyAg
ICA6IENDYWxsSGVscGVycygmc3RhdGUuZ3JhcGgubV9nbG9iYWxEYXRhLCBzdGF0ZS5ncmFwaC5t
X2NvZGVCbG9jaykKK3sKK30KKworRXhpdFRodW5rR2VuZXJhdG9yOjp+RXhpdFRodW5rR2VuZXJh
dG9yKCkKK3sKK30KKwordm9pZCBFeGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVuayh1bnNpZ25l
ZCBpbmRleCwgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbykKK3sKKyAgICBpbmZvLm1fdGh1
bmtMYWJlbCA9IGxhYmVsKCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoaW5kZXgpLCBHUFJJbmZv
Ojpub25BcmdHUlAwKTsKKyAgICBpbmZvLm1fdGh1bmtKdW1wID0gcGF0Y2hhYmxlSnVtcCgpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVu
a0dlbmVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0VGh1bmtHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
RXhpdFRodW5rR2VuZXJhdG9yX2gKKyNkZWZpbmUgRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCitjbGFzcyBPU1JFeGl0Q29tcGlsYXRpb25JbmZvOworY2xhc3MgU3RhdGU7CisKK2NsYXNz
IEV4aXRUaHVua0dlbmVyYXRvciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgeworcHVibGljOgorICAg
IEV4aXRUaHVua0dlbmVyYXRvcihTdGF0ZSYgc3RhdGUpOworICAgIH5FeGl0VGh1bmtHZW5lcmF0
b3IoKTsKKyAgICAKKyAgICB2b2lkIGVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCwgT1NSRXhpdENv
bXBpbGF0aW9uSW5mbyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGh1bmtHZW5lcmF0b3Jf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TEV4aXRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgSW52YWxpZEV4aXRWYWx1
ZToKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEV4aXRWYWx1ZURlYWQ6CisgICAgICAgIG91dC5wcmludCgiRGVhZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJB
cmd1bWVudCgiLCBleGl0QXJndW1lbnQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQoIiwgY29u
c3RhbnQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrOgorICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgRlRMRXhpdFZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFZhbHVlX2gK
KworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlICJGVExFeGl0QXJndW1lbnQuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKKworLy8gVGhpcyBpcyBsaWtlIFZhbHVlUmVjb3ZlcnksIGJ1dCByZXNwZWN0cyB0aGUgd2F5
IHRoYXQgdGhlIEZUTCBkb2VzIE9TUgorLy8gZXhpdDogdGhlIGxpdmUgbm9uLWNvbnN0YW50IG5v
bi1mbHVzaGVkIHZhbHVlcyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cworLy8gdG8gYSBub3JldHVy
biB0YWlsIGNhbGwuIEV4aXRWYWx1ZSBpcyBoZW5jZSBtb3N0bHkgcmVzcG9uc2libGUgZm9yCisv
LyB0ZWxsaW5nIHVzIHRoZSBtYXBwaW5nIGJldHdlZW4gb3BlcmFuZHMgaW4gYnl0ZWNvZGUgYW5k
IHRoZSBhcmd1bWVudHMgdG8KKy8vIHRoZSBjYWxsLgorCitlbnVtIEV4aXRWYWx1ZUtpbmQgewor
ICAgIEludmFsaWRFeGl0VmFsdWUsCisgICAgRXhpdFZhbHVlRGVhZCwKKyAgICBFeGl0VmFsdWVB
cmd1bWVudCwKKyAgICBFeGl0VmFsdWVDb25zdGFudAorICAgIEV4aXRWYWx1ZUluSlNTdGFjaywK
KyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyLAorICAgIEV4aXRWYWx1ZUluSlNTdGFja0Fz
Qm9vbGVhbiwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZQorfTsKKworY2xhc3MgRXhp
dFZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0VmFsdWUoKQorICAgICAgICA6IG1fa2luZChJbnZh
bGlkRXhpdFZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZEV4aXRWYWx1ZTsgfQorICAgIAorICAgIHN0
YXRpYyBFeGl0VmFsdWUgZGVhZCgpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlRGVhZDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3RhY2soKQorICAg
IHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4
aXRWYWx1ZUluSlNTdGFjazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3RhY2tBc0ludDMyKCkKKyAgICB7CisgICAgICAgIEV4
aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3Rh
Y2tBc0ludDMyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0
aWMgRXhpdFZhbHVlIGluSlNTdGFja0FzQm9vbGVhbigpCisgICAgeworICAgICAgICBFeGl0VmFs
dWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrQXNC
b29sZWFuOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMg
RXhpdFZhbHVlIGluSlNTdGFja0FzRG91YmxlKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJs
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRW
YWx1ZSBjb25zdGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUNvbnN0YW50OworICAgICAg
ICByZXN1bHQudS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgZXhpdEFyZ3Vt
ZW50KGNvbnN0IEV4aXRBcmd1bWVudCYgYXJndW1lbnQpCisgICAgeworICAgICAgICBFeGl0VmFs
dWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlQXJndW1lbnQ7Cisg
ICAgICAgIHJlc3VsdC51LmFyZ3VtZW50ID0gYXJndW1lbnQucmVwcmVzZW50YXRpb24oKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVlS2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlRGVhZDsgfQorICAgIGJvb2wgaXNJbkpTU3Rh
Y2tTb21laG93KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAg
ICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNT
dGFja0FzSW50MzI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNCb29sZWFuOgor
ICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3QgeyByZXR1cm4ga2lu
ZCgpID09IEV4aXRWYWx1ZUNvbnN0YW50OyB9CisgICAgYm9vbCBpc0FyZ3VtZW50KCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpID09IEV4aXRWYWx1ZUFyZ3VtZW50OyB9CisgICAgCisgICAgRXhpdEFy
Z3VtZW50IGV4aXRBcmd1bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNBcmd1
bWVudCgpKTsKKyAgICAgICAgcmV0dXJuIEV4aXRBcmd1bWVudCh1LmFyZ3VtZW50KTsKKyAgICB9
CisgICAgCisgICAgSlNWYWx1ZSBjb25zdGFudCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNDb25zdGFudCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmRlY29kZSh1LmNvbnN0
YW50KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIEV4aXRWYWx1ZUtpbmQgbV9raW5kOworICAgIHVuaW9uIHsKKyAg
ICAgICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gYXJndW1lbnQ7CisgICAgICAgIEVuY29k
ZWRKU1ZhbHVlIGNvbnN0YW50OworICAgIH0gdTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdFZh
bHVlX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZh
bHVlLmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Rm9ybWF0dGVkVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lmIEVO
QUJMRShGVExfSklUKQogCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgorI2luY2x1ZGUg
IkZUTFZhbHVlRm9ybWF0LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApA
QCAtNDEsMTggKzQyLDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogLy8gdXNl
IHRoaXMgaW4gc2l0dWF0aW9ucyB3aGVyZSB0aGVyZSBpcyBubyBnb29kIHdheSB0byBzYXkgd2hh
dCBub2RlIHRoZSB2YWx1ZSBjYW1lCiAvLyBmcm9tLgogCi0vLyBOb3RlIHRoYXQgdGhpcyBpcyBh
d2t3YXJkbHkgc2ltaWxhciB0byBEYXRhRm9ybWF0IGluIG90aGVyIHBhcnRzIG9mIEpTQywgZXhj
ZXB0IHRoYXQKLS8vIHVubGlrZSBEYXRhRm9ybWF0IGFuZCBsaWtlIFZhbHVlUmVjb3ZlcnksIGl0
IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBVSW50MzIgYW5kIEludDMyLgotCi1lbnVtIFZhbHVlRm9y
bWF0IHsKLSAgICBJbnZhbGlkVmFsdWVGb3JtYXQsCi0gICAgVmFsdWVGb3JtYXRJbnQzMiwKLSAg
ICBWYWx1ZUZvcm1hdFVJbnQzMiwKLSAgICBWYWx1ZUZvcm1hdEJvb2xlYW4sCi0gICAgVmFsdWVG
b3JtYXRKU1ZhbHVlLAotICAgIFZhbHVlRm9ybWF0RG91YmxlCi19OwotCiBjbGFzcyBGb3JtYXR0
ZWRWYWx1ZSB7CiBwdWJsaWM6CiAgICAgRm9ybWF0dGVkVmFsdWUoKQpAQCAtODEsNiArNzAsMTMg
QEAgcHJpdmF0ZToKICAgICBMVmFsdWUgbV92YWx1ZTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgRm9y
bWF0dGVkVmFsdWUgbm9WYWx1ZSgpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKCk7IH0KK3N0YXRp
YyBpbmxpbmUgRm9ybWF0dGVkVmFsdWUgaW50MzJWYWx1ZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJu
IEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0SW50MzIsIHZhbHVlKTsgfQorc3RhdGljIGlubGlu
ZSBGb3JtYXR0ZWRWYWx1ZSB1SW50MzJWYWx1ZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEZvcm1h
dHRlZFZhbHVlKFZhbHVlRm9ybWF0VUludDMyLCB2YWx1ZSk7IH0KK3N0YXRpYyBpbmxpbmUgRm9y
bWF0dGVkVmFsdWUgYm9vbGVhblZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVk
VmFsdWUoVmFsdWVGb3JtYXRCb29sZWFuLCB2YWx1ZSk7IH0KK3N0YXRpYyBpbmxpbmUgRm9ybWF0
dGVkVmFsdWUganNWYWx1ZVZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFs
dWUoVmFsdWVGb3JtYXRKU1ZhbHVlLCB2YWx1ZSk7IH0KK3N0YXRpYyBpbmxpbmUgRm9ybWF0dGVk
VmFsdWUgZG91YmxlVmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShW
YWx1ZUZvcm1hdERvdWJsZSwgdmFsdWUpOyB9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
IAogI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVENvZGUuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxMSBA
QCBKSVRDb2RlOjp+SklUQ29kZSgpCiAgICAgICAgIExMVk1EaXNwb3NlRXhlY3V0aW9uRW5naW5l
KG1fZW5naW5lKTsKIH0KIAordm9pZCBKSVRDb2RlOjppbml0aWFsaXplRXhpdFRodW5rcyhDb2Rl
UmVmIGV4aXRUaHVua3MpCit7CisgICAgbV9leGl0VGh1bmtzID0gZXhpdFRodW5rczsKK30KKwog
dm9pZCBKSVRDb2RlOjppbml0aWFsaXplQ29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmIGVuZ2lu
ZSwgQ29kZVJlZiBlbnRyeXBvaW50KQogewogICAgIG1fZW5naW5lID0gZW5naW5lOwpAQCAtOTcs
NiArMTAyLDExIEBAIGJvb2wgSklUQ29kZTo6Y29udGFpbnModm9pZCopCiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCitDb2RlUHRyIEpJVENvZGU6OmV4aXRUaHVua3MoKQoreworICAgIHJldHVybiBt
X2V4aXRUaHVua3MuY29kZSgpOworfQorCiBKSVRDb2RlKiBKSVRDb2RlOjpmdGwoKQogewogICAg
IHJldHVybiB0aGlzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2Rl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJ
KHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29k
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxMiArNDgsMTYgQEAgcHVibGljOgogICAgIHNpemVf
dCBzaXplKCk7CiAgICAgYm9vbCBjb250YWlucyh2b2lkKik7CiAgICAgCisgICAgdm9pZCBpbml0
aWFsaXplRXhpdFRodW5rcyhDb2RlUmVmKTsKICAgICB2b2lkIGluaXRpYWxpemVDb2RlKExMVk1F
eGVjdXRpb25FbmdpbmVSZWYsIENvZGVSZWYgZW50cnlwb2ludCk7CiAgICAgCisgICAgQ29kZVB0
ciBleGl0VGh1bmtzKCk7CisgICAgCiAgICAgSklUQ29kZSogZnRsKCk7CiAgICAgREZHOjpDb21t
b25EYXRhKiBkZmdDb21tb24oKTsKICAgICAKICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwor
ICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAgIAogcHJpdmF0ZToK
ICAgICAvLyBGSVhNRTogTExWTSBzaG91bGQgdXNlIG91ciBvd24gSklUIG1lbW9yeSBhbGxvY2F0
b3IsIGFuZCB3ZSBzaG91bGRuJ3QgaGF2ZSB0bwpAQCAtNjEsNiArNjUsNyBAQCBwcml2YXRlOgog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MTkKICAg
ICBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIG1fZW5naW5lOwogICAgIENvZGVSZWYgbV9lbnRyeXBv
aW50OworICAgIENvZGVSZWYgbV9leGl0VGh1bmtzOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCwxMCBA
QAogCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKICNp
bmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgorI2lu
Y2x1ZGUgIkZUTFRodW5rcy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDEsNyArNDMsNyBAQCB1c2luZyBuYW1lc3BhY2Ug
REZHOwogLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVDaGVjaygpIGhlbHBzIHRvIHJlZHVj
ZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZwogLy8gc2lnbmlmaWNhbnRseSBsZXNzIGRl
YWQgY29kZS4KICNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKSBkbyB7IFwKLSAgICAgICAgTFZhbHVlIF9m
dGNfbG93VmFsdWUgPSAobG93VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgRm9ybWF0dGVkVmFsdWUgX2Z0Y19sb3dWYWx1ZSA9IChsb3dWYWx1ZSk7ICAgICAg
ICAgICAgICAgICAgICAgIFwKICAgICAgICAgRWRnZSBfZnRjX2hpZ2hWYWx1ZSA9IChoaWdoVmFs
dWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2ggPSAodHlwZXNQYXNzZWRUaHJvdWdoKTsgIFwKICAg
ICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKF9mdGNfaGlnaFZhbHVlLCBfZnRjX3R5
cGVzUGFzc2VkVGhyb3VnaCkpIFwKQEAgLTU3LDYgKzU5LDggQEAgcHVibGljOgogICAgICAgICAs
IG1fbG9jYWxzQm9vbGVhbihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52
YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9sb2NhbHMzMihPcGVyYW5kc0xpa2UsIHN0YXRl
LmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9sb2NhbHM2
NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQp
CisgICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Js
b2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fZXhpdFRodW5rR2VuZXJhdG9y
KHN0YXRlKQogICAgICAgICAsIG1fc3RhdGUoc3RhdGUuZ3JhcGgpCiAgICAgewogICAgIH0KQEAg
LTgwLDE0ICs4NCwxNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2xvY2FsczY0W2luZGV4XSA9
IGJ1aWxkQWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50NjQpOwogICAgICAgICB9CiAg
ICAgICAgIAorICAgICAgICBtX2luaXRpYWxpemF0aW9uID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0
bFN0YXRlLmZ1bmN0aW9uKTsKKyAgICAgICAgbV9vdXQuanVtcChtX2luaXRpYWxpemF0aW9uKTsK
KyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7CisgICAgICAgIAogICAg
ICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnBhcmFtKDApOwogICAgICAgICBtX3RhZ1R5cGVOdW1i
ZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwogICAgICAgICBtX3RhZ01hc2sg
PSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOwogICAgICAgICAKLSAgICAgICAgbV9hYm9ydEZ1
bmN0aW9uID0gY29uc3RJbnRUb1B0cigKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFi
b3J0KSwKLSAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlw
ZSkpKTsKLSAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAg
ICAgICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKICAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCkBAIC05OCwxNCArMTAyLDE3IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9wcygpOwogCi0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUsIG1fYmxvY2tzLmdldChtX2dyYXBoLm1f
YmxvY2tzWzBdLmdldCgpKSk7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faW5pdGlhbGl6YXRp
b24sIG1fYmxvY2tzLmdldChtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpKSk7CiAKICAgICAgICAg
dHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpOwogICAgICAgICAKLSAgICAgICAgbV9vdXQuanVt
cChtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkpOworICAgICAgICAvLyBM
ZWF2ZSB0aGUgaW5pdGlhbGl6YXRpb24gYmxvY2sgaGFuZ2luZywgc2luY2Ugd2Ugd2lsbCBhZGQg
dG8gaXQgbGF0ZXIuCiAgICAgICAgIAogICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRl
eCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytibG9ja0luZGV4
KQogICAgICAgICAgICAgY29tcGlsZUJsb2NrKGJsb2NrSW5kZXgpOworICAgICAgICAKKyAgICAg
ICAgLy8gQW5kIG5vdyBjb21wbGV0ZSB0aGUgaW5pdGlhbGl6YXRpb24gYmxvY2suCisgICAgICAg
IGxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9jaygpOwogCiAgICAgICAg
IGlmICh2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBtX2Z0bFN0YXRl
LmR1bXBTdGF0ZSgiYWZ0ZXIgbG93ZXJpbmciKTsKQEAgLTE1MSw4ICsxNTgsOSBAQCBwcml2YXRl
OgogICAgIAogICAgIHZvaWQgdHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cygpCiAgICAgewotICAg
ICAgICAvLyBGSVhNRTogU2V0IHVwIHRoZSBPU1Igc3RvcnkgaGVyZS4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICAvLyBX
aGlsZSBjaGVja2luZyBhcmd1bWVudHMsIGV2ZXJ5dGhpbmcgaXMgaW4gdGhlIHN0YWNrLgorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzaXplKCk7IGktLTspCisgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICAgICAgCiAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9ncmFwaC5tX2NvZGVCbG9jay0+bnVtUGFyYW1ldGVy
cygpOyArK2kpIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBtX2dyYXBoLm1fYXJndW1lbnRz
W2ldOwpAQCAtMTcwLDIxICsxNzgsMjEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmICh2YXJp
YWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxlKCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVCghdmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFi
bGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkg
ewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVl
LCBub2RlLCBpc05vdEludDMyKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdElu
dDMyKGpzVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHVuYm94SW50MzIo
anNWYWx1ZSksIG1fbG9jYWxzMzIub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUs
IG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RDZWxs
KGpzVmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGpzVmFsdWUsIG1fbG9j
YWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVh
blNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0
ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7
CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWVW
YWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKICAgICAgICAgICAg
ICAgICAgICAgbV9vdXQuc2V0KHVuYm94Qm9vbGVhbihqc1ZhbHVlKSwgbV9sb2NhbHNCb29sZWFu
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CiAgICAgICAgICAgICAgICAgfQpAQCAtMjE2LDE4ICsyMjQsMTggQEAgcHJpdmF0ZToKICAg
ICAgICAgLy8gbWFrZSBJUiBkdW1wcyBlYXNpZXIgdG8gcmVhZC4KICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obG93QmxvY2ssIG1fbmV4dExvd0Jsb2NrKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJ
WE1FOiBXZSBzaG91bGQgdHJhY2sgdGhlIE9TUiBzaXR1YXRpb24gaGVyZS4KLSAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBp
bml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIG1faW50
MzJWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmNsZWFyKCk7CiAgICAg
ICAgIG1fYm9vbGVhblZhbHVlcy5jbGVhcigpOwogICAgICAgICBtX3N0b3JhZ2VWYWx1ZXMuY2xl
YXIoKTsKKyAgICAgICAgbV90aW1lVG9MaXZlLmNsZWFyKCk7CiAgICAgICAgIAogICAgICAgICBt
X3N0YXRlLnJlc2V0KCk7CiAgICAgICAgIG1fc3RhdGUuYmVnaW5CYXNpY0Jsb2NrKG1faGlnaEJs
b2NrKTsKICAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgbm9kZUluZGV4ID0gMDsgbm9k
ZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsgKytub2RlSW5kZXgpCisgICAgICAgIGZvciAo
bV9ub2RlSW5kZXggPSAwOyBtX25vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsrbV9u
b2RlSW5kZXgpCiAgICAgICAgICAgICBjb21waWxlTm9kZShub2RlSW5kZXgpOwogICAgIH0KICAg
ICAKQEAgLTI0MCw5ICsyNDgsNiBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgYm9vbCBz
aG91bGRFeGVjdXRlRWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKICAg
ICAgICAgCi0gICAgICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAg
ICAgcmV0dXJuOyAvLyBGSVhNRTogSW1wbGVtZW50IE9TUiBtYWdpYyBoZXJlLiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCi0gICAgICAgIAogICAgICAgICBt
X2RpcmVjdGlvbiA9IChtX25vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndh
cmRTcGVjdWxhdGlvbiA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIAogICAgICAgICBz
d2l0Y2ggKG1fbm9kZS0+b3AoKSkgewpAQCAtMjU4LDYgKzI2MywxMiBAQCBwcml2YXRlOgogICAg
ICAgICBjYXNlIFNldExvY2FsOgogICAgICAgICAgICAgY29tcGlsZVNldExvY2FsKCk7CiAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgY29tcGls
ZU1vdkhpbnQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6
CisgICAgICAgICAgICBjb21waWxlWm9tYmllSGludCgpOworICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIGNhc2UgTW92SGludEFuZENoZWNrOgogICAgICAgICAgICAgY29tcGlsZU1vdkhpbnRB
bmRDaGVjaygpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTIsNiArMzYzLDExIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgREZH
X05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbV9ub2RlLCB1c2UpOworICAgICAgICAKKyAg
ICAgICAgaWYgKG1fbm9kZS0+aGFzUmVzdWx0KCkpCisgICAgICAgICAgICBtX3RpbWVUb0xpdmUu
YWRkKG1fbm9kZSwgbV9ub2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAKICAgICAg
ICAgaWYgKHNob3VsZEV4ZWN1dGVFZmZlY3RzKQogICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRl
RWZmZWN0cyhub2RlSW5kZXgpOwogICAgIH0KQEAgLTM2OCw4ICszODQsMTIgQEAgcHJpdmF0ZToK
ICAgICAKICAgICB2b2lkIGNvbXBpbGVHZXRMb2NhbCgpCiAgICAgeworICAgICAgICAvLyBHZXRM
b2NhbCBpcyBvbmUgb2YgdGhlIGZldyBub2RlcyB0aGF0IG1heSBiZSBsZWZ0IGJlaGluZCwgd2l0
aCAhc2hvdWxkR2VuZXJhdGUoKS4KKyAgICAgICAgaWYgKCFtX25vZGUtPnNob3VsZEdlbmVyYXRl
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVBy
ZWRpY3Rpb24oKTsKICAgICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlh
YmxlcygpLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICAKICAgICAgICAgaWYg
KHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKQEAgLTQyMCwxMyArNDQwLDEyIEBAIHByaXZhdGU6
CiAgICAgCiAgICAgdm9pZCBjb21waWxlU2V0TG9jYWwoKQogICAgIHsKKyAgICAgICAgb2JzZXJ2
ZU1vdkhpbnQobV9ub2RlKTsKKyAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlv
bigpOwogICAgICAgICBib29sIG5lZWRzRmx1c2hpbmcgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250
YWlucyhtX25vZGUpOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92
SGludCBmb3IgT1NSLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTEzNjIzCi0gICAgICAgIAogICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVu
Ym94SWZQb3NzaWJsZSgpKSB7CiAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURv
dWJsZUZvcm1hdCgpKSB7CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBkb3Vi
bGVzIGluIEZUTC4KQEAgLTQzOCwyMSArNDU3LDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBp
ZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZh
bHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAg
bV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsK
LSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICBpZiAo
bmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVl
LCBwYXlsb2FkRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1f
dmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0
YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgp
KTsKICAgICAgICAgICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQor
ICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICAgICAgICAg
IG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFs
dWVTb3VyY2UoQ2VsbEluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVj
dWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29s
ZWFuKG1fbm9kZS0+Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+
bG9jYWwoKSkpOwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAg
ICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0
b3JlNjQobG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+
bG9jYWwoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+
bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAt
NDYwLDE4ICs0ODUsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNW
YWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0NhcHR1cmVk
KCkpIHsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFi
bGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2Nh
bCgpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0
Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcp
CisgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0
KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3Zh
bHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFj
ayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlTW92SGludCgpCisg
ICAgeworICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGNvbXBpbGVab21iaWVIaW50KCkKKyAgICB7CisgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogZGF0YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgIG1fbGFzdFNl
dE9wZXJhbmQgPSBkYXRhLT5sb2NhbCgpOworICAgICAgICBtX3ZhbHVlU291cmNlc1tkYXRhLT5s
b2NhbCgpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CiAgICAgfQogICAgIAogICAgIHZv
aWQgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpCiAgICAgewotICAgICAgICAvLyBGSVhNRTogSGFu
ZGxlIHRoZSBNb3ZIaW50IGZvciBPU1IuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2Rl
KTsKICAgICAgICAgc3BlY3VsYXRlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgIH0KICAgICAKQEAg
LTUwMCw3ICs1MzksNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuYWRkV2l0aE92ZXJmbG93MzIobGVmdCwg
cmlnaHQpOwotICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCAwLCAwLCBtX291dC5leHRy
YWN0VmFsdWUocmVzdWx0LCAxKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5v
VmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwogICAgICAgICAgICAg
bV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAwKSk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTI0LDcgKzU2Myw3IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1
bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBz
cGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsK
KyAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRy
YWN0VmFsdWUocmVzdWx0LCAxKSk7CiAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25v
ZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CkBAIC01NDcsNyArNTg2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBy
ZXN1bHQgPSBtX291dC5tdWwobGVmdCwgcmlnaHQpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgTFZhbHVlIG92ZXJmbG93UmVzdWx0ID0gbV9vdXQubXVsV2l0aE92ZXJmbG93
MzIobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwg
MCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShv
dmVyZmxvd1Jlc3VsdCwgMSkpOwogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmV4dHJh
Y3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAK
QEAgLTU1Niw4ICs1OTUsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgICAgICAgICAgCiAgICAg
ICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2Fz
ZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJv
LCAwLCAwLCBtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8pKTsKLSAgICAgICAg
ICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCAwLCAwLCBtX291dC5sZXNzVGhhbihyaWdo
dCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZl
WmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8p
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAs
IG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQzMlplcm8pKTsKICAgICAgICAgICAgICAg
ICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgICAgICB9CkBAIC01ODUsNyArNjI0
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgbmVnYXRl
LXdpdGgtb3ZlcmZsb3cgaW50cmluc2ljLiBIb3BlZnVsbHkgdGhpcwogICAgICAgICAgICAgICAg
IC8vIGRvZXMgdGhlIHRyaWNrLCB0aG91Z2guCiAgICAgICAgICAgICAgICAgTFZhbHVlIG92ZXJm
bG93UmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93MzIobV9vdXQuaW50MzJaZXJvLCB2YWx1
ZSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCAwLCAwLCBtX291dC5leHRy
YWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
T3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0
LCAxKSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJm
bG93UmVzdWx0LCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNjU2LDcgKzY5
NSw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dJbnQz
MihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgc3BlY3VsYXRlRm9yd2FyZCgKLSAgICAgICAg
ICAgIE92ZXJmbG93LCAwLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwgbV9vdXQuaW50MzJaZXJv
KSwKKyAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKHZh
bHVlLCBtX291dC5pbnQzMlplcm8pLAogICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoVmFsdWVG
b3JtYXRVSW50MzIsIHZhbHVlKSk7CiAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwg
dmFsdWUpOwogICAgIH0KQEAgLTY3NSw3ICs3MTQsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAg
ICAgICAgaWYgKG1fbm9kZS0+c3RydWN0dXJlU2V0KCkuc2l6ZSgpID09IDEpIHsKICAgICAgICAg
ICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICBleGl0S2luZCwgY2VsbCwgMCwKKyAgICAg
ICAgICAgICAgICBleGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAogICAgICAgICAgICAg
ICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1
cmVTZXQoKVswXSkpKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtNjkyLDcg
KzczMSw3IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHNwZWN1bGF0
ZSgKLSAgICAgICAgICAgIGV4aXRLaW5kLCBjZWxsLCAwLAorICAgICAgICAgICAgZXhpdEtpbmQs
IGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKICAgICAgICAgICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVj
dHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5sYXN0KCkpKSk7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAg
LTc1NSw3ICs3OTQsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFycmF5OjpDb250aWd1b3Vz
OiB7CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5pc0luQm91bmRzKCkpIHsK
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAgICAgICAgIE91dE9mQm91
bmRzLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgbm9WYWx1ZSgpLCAw
LAogICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwoCiAgICAgICAgICAgICAg
ICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1faGVhcHMuQnV0dGVyZmx5
X3B1YmxpY0xlbmd0aCkpKTsKICAgICAgICAgICAgICAgICAKQEAgLTc2NCw3ICs4MDMsNyBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5pbmRleGVkSW50MzJQcm9w
ZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRpZXMsCiAgICAgICAgICAg
ICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1fb3V0LmludFB0ciksCiAg
ICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX25vZGUtPmNoaWxkMigpKS5tX3Zh
bHVlKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9tSG9sZSwgMCwgMCwgbV9v
dXQuaXNaZXJvNjQocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9t
SG9sZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKICAgICAgICAgICAg
ICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTg2NSwzMiArOTA0LDI2IEBAIHByaXZhdGU6CiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVCYWNrd2FyZChFeGl0S2lu
ZCwgTFZhbHVlLCBOb2RlKiwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCBzcGVjdWxh
dGVCYWNrd2FyZCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFs
dWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAg
ICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIExCYXNp
Y0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0gICAgICAgIAotICAgICAg
ICBtX291dC5icmFuY2goZmFpbENvbmRpdGlvbiwgZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSIGV4aXQuCi0gICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKLSAg
ICAgICAgbV9vdXQuY2FsbChtX2Fib3J0RnVuY3Rpb24pOwotICAgICAgICBtX291dC51bnJlYWNo
YWJsZSgpOwotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
KyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIGZhaWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24sIEZvcm1hdHRlZFZhbHVl
KCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoRXhpdEtpbmQga2lu
ZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9u
LCBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYpCisgICAgdm9pZCBzcGVjdWxhdGVGb3J3YXJkKAorICAg
ICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZh
bHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwKKyAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUm
IHJlY292ZXJ5KQogICAgIHsKLSAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93VmFs
dWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZC4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBlbmRPU1JF
eGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlv
biwgRm9yd2FyZFNwZWN1bGF0aW9uLCByZWNvdmVyeSk7CiAgICAgfQogICAgIAotICAgIHZvaWQg
c3BlY3VsYXRlKEV4aXRLaW5kIGtpbmQsIExWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVl
LCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIHNwZWN1bGF0ZSgKKyAgICAgICAgRXhp
dEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZh
bHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChraW5k
LCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCByZXdpcmluZyB0aGUgT1NSIGV4aXQgdG8gZm9yd2FyZCwgaWYgbV9kaXJlY3Rp
b24gPT0gRm9yd2FyZERpcmVjdGlvbi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAg
ICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgbV9kaXJlY3Rp
b24sIEZvcm1hdHRlZFZhbHVlKCkpOwogICAgIH0KICAgICAKICAgICB2b2lkIHRlcm1pbmF0ZShF
eGl0S2luZCBraW5kKQpAQCAtODk4LDI3ICs5MzEsNDIgQEAgcHJpdmF0ZToKICAgICAgICAgc3Bl
Y3VsYXRlKGtpbmQsIDAsIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBiYWNrd2FyZFR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQor
ICAgIHZvaWQgYmFja3dhcmRUeXBlQ2hlY2soCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1Zh
bHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAor
ICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIGlmICghbV9zdGF0
ZS5uZWVkc1R5cGVDaGVjayhoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChtYXlIYXZlVHlwZUNoZWNrKGhpZ2hWYWx1ZS51
c2VLaW5kKCkpKTsKLSAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwgbG93VmFsdWUs
IGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRpb24pOwotICAgICAgICBtX3N0YXRlLmZvck5v
ZGUoaGlnaFZhbHVlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAgICAgICAgYXBwZW5k
VHlwZUNoZWNrKAorICAgICAgICAgICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRU
aHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uLAorICAgICAgICAgICAg
Rm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZm9yd2FyZFR5cGVDaGVj
ayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bh
c3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgZm9yd2FyZFR5cGVD
aGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBT
cGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWlsQ29u
ZGl0aW9uKQogICAgIHsKLSAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hW
YWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLgotICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAg
IGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVz
UGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgRm9yd2FyZFNwZWN1bGF0aW9uLAorICAgICAg
ICAgICAgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgdHlwZUNoZWNr
KExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFz
c2VkVGhyb3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCB0eXBlQ2hlY2soCisg
ICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRl
ZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikK
ICAgICB7Ci0gICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5
cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZCwgaWYgbV9kaXJlY3Rpb24gPT0g
Rm9yd2FyZERpcmVjdGlvbi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBlbmRUeXBlQ2hlY2soCisgICAgICAgICAg
ICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24s
IG1fZGlyZWN0aW9uLAorICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICBMVmFsdWUgbG93VmFsdWUsIEVk
Z2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAg
IExWYWx1ZSBmYWlsQ29uZGl0aW9uLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZv
cm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRz
VHlwZUNoZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQo
KSkpOworICAgICAgICBhcHBlbmRPU1JFeGl0KEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUu
bm9kZSgpLCBmYWlsQ29uZGl0aW9uLCBkaXJlY3Rpb24sIHJlY292ZXJ5KTsKKyAgICAgICAgbV9z
dGF0ZS5mb3JOb2RlKGhpZ2hWYWx1ZSkuZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CiAgICAg
fQogICAgIAogICAgIExWYWx1ZSBsb3dJbnQzMihFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlv
bk1vZGUgbW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKQEAgLTkyOSw3ICs5Nzcs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCiAgICAg
ICAgIGlmIChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKSkgewotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soYm94ZWRSZXN1bHQsIGVkZ2UsIFNw
ZWNJbnQzMiwgaXNOb3RJbnQzMihib3hlZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVf
Q0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwg
U3BlY0ludDMyLCBpc05vdEludDMyKGJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gdW5ib3hJbnQzMihib3hlZFJlc3VsdCk7CiAgICAgICAgICAgICBtX2ludDMyVmFs
dWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CkBAIC05NDUsNyArOTk0LDggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2Rl
LCBtb2RlID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0NlbGwoZWRnZS51c2VLaW5k
KCkpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChMVmFsdWUgdW5jaGVja2VkUmVzdWx0ID0gbV9q
c1ZhbHVlVmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIEZUTF9UWVBFX0NI
RUNLKHVuY2hlY2tlZFJlc3VsdCwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRS
ZXN1bHQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpz
VmFsdWVWYWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVu
Y2hlY2tlZFJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTk3MSw3ICsxMDIxLDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRS
ZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAg
RlRMX1RZUEVfQ0hFQ0sodW5ib3hlZFJlc3VsdCwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9v
bGVhbih1bmJveGVkUmVzdWx0KSk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAg
ICAgICAgICAgICBqc1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFu
LCBpc05vdEJvb2xlYW4odW5ib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IHVuYm94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKICAgICAgICAgICAgIG1fYm9vbGVhblZh
bHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtMTA5NCw3ICsxMTQ1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVj
dChFZGdlIGVkZ2UsIExWYWx1ZSBjZWxsKQogICAgIHsKICAgICAgICAgRlRMX1RZUEVfQ0hFQ0so
Ci0gICAgICAgICAgICBjZWxsLCBlZGdlLCBTcGVjT2JqZWN0LAorICAgICAgICAgICAganNWYWx1
ZVZhbHVlKGNlbGwpLCBlZGdlLCBTcGVjT2JqZWN0LAogICAgICAgICAgICAgbV9vdXQuZXF1YWwo
CiAgICAgICAgICAgICAgICAgbV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1
Y3R1cmUpLAogICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGdsb2JhbERhdGEoKS5z
dHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpKSk7CkBAIC0xMTA1LDYgKzExNTYsMzU3IEBAIHByaXZhdGU6
CiAgICAgICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKICAgICB9CiAg
ICAgCisgICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8
Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS0+ZmluZChlZGdl
Lm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS0+ZW5kKCkpOwor
ICAgICAgICByZXR1cm4gISFpdGVyLT52YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCB1c2Uo
RWRnZSBlZGdlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVy
YXRvciBpdGVyID0gbV90aW1lVG9MaXZlLT5maW5kKGVkZ2Uubm9kZSgpKTsKKyAgICAgICAgQVNT
RVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLT5lbmQoKSk7CisgICAgICAgIEFTU0VSVChpdGVyLT52
YWx1ZSk7CisgICAgICAgIGl0ZXItPnZhbHVlLS07CisgICAgfQorICAgIAorICAgIC8vIFdyYXBw
ZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19DSElMRFJFTgorICAgIHZvaWQgdXNlKE5v
ZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICB1c2UoZWRnZSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCkKKyAgICB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0tOykgeworICAgICAg
ICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07CisgICAg
ICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0
YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0FyZ3VtZW50
c0FsaWFzKCkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291
cmNlKEFyZ3VtZW50c1NvdXJjZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxkR2VuZXJh
dGUoKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
U291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5z
KG5vZGUpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyB2YWx1ZSB3aWxsIGhhdmUgYmVlbiBm
bHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNvbWUgZm9ybSBvcgorICAgICAgICAgICAgICAgIC8v
IGFub3RoZXIuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxh
dGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hv
dWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVl
U291cmNlKEJvb2xlYW5JbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCisgICAgICAgIEV4aXRL
aW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1
ZSBmYWlsQ29uZGl0aW9uLAorICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24s
IEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgbV9mdGxTdGF0ZS5qaXRD
b2RlLT5vc3JFeGl0LmFwcGVuZCgKKyAgICAgICAgICAgIE9TUkV4aXQoCisgICAgICAgICAgICAg
ICAga2luZCwgbG93VmFsdWUuZm9ybWF0KCksIG1fZ3JhcGgubWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZUZvcihoaWdoVmFsdWUpLAorICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29kZU9yaWdp
biwgbV9sYXN0U2V0T3BlcmFuZCwgbV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZBcmd1bWVudHMoKSwK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkxvY2FscygpKSk7CisgICAg
ICAgIG1fZnRsU3RhdGUub3NyRXhpdC5hcHBlbmQoT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpKTsK
KyAgICAgICAgCisgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9z
ckV4aXQubGFzdCgpOworICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9m
dGxTdGF0ZS5vc3JFeGl0Lmxhc3QoKTsKKworICAgICAgICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9
IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1f
b3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goZmFpbENvbmRp
dGlvbiwgZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhtX3Byb2xvZ3VlKTsKKyAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyA9IGJ1aWxk
QWxsb2NhKG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50UHRyKTsKKyAgICAgICAgCisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIGNvbnRpbnVh
dGlvbik7CisgICAgICAgIAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFyZ3VtZW50czsKKyAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZChtX2NhbGxGcmFtZSk7CisgICAgICAgIGlmIChsb3dWYWx1
ZSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoYXJndW1lbnRzLnZhbHVlKCkpOworICAg
ICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGV4aXQubV92YWx1ZXMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIFZhbHVlU291cmNlIHNvdXJjZSA9IG1fdmFsdWVTb3Vy
Y2VzW2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHNvdXJjZS5raW5kKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhp
dC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDMySW5KU1N0YWNrOgorICAgICAgICAgICAgICAg
IGV4aXQubV92YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFja0FzSW4zMigpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CisgICAg
ICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3Vi
bGUoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVJbkxv
Y2FsczoKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAg
ICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRKU1ZhbHVlLCBtX291dC5nZXQobV9s
b2NhbHM2NFtpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJ
bnQzMkluTG9jYWxzOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAg
ICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEludDMyLCBtX291dC5n
ZXQobV9sb2NhbHMzMltpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBCb29sZWFuSW5Mb2NhbHM6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAor
ICAgICAgICAgICAgICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0Qm9vbGVh
biwgbV9vdXQuZ2V0KG1fbG9jYWxzQm9vbGVhbltpXSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEb3VibGVJbkxvY2FsczoKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRMLgorICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjQKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBBcmd1bWVudHNTb3VyY2U6CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IGltcGxlbWVudCBQaGFudG9tQXJndW1lbnRzLgorICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5ODYKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTb3VyY2VJc0RlYWQ6CisgICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnRG
b3JOb2RlKGV4aXQsIGFyZ3VtZW50cywgaSwgc291cmNlLm5vZGUoKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChkaXJlY3Rpb24gPSBGb3J3YXJk
U3BlY3VsYXRpb24pCisgICAgICAgICAgICBleGl0LmNvbnZlcnRUb0ZvcndhcmQobV9oaWdoQmxv
Y2ssIG1fbm9kZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5LCBhcmd1bWVudHMpOworICAgICAgICAK
KyAgICAgICAgLy8gU28sIHRoZSByZWFsbHkgbGFtZSB0aGluZyBoZXJlIGlzIHRoYXQgd2UgaGF2
ZSB0byBidWlsZCBhbiBMTFZNIGZ1bmN0aW9uIHR5cGUuCisgICAgICAgIC8vIEJvb28uCisgICAg
ICAgIFZlY3RvcjxMVHlwZSwgMTY+IGFyZ3VtZW50VHlwZXM7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBhcmd1bWVu
dFR5cGVzLmFwcGVuZCh0eXBlT2YoYXJndW1lbnRzW2ldKSk7CisgICAgICAgIAorICAgICAgICBt
X291dC5jYWxsKAorICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCisgICAgICAgICAgICAgICAg
bV9vdXQuZ2V0KGluZm8ubV90aHVua0FkZHJlc3MpLAorICAgICAgICAgICAgICAgIHBvaW50ZXJU
eXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSwgYXJndW1lbnRUeXBlcykpKSwKKyAgICAg
ICAgICAgIGFyZ3VtZW50cyk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRUbyhjb250
aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRFeGl0QXJndW1l
bnRGb3JOb2RlKAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1
bWVudHMsIHVuc2lnbmVkIGluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOworICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0
KCkpOworCisgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFydW1lbnQoZXhpdCwgYXJn
dW1lbnRzLCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIAorICAg
ICAgICBpZiAoIWlzTGl2ZShub2RlKSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmVlZHNPU1JCYWNrd2FyZFJld2lyaW5n
KG5vZGUtPm9wKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5v
ZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudChl
eGl0LCBhcmd1bWVudHMsIGluZGV4LCBub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgIGlmIChpc0xpdmUobm9kZSkpCisgICAgICAgICAgICAgICAgICAg
IGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIE5vZGUqIGludDMyVG9Eb3VibGUgPSAwOwor
ICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlVG9JbnQzMiA9IDA7CisgICAgICAgICAgICAgICAg
Tm9kZSogdWludDMyVG9OdW1iZXIgPSAwOworICAgICAgICAgICAgICAgIE5vZGUqIGRvdWJsZUFz
SW50MzIgPSAwOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEhhc2hNYXA8Tm9k
ZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5iZWdpbigpOworICAg
ICAgICAgICAgICAgIEhhc2hNYXA8Tm9kZSosIHVuc2lnbmVkPjo6aXRlcmF0b3IgZW5kID0gbV90
aW1lVG9MaXZlLmVuZCgpOworICAgICAgICAgICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytp
dGVyKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXRlci0+dmFsdWUpCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlk
YXRlID0gaXRlci0+a2V5OworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbmRpZGF0ZS0+Y2hp
bGQxKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbmRpZGF0ZS0+Y2hpbGQxKCkgIT0gbm9kZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNhbmRpZGF0ZS0+
b3AoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgRm9yd2FyZEludDMyVG9Eb3VibGU6CisgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQzMlRvRG91YmxlID0gY2FuZGlkYXRlOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVmFsdWVUb0ludDMyOgorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVUb0ludDMyID0gY2FuZGlkYXRlOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVUludDMyVG9OdW1i
ZXI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlciA9IGNhbmRpZGF0ZTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IERvdWJsZUFzSW50MzI6CisgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJUb051bWJlciA9
IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFuZWVkc09T
UkZvcndhcmRSZXdpcmluZyhjYW5kaWRhdGUtPm9wKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChkb3VibGVBc0ludDMyKQorICAgICAg
ICAgICAgICAgICAgICBub2RlID0gZG91YmxlQXNJbjMyOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGludDMyVG9Eb3VibGUpCisgICAgICAgICAgICAgICAgICAgIG5vZGUgPSBpbnQzMlRvRG91
YmxlOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHZhbHVlVG9JbnQzMikKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IHZhbHVlVG9JbnQzMjsKKyAgICAgICAgICAgICAgICBlbHNlIGlmICh1
aW50MzJUb051bWJlcikKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IHVpbnQzMlRvTnVtYmVy
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0xpdmUobm9kZSkpCisg
ICAgICAgICAgICAgICAgICAgIGZvdW5kID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgKCFmb3VuZCkgeworICAgICAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaW5kZXhdID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBU1NFUlQoaXNM
aXZlKG5vZGUpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9pbnQz
MlZhbHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudChleGl0LCBh
cmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEludDMyLCByZXN1bHQpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoTFZhbHVlIHJlc3VsdCA9
IG1fYm9vbGVhblZhbHVlcy5nZXQobm9kZSkpIHsKKyAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVu
dChleGl0LCBhcmd1bWVudHMsIGluZGV4LCBWYWx1ZUZvcm1hdEJvb2xlYW4sIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChMVmFs
dWUgcmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRk
RXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SlNWYWx1ZSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBkb3VibGVzIGluIHRoZSBGVEwuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjQKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCB0cnlUb1Nl
dENvbnN0YW50RXhpdEFyZ3VtZW50KAorICAgICAgICBPU1JFeGl0JiBleGl0LCBFeGl0QXJndW1l
bnRMaXN0JiBhcmd1bWVudHMsIHVuc2lnbmVkIGluZGV4LCBOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgaWYgKCFub2RlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgSlNDb25zdGFudDoKKyAg
ICAgICAgY2FzZSBXZWFrSlNDb25zdGFudDoKKyAgICAgICAgICAgIGV4aXQubV92YWx1ZXNbaW5k
ZXhdID0gRXhpdFZhbHVlOjpjb25zdGFudChtX2dyYXBoLnZhbHVlT2ZKU0NvbnN0YW50KG5vZGUp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFBoYW50b21Bcmd1bWVu
dHM6CisgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IFBoYW50b21Bcmd1bWVudHMuCisg
ICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
OTg2CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBhZGRFeGl0QXJndW1lbnQoCisg
ICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgdW5zaWdu
ZWQgaW5kZXgsIFZhbHVlRm9ybWF0IGZvcm1hdCwKKyAgICAgICAgTFZhbHVlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KEV4
aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgYXJndW1lbnRz
LmFwcGVuZCh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgbGlua09TUkV4aXRzQW5kQ29t
cGxldGVJbml0aWFsaXphdGlvbkJsb2NrKCkKKyAgICB7CisgICAgICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0VGh1bmsgPQorICAgICAgICAgICAgZ2xvYmFsRGF0YSgpLmdldENUSVN0
dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7CisgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4aXRUaHVuay5jb2RlKCkpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7CisgICAg
ICAgIAorICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoCisgICAgICAgICAgICAmZ2xvYmFs
RGF0YSgpLCAmbV9leGl0VGh1bmtHZW5lcmF0b3IsIG1fZnRsU3RhdGUuZ3JhcGgubV9jb2RlQmxv
Y2ssCisgICAgICAgICAgICBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgCisg
ICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLm9zckV4aXQuc2l6ZSgpID09IG1fZnRsU3RhdGUuaml0
Q29kZS0+b3NyRXhpdC5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
T1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhpdFtpXTsKKyAg
ICAgICAgICAgIE9TUkV4aXQmIGV4aXQgPSBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXRbaV07
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhpbmZvLm1fdGh1bmtK
dW1wLCB0YXJnZXQpOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX291dC5zZXQoCisgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoCisgICAgICAgICAgICAgICAgICAgIGxpbmtC
dWZmZXIubG9jYXRpb25PZihpbmZvLm1fdGh1bmtMYWJlbCkuZXhlY3V0YWJsZUFkZHJlc3MoKSks
CisgICAgICAgICAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGV4aXQubV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRP
ZihleGl0Lm1fdGh1bmtKdW1wKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RhdGUu
aml0Q29kZS0+aW5pdGlhbGl6ZUV4aXRUaHVua3MoCisgICAgICAgICAgICBGSU5BTElaRV9ERkdf
Q09ERSgKKyAgICAgICAgICAgICAgICBsaW5rQnVmZmVyLAorICAgICAgICAgICAgICAgICgiRlRM
IGV4aXQgdGh1bmtzIGZvciAlcyIsIHRvQ1N0cmluZyhDb2RlQmxvY2tXaXRoSklUVHlwZShzdGF0
ZS5ncmFwaC5tX2NvZGVCbG9jayxKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CisKKyAgICAg
ICAgbV9vdXQuanVtcChtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkpOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVNb3ZIaW50KE5vZGUqIG5vZGUpCisgICAgewor
ICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlQo
bm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAgICAgICAgCisgICAgICAgIGludCBvcGVyYW5k
ID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgCisgICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBv
cGVyYW5kOworICAgICAgICBtX3ZhbHVlU291cmNlc1tvcGVyYW5kXSA9IFZhbHVlU291cmNlKG5v
ZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVy
ZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+
Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTExNTEsMTIgKzE1NTMsMTIgQEAgcHJp
dmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgCiAgICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1
ZTsKKyAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxpemF0aW9uOwogICAgIEhhc2hNYXA8QmFzaWNC
bG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsKICAgICAKICAgICBMVmFsdWUgbV9jYWxsRnJh
bWU7CiAgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJlcjsKICAgICBMVmFsdWUgbV90YWdNYXNrOwot
ICAgIExWYWx1ZSBtX2Fib3J0RnVuY3Rpb247CiAgICAgCiAgICAgSGFzaFNldDxOb2RlKj4gbV9m
bHVzaGVkTG9jYWxPcHM7CiAgICAgVmVjdG9yPE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xp
c3Q7CkBAIC0xMTY1LDE1ICsxNTY3LDIxIEBAIHByaXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwg
TFZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jv
b2xlYW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7
CisgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+IG1fdGltZVRvTGl2ZTsKICAgICAKICAgICBP
cGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzQm9vbGVhbjsKICAgICBPcGVyYW5kczxMVmFsdWU+IG1f
bG9jYWxzMzI7CiAgICAgT3BlcmFuZHM8TFZhbHVlPiBtX2xvY2FsczY0OwogICAgIAorICAgIE9w
ZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291cmNlczsKKyAgICBpbnQgbV9sYXN0U2V0T3Bl
cmFuZDsKKyAgICBFeGl0VGh1bmtHZW5lcmF0b3IgbV9leGl0VGh1bmtHZW5lcmF0b3I7CisgICAg
CiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2Nr
OwogICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hCbG9jazsKICAgICBMQmFzaWNCbG9jayBtX25l
eHRMb3dCbG9jazsKKyAgICB1bnNpZ25lZCBtX25vZGVJbmRleDsKICAgICBOb2RlKiBtX25vZGU7
CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0LmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitPU1JFeGl0
OjpPU1JFeGl0KAorICAgIEV4aXRLaW5kIGV4aXRLaW5kLCBWYWx1ZUZvcm1hdCBwcm9maWxlVmFs
dWVGb3JtYXQsCisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAgICBpbnQgbGFzdFNldE9wZXJhbmQsIHVuc2lnbmVk
IG51bWJlck9mQXJndW1lbnRzLCB1bnNpZ25lZCBudW1iZXJPZkxvY2FscykKKyAgICA6IE9TUkV4
aXRCYXNlKGV4aXRLaW5kLCBjb2RlT3JpZ2luKQorICAgICwgbV9wcm9maWxlVmFsdWVGb3JtYXQo
cHJvZmlsZVZhbHVlRm9ybWF0KQorICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQor
ICAgICwgbV9jb2RlT3JpZ2luKGNvZGVPcmlnaW4pCisgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZz
ZXQoMCkKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQobGFzdFNldE9wZXJhbmQpCisgICAgLCBtX3Zh
bHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCit7Cit9CisKK0NvZGVMb2Nh
dGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENv
ZGVCbG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcCgKKyAgICAgICAg
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgICAgICBmdGxDb2RlQmxvY2stPmdldEpJ
VENvZGUoKS0+ZnRsKCktPmV4aXRUaHVua3MoKS5kYXRhTG9jYXRpb24oKSkgKworICAgICAgICBt
X3BhdGNoYWJsZUNvZGVPZmZzZXQpOworfQorCit2b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0Zvcndh
cmQoCisgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jaywgREZHOjpOb2RlKiBjdXJyZW50Tm9kZSwg
dW5zaWduZWQgbm9kZUluZGV4LAorICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlICZ2YWx1ZSwgRXhp
dEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQoreworICAgIE5vZGUqIG5vZGU7CisgICAgTm9kZSog
bGFzdE1vdkhpbnQ7CisgICAgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3Vy
cmVudE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZVJlY292ZXJ5KTsKKworICAgIEFTU0VSVChub2Rl
LT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAKKyAgICBtX2Nv
ZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgIAorICAgIGlmICghdmFsdWUpCisgICAg
ICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgb3ZlcnJpZGRlbk9wZXJhbmQgPSBsYXN0TW92SGlu
dC0+bG9jYWwoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3ZlcnJpZGRlbk9wZXJhbmQ7Cisg
ICAgCisgICAgLy8gSXMgdGhlIHZhbHVlIGZvciB0aGlzIG9wZXJhbmQgYmVpbmcgcGFzc2VkIGFz
IGFuIGFyZ3VtZW50IHRvIHRoZSBleGl0LCBvciBpcworICAgIC8vIGl0IHNvbWV0aGluZyBlbHNl
PyBJZiBpdCdzIGFuIGFyZ3VtZW50IGFscmVhZHksIHRoZW4gcmVwbGFjZSB0aGF0IGFyZ3VtZW50
OworICAgIC8vIG90aGVyd2lzZSBhZGQgYW5vdGhlciBhcmd1bWVudC4KKyAgICBpZiAobV92YWx1
ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdLmlzQXJndW1lbnQoKSkgeworICAgICAgICBFeGl0QXJndW1l
bnQgYXJndW1lbnQgPSBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0uZXhpdEFyZ3VtZW50KCk7
CisgICAgICAgIGFyZ3VtZW50c1tleGl0QXJndW1lbnQuYXJndW1lbnQoKV0gPSB2YWx1ZS52YWx1
ZSgpOworICAgICAgICBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0gPSBFeGl0VmFsdWU6OmV4
aXRBcmd1bWVudCgKKyAgICAgICAgICAgIGV4aXRBcmd1bWVudC53aXRoRm9ybWF0KHZhbHVlLmZv
cm1hdCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJn
dW1lbnQgPSBhcmd1bWVudHMuc2l6ZSgpOworICAgIGFyZ3VtZW50cy5hcHBlbmQodmFsdWUudmFs
dWUoKSk7CisgICAgbV92YWx1ZXNbbV9sYXN0U2V0T3BlcmFuZF0gPSBFeGl0VmFsdWU6OmV4aXRB
cmd1bWVudCgKKyAgICAgICAgRXhpdEFyZ3VtZW50KHZhbHVlLmZvcm1hdCgpLCBhcmd1bWVudCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRfaAorI2RlZmluZSBGVExPU1JFeGl0
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKKyNp
bmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIK
KyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRMaXN0LmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVl
LmgiCisjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oIgorI2luY2x1ZGUg
Ik9wZXJhbmRzLmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVHJhY2tzIG9uZSBPU1IgZXhpdCBzaXRlIHdpdGhpbiB0
aGUgRlRMIEpJVC4gT1NSIGV4aXQgaW4gRlRMIHdvcmtzIGJ5IGRlY29uc3RydWN0aW5nCisvLyB0
aGUgY3JhenkgdGhhdCBpcyBPU1IgZG93biB0byBzaW1wbGUgU1NBIENGRyBwcmltaXRpdmVzIHRo
YXQgYW55IGNvbXBpbGVyIGJhY2tlbmQKKy8vIChpbmNsdWRpbmcgb2YgY291cnNlIExMVk0pIGNh
biBncm9rIGFuZCBkbyBtZWFuaW5nZnVsIHRoaW5ncyB0by4gRXhjZXB0IGZvcgorLy8gd2F0Y2hw
b2ludC1iYXNlZCBleGl0cywgd2hpY2ggaGF2ZW4ndCB5ZXQgYmVlbiBpbXBsZW1lbnRlZCAoc2Vl
IHdlYmtpdC5vcmcvYi8xMTM2NDcpLAorLy8gYW4gZXhpdCBpcyBqdXN0IGEgY29uZGl0aW9uYWwg
YnJhbmNoIGluIHRoZSBlbWl0dGVkIGNvZGUgd2hlcmUgb25lIGRlc3RpbmF0aW9uIGlzIHRoZQor
Ly8gY29udGludWF0aW9uIGFuZCB0aGUgb3RoZXIgaXMgYSBiYXNpYyBibG9jayB0aGF0IHBlcmZv
cm1zIGEgbm8tcmV0dXJuIHRhaWwtY2FsbCB0byBhbgorLy8gZXhpdCB0aHVuay4gVGhpcyB0aHVu
ayB0YWtlcyBhcyBpdHMgYXJndW1lbnRzIHRoZSBsaXZlIG5vbi1jb25zdGFudAorLy8gbm90LWFs
cmVhZHktYWNjb3VudGVkLWZvciBieXRlY29kZSBzdGF0ZS4gVG8gYXBwcmVjaWF0ZSBob3cgdGhp
cyB3b3JrcyBjb25zaWRlciB0aGUKKy8vIGZvbGxvd2luZyBKYXZhU2NyaXB0IHByb2dyYW0sIGFu
ZCBpdHMgbG93ZXJpbmcgZG93biB0byBMTFZNIElSIGluY2x1ZGluZyB0aGUgcmVsZXZhbnQKKy8v
IGV4aXRzOgorLy8KKy8vIGZ1bmN0aW9uIGZvbyhvKSB7CisvLyAgICAgdmFyIGEgPSBvLmE7IC8v
IHByZWRpY3RlZCBpbnQKKy8vICAgICB2YXIgYiA9IG8uYjsKKy8vICAgICB2YXIgYyA9IG8uYzsg
Ly8gTkIgdGhpcyBpcyBkZWFkCisvLyAgICAgYSA9IGEgfCA1OyAvLyBvdXIgZXhhbXBsZSBPU1Ig
ZXhpdDogbmVlZCB0byBjaGVjayBpZiBhIGlzIGFuIGludAorLy8gICAgIHJldHVybiBhICsgYjsK
Ky8vIH0KKy8vCisvLyBKdXN0IGNvbnNpZGVyIHRoZSAiYSB8IDUiLiBJbiB0aGUgREZHIElSLCB0
aGlzIGxvb2tzIGxpa2U6CisvLworLy8gQml0T3IoQ2hlY2s6SW50MzI6QGEsIEludDMyOjUpCisv
LworLy8gV2hlcmUgQGEgaXMgdGhlIG5vZGUgZm9yIHRoZSBHZXRMb2NhbCBub2RlIHRoYXQgZ2V0
cyB0aGUgdmFsdWUgb2YgdGhlICdhJyB2YXJpYWJsZS4KKy8vIENvbmNlcHR1YWxseSwgdGhpcyBu
b2RlIGNhbiBiZSBmdXJ0aGVyIGJyb2tlbiBkb3duIHRvIHRoZSBmb2xsb3dpbmcgKG5vdGUgdGhh
dCB0aGlzCisvLyBwYXJ0aWN1bGFyIGxvd2VyaW5nIG5ldmVyIGFjdHVhbGx5IGhhcHBlbnMgLSB3
ZSBza2lwIHRoaXMgc3RlcCBhbmQgZ28gc3RyYWlnaHQgdG8KKy8vIExMVk0gSVIgLSBidXQgaXQn
cyBzdGlsbCB1c2VmdWwgdG8gc2VlIHRoaXMpOgorLy8KKy8vIGV4aXRJZihAYSBpcyBub3QgaW50
MzIpOworLy8gY29udGludWF0aW9uOworLy8KKy8vIFdoZXJlICdleGl0SWYoKScgaXMgYSBmdW5j
dGlvbiB0aGF0IHdpbGwgZXhpdCBpZiB0aGUgYXJndW1lbnQgaXMgdHJ1ZSwgYW5kCisvLyAnY29u
dGludWF0aW9uJyBpcyB0aGUgc3R1ZmYgdGhhdCB3ZSB3aWxsIGRvIGFmdGVyIHRoZSBleGl0SWYo
KSBjaGVjay4gKE5vdGUgdGhhdAorLy8gRlRMIHJlZmVycyB0byAnZXhpdElmKCknIGFzICdzcGVj
dWxhdGUoKScsIHdoaWNoIGlzIGluIGxpbmUgd2l0aCBERkcgdGVybWlub2xvZ3kuKQorLy8gVGhp
cyB0aGVuIGdldHMgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyBMTFZNIElSLCBhc3N1bWlu
ZyB0aGF0ICUwIGlzIHRoZSBMTFZNCisvLyB2YWx1ZSBjb3JyZXNwb25kaW5nIHRvIHZhcmlhYmxl
ICdhJywgYW5kICUxIGlzIHRoZSBMTFZNIHZhbHVlIGZvciB2YXJpYWJsZSAnYic6CisvLworLy8g
ICAlMiA9IC4uLiAvLyB0aGUgcHJlZGljdGF0ZSBjb3JyZXNwb25kaW5nIHRvICdAYSBpcyBub3Qg
aW50MzInCisvLyAgIGJyIGkxICUyLCBsYWJlbCAlMywgbGFiZWwgJTQKKy8vIDsgPGxhYmVsPjoz
CisvLyAgIGNhbGwgdm9pZCBleGl0VGh1bmsxKCUwLCAlMSkgLy8gcGFzcyAnYScgYW5kICdiJywg
c2luY2UgdGhleSdyZSBib3RoIGxpdmUtaW4tYnl0ZWNvZGUKKy8vICAgdW5yZWFjaGFibGUKKy8v
IDsgPGxhYmVsPjo0CisvLyAgIC4uLiAvLyBjb2RlIGZvciB0aGUgY29udGludWF0aW9uCisvLwor
Ly8gV2hlcmUgJ2V4aXRUaHVuazEnIGlzIHRoZSBJUiB0byBnZXQgdGhlIGV4aXQgdGh1bmsgZm9y
ICp0aGlzKiBPU1IgZXhpdC4gRWFjaCBPU1IKKy8vIGV4aXQgd2lsbCBhcHBlYXIgdG8gTExWTSB0
byBoYXZlIGEgZGlzdGluY3QgZXhpdCB0aHVuay4KKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBkaWRu
J3QgaGF2ZSB0byBwYXNzICc1JywgJ28nLCBvciAnYycgdG8gdGhlIGV4aXQgdGh1bmsuIDUgaXMg
YQorLy8gY29uc3RhbnQgYW5kIHRoZSBERkcgYWxyZWFkeSBrbm93cyB0aGF0LCBhbmQgY2FuIGFs
cmVhZHkgdGVsbCB0aGUgT1NSIGV4aXQgbWFjaGluZXJ5CisvLyB3aGF0IHRoYXQgY29udGFudCBp
cyBhbmQgd2hpY2ggYnl0ZWNvZGUgdmFyaWFibGVzIChpZiBhbnkpIGl0IG5lZWRzIHRvIGJlIGRy
b3BwZWQKKy8vIGludG8uIFRoaXMgaXMgY29udmV5ZWQgdG8gdGhlIGV4aXQgc3RhdGljYWxseSwg
dmlhIHRoZSBPU1JFeGl0IGRhdGEgc3RydWN0dXJlIGJlbG93LgorLy8gU2VlIHRoZSBjb2RlIGZv
ciBFeGl0VmFsdWUgZm9yIGRldGFpbHMuICdvJyBpcyBhbiBhcmd1bWVudCwgYW5kIGFyZ3VtZW50
cyBhcmUgYWx3YXlzCisvLyAiZmx1c2hlZCIgLSBpZiB5b3UgbmV2ZXIgYXNzaWduIHRoZW0gdGhl
biB0aGVpciB2YWx1ZXMgYXJlIHN0aWxsIGluIHRoZSBhcmd1bWVudAorLy8gc3RhY2sgc2xvdHMs
IGFuZCBpZiB5b3UgZG8gYXNzaWduIHRoZW0gdGhlbiB3ZSBlYWdlcmx5IHN0b3JlIHRoZW0gaW50
byB0aG9zZSBzbG90cy4KKy8vICdjJyBpcyBkZWFkIGluIGJ5dGVjb2RlLCBhbmQgdGhlIERGRyBr
bm93cyB0aGlzOyB3ZSBzdGF0aWNhbGx5IHRlbGwgdGhlIGV4aXQgdGh1bmsKKy8vIHRoYXQgaXQn
cyBkZWFkIGFuZCBkb24ndCBoYXZlIHRvIHBhc3MgYW55dGhpbmcuIFRoZSBleGl0IHRodW5rIHdp
bGwgImluaXRpYWxpemUiIGl0cworLy8gdmFsdWUgdG8gVW5kZWZpbmVkLgorLy8KKy8vIFRoaXMg
YXBwcm9hY2ggdG8gT1NSIGV4aXQgaGFzIGEgbnVtYmVyIG9mIHZpcnR1ZXM6CisvLworLy8gLSBJ
dCBpcyBhbiBlbnRpcmVseSB1bnN1cnByaXNpbmcgcmVwcmVzZW50YXRpb24gZm9yIGEgY29tcGls
ZXIgdGhhdCBhbHJlYWR5IGdyb2tzCisvLyAgIENGRy1saWtlIElScyBmb3IgQy1saWtlIGxhbmd1
YWdlcy4gQWxsIGV4aXN0aW5nIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMganVzdAorLy8g
ICB3b3JrLgorLy8KKy8vIC0gSXQgbGVuZHMgaXRzZWxmIG5hdHVyYWxseSB0byBtb2Rlcm4gYXBw
cm9hY2hlcyB0byBjb2RlIG1vdGlvbi4gRm9yIGV4YW1wbGUsIHlvdQorLy8gICBjb3VsZCBzaW5r
IG9wZXJhdGlvbnMgZnJvbSBhYm92ZSB0aGUgZXhpdCB0byBiZWxvdyBpdCwgaWYgeW91IGp1c3Qg
ZHVwbGljYXRlIHRoZQorLy8gICBvcGVyYXRpb24gaW50byB0aGUgT1NSIGV4aXQgYmxvY2suIFRo
aXMgaXMgYm90aCBsZWdhbCBhbmQgZGVzaXJhYmxlLiBJdCB3b3JrcworLy8gICBiZWNhdXNlIHRo
ZSBiYWNrZW5kIHNlZXMgdGhlIE9TUiBleGl0IGJsb2NrIGFzIGJlaW5nIG5vIGRpZmZlcmVudCB0
aGFuIGFueSBvdGhlciwKKy8vICAgYW5kIExMVk0gYWxyZWFkeSBzdXBwb3J0cyBzaW5raW5nIGlm
IGl0IHNlZXMgdGhhdCBhIHZhbHVlIGlzIG9ubHkgcGFydGlhbGx5IHVzZWQuCisvLyAgIEhlbmNl
IHRoZXJlIGV4aXN0cyBhIHZhbHVlIHRoYXQgZG9taW5hdGVzIHRoZSBleGl0IGJ1dCBpcyBvbmx5
IHVzZWQgYnkgdGhlIGV4aXQKKy8vICAgdGh1bmsgYW5kIG5vdCBieSB0aGUgY29udGludWF0aW9u
LCBzaW5raW5nIG91Z2h0IHRvIGtpY2sgaW4gZm9yIHRoYXQgdmFsdWUuCisvLyAgIEhvaXN0aW5n
IG9wZXJhdGlvbnMgZnJvbSBiZWxvdyBpdCB0byBhYm92ZSBpdCBpcyBhbHNvIHBvc3NpYmxlLCBm
b3Igc2ltaWxhcgorLy8gICByZWFzb25zLgorLy8KKy8vIC0gVGhlIG5vLXJldHVybiB0YWlsLWNh
bGwgdG8gdGhlIE9TUiBleGl0IHRodW5rIGNhbiBiZSBzdWJqZWN0ZWQgdG8gc3BlY2lhbGl6ZWQK
Ky8vICAgY29kZS1zaXplIHJlZHVjdGlvbiBvcHRpbWl6YXRpb25zLCB0aG91Z2ggdGhpcyBpcyBv
cHRpb25hbC4gRm9yIGV4YW1wbGUsIGluc3RlYWQKKy8vICAgb2YgYWN0dWFsbHkgZW1pdHRpbmcg
YSBjYWxsIGFsb25nIHdpdGggYWxsIHRoYXQgZ29lcyB3aXRoIGl0IChsaWtlIHBsYWNpbmcgdGhl
CisvLyAgIGFyZ3VtZW50cyBpbnRvIGFyZ3VtZW50IHBvc2l0aW9uKSwgdGhlIGJhY2tlbmQgY291
bGQgY2hvb3NlIHRvIHNpbXBseSBpbmZvcm0gdXMKKy8vICAgd2hlcmUgaXQgaGFkIHBsYWNlZCB0
aGUgYXJndW1lbnRzIGFuZCBleHBlY3QgdGhlIGNhbGxlZSAoaS5lLiB0aGUgZXhpdCB0aHVuaykg
dG8KKy8vICAgZmlndXJlIGl0IG91dCBmcm9tIHRoZXJlLiBJdCBjb3VsZCBhbHNvIHRlbGwgdXMg
d2hhdCB3ZSBuZWVkIHRvIGRvIHRvIHBvcCBzdGFjaywKKy8vICAgYWx0aG91Z2ggYWdhaW4sIGl0
IGRvZXNuJ3QgaGF2ZSB0bzsgaXQgY291bGQganVzdCBlbWl0IHRoYXQgY29kZSBub3JtYWxseS4g
VGhvdWdoCisvLyAgIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQsIHdlIGNvdWxkOyB0aGUgb25s
eSB0aGluZyB0aGF0IHdvdWxkIGNoYW5nZSBvbiBvdXIgZW5kCisvLyAgIGlzIHRoYXQgd2UnZCBu
ZWVkIGZlZWRiYWNrIGZyb20gdGhlIGJhY2tlbmQgYWJvdXQgdGhlIGxvY2F0aW9uIG9mIHRoZSBh
cmd1bWVudHMKKy8vICAgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRoaW5ncyB0aGF0IG5lZWQg
dG8gYmUgZG9uZSB0byBwb3Agc3RhY2suIFRoaXMgd291bGQKKy8vICAgaW52b2x2ZSBzd2l0Y2hp
bmcgdGhlIG1fdmFsdWVzIGFycmF5IHRvIHVzZSBzb21ldGhpbmcgbW9yZSBha2luIHRvIFZhbHVl
UmVjb3ZlcnkKKy8vICAgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgRXhpdFZhbHVlLCBhbGJlaXQg
cG9zc2libHkgd2l0aCBzb21lIGhhY2tzIHRvIGJldHRlcgorLy8gICB1bmRlcnN0YW5kIHRoZSBr
aW5kcyBvZiBwbGFjZXMgd2hlcmUgdGhlIExMVk0gYmFja2VuZCB3b3VsZCBwdXQgdmFsdWVzLgor
Ly8KKy8vIC0gSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gYWxsb3cgdGhlIGJhY2tlbmQgdG8gZG8g
aXRzIG93biBleGl0IGhvaXN0aW5nLCBieSB1c2luZworLy8gICBpbnRyaW5zaWNzIChvciBtZXRh
LWRhdGEsIG9yIHNvbWV0aGluZykgdG8gaW5mb3JtIHRoZSBiYWNrZW5kIHRoYXQgaXQncyBzYWZl
IHRvCisvLyAgIG1ha2UgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBtb3JlIHRy
dXRoeS4KKy8vCisvLyAtIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgd2F0Y2hwb2lu
dHMgKHNlZSB3ZWJraXQub3JnL2IvMTEzNjQ3KSBieSBtYWtpbmcKKy8vICAgdGhlIHByZWRpY2F0
ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBiZSBhbiBpbnRyaW5zaWMgdGhhdCB0aGUgYmFja2VuZCBr
bm93cyB0byBiZQorLy8gICB0cnVlIGF0IGNvbXBpbGUtdGltZS4gVGhlIGJhY2tlbmQgY291bGQg
dGhlbiB0dXJuIHRoZSBjb25kaXRpb25hbCBicmFuY2ggaW50byBhCisvLyAgIHJlcGxhY2VhYmxl
IGp1bXAsIG11Y2ggbGlrZSB0aGUgREZHIGRvZXMuCisKK3N0cnVjdCBPU1JFeGl0IDogcHVibGlj
IE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCwgVmFsdWVGb3Jt
YXQgcHJvZmlsZVZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAorICAg
ICAgICBDb2RlT3JpZ2luLCBpbnQgbGFzdFNldE9wZXJhbmQsIHVuc2lnbmVkIG51bWJlck9mQXJn
dW1lbnRzLAorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgCisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1l
bnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCisg
ICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQg
YW5kIHdlJ2xsIGhhdmUgYQorICAgIC8vIG1ldGhvZCBvZiBnZXR0aW5nIGEgdmFsdWUgcHJvZmls
ZS4gTm90ZSB0aGF0IGFsbCBvZiB0aGUgRXhpdEFyZ3VtZW50J3MKKyAgICAvLyBhcmUgYWxyZWFk
eSBhd2FyZSBvZiB0aGlzIHBvc3NpYmxlIG9mZi1ieS1vbmUsIHNvIHRoZXJlIGlzIG5vIG5lZWQg
dG8KKyAgICAvLyBjb3JyZWN0IHRoZW0uCisgICAgVmFsdWVGb3JtYXQgbV9wcm9maWxlVmFsdWVG
b3JtYXQ7CisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3ZhbHVlUHJvZmlsZTsK
KyAgICAKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICAKKyAgICAvLyBPZmZzZXQg
d2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQuCisgICAgdW5z
aWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIAorICAgIGludCBtX2xhc3RTZXRPcGVy
YW5kOworICAgIAorICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgCisgICAg
Q29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29k
ZUJsb2NrKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQoCisgICAgICAg
IERGRzo6QmFzaWNCbG9jayosIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJ
bmRleCwKKyAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUmLCBFeGl0QXJndW1lbnRMaXN0JiBh
cmd1bWVudHMpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NSRXhp
dENvbXBpbGF0aW9uSW5mb19oCisjZGVmaW5lIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAor
CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2lu
Y2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBPU1JFeGl0Q29tcGls
YXRpb25JbmZvIHsKKyAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKKyAgICAgICAgOiBtX3Ro
dW5rQWRkcmVzcygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIG1fdGh1bmtMYWJlbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3Ro
dW5rSnVtcDsKKyAgICBMVmFsdWUgbV90aHVua0FkZHJlc3M7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxl
ci5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0UHJlcGFyYXRpb24uaCIKKyNpbmNsdWRl
ICJGVExDQXJndW1lbnRHZXR0ZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCitleHRlcm4gIkMiIHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYywg
dW5zaWduZWQgZXhpdElEKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJG
VEwgT1NSIEV4aXQgQ29tcGlsYXRpb24iKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IGV4ZWMtPmNvZGVCbG9jaygpOworICAgIAorICAgIEFTU0VSVChjb2RlQmxvY2spOworICAg
IEFTU0VSVChjb2RlQmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpOworICAg
IAorICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7Cisg
ICAgCisgICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5mdGwoKS0+
b3NyRXhpdFtleGl0SURdOworICAgIAorICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChl
eGl0Lm1fY29kZU9yaWdpbik7CisgICAgCisgICAgQ0NhbGxIZWxwZXJzIGppdChnbG9iYWxEYXRh
LCBjb2RlQmxvY2spOworICAgIAorICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgZmFpcmx5IGVhc3ks
IGV2ZW4gdGhvdWdoIGl0IGlzIGhvcnJpYmx5IGdyb3NzLiBXZSBrbm93IHRoYXQKKyAgICAvLyBM
TFZNIHdvdWxkIGhhdmUgcGFzc2VzIHVzIGFsbCBvZiB0aGUgc3RhdGUgdmlhIGFyZ3VtZW50cy4g
V2Uga25vdyBob3cgdG8gZ2V0CisgICAgLy8gdGhlIGFyZ3VtZW50cy4gQW5kLCB3ZSBrbm93IGhv
dyB0byBwb3Agc3RhY2sgYmFjayB0byB0aGUgSklUIHN0YWNrIGZyYW1lLCBzb3J0CisgICAgLy8g
b2Y6IHdlIGtub3cgdGhhdCBpdCdzIHR3byBmcmFtZXMgYmVuZWF0aCB1cy4gVGhpcyBpcyB0ZXJy
aWJsZSBhbmQgSSBmZWVsCisgICAgLy8gYXNoYW1lZCBvZiBpdCwgYnV0IGl0IHdpbGwgd29yayBm
b3Igbm93LgorICAgIAorICAgIENBcmd1bWVudEdldHRlciBhcmd1bWVudHMoaml0KTsKKyAgICAK
KyAgICAvLyBGaXJzdCByZWNvdmVyIG91ciBjYWxsIGZyYW1lIGFuZCB0YWcgdGhpbmdpZXMuCisg
ICAgYXJndW1lbnRzLmxvYWROZXh0UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAg
ICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBH
UFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7Cisg
ICAgCisgICAgLy8gRG8gc29tZSB2YWx1ZSBwcm9maWxpbmcuCisgICAgaWYgKGV4aXQubV9wcm9m
aWxlVmFsdWVGb3JtYXQgIT0gSW52YWxpZFZhbHVlRm9ybWF0KSB7CisgICAgICAgIGFyZ3VtZW50
cy5sb2FkTmV4dEFuZEJveChleGl0Lm1fcHJvZmlsZVZhbHVlRm9ybWF0LCBHUFJJbmZvOjpub25B
cmdHUFIwLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9Cisg
ICAgCisgICAgLy8gU3RhcnQgYnkgZHVtcGluZyBhbGwgYXJndW1lbnQgZXhpdCB2YWx1ZXMgdG8g
dGhlIHN0YWNrLgorICAgIAorICAgIFZlY3RvcjxFeGl0QXJndW1lbnRGb3JPcGVyYW5kLCAxNj4g
c29ydGVkQXJndW1lbnRzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFs
dWVzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEV4aXRWYWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1
ZXNbaV07CisgICAgICAgIGlmICghdmFsdWUuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgIHNvcnRlZEFyZ3VtZW50cy5hcHBlbmQoRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZCgKKyAgICAgICAgICAgIHZhbHVlLmV4aXRBcmd1bWVudCgpLCBleGl0Lm1fdmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpKSkpOworICAgIH0KKyAgICBzdGQ6OnNvcnQoc29ydGVkQXJndW1lbnRz
LmJlZ2luKCksIHNvcnRlZEFyZ3VtZW50cy5lbmQoKSwgbGVzc2VyQXJndW1lbnRJbmRleCk7Cisg
ICAgCit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21w
aWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExPU1JF
eGl0Q29tcGlsZXJfaAorI2RlZmluZSBGVExPU1JFeGl0Q29tcGlsZXJfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCisvLyBUYWtlcyB0aGUgY2FsbCBmcmFtZSBhbmQgdGhlIGluZGV4
IG9mIHRoZSBleGl0LCBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcyB0bworLy8ganVtcCB0by4KK2V4
dGVybiAiQyIgdm9pZCogREZHX09QRVJBVElPTiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUq
LCB1bnNpZ25lZCBleGl0SUQpIFdURl9JTlRFUk5BTDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0
Q29tcGlsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJl
dmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNSwxOSArMTM1LDIwIEBAIHB1YmxpYzoKICAgICBMVmFsdWUg
emVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1
aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBpbnRDYXN0KExWYWx1ZSB2YWx1ZSwg
TFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRDYXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUp
OyB9CiAgICAgTFZhbHVlIGNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gaW50Q2Fz
dCh2YWx1ZSwgaW50MzIpOyB9CisgICAgTFZhbHVlIGludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5
cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsg
fQogICAgIAogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRM
b2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVl
LCBMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUs
IHJlZmVyZW5jZSk7IH0KICAgICAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIgcG9pbnRl
ciwgTFR5cGUgcmVmVHlwZSkKICAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBnZXQoYnVp
bGRJbnRUb1B0cihtX2J1aWxkZXIsIHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOworICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gZ2V0KGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkp
OwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1f
aGVhcHMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICB2b2lkIHN0b3JlKExW
YWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5cGUpCiAgICAgewot
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gc2V0KHZhbHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRl
ciwgcG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBz
ZXQodmFsdWUsIGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwogICAgICAgICBw
b2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwogICAg
IH0KICAgICAKQEAgLTI0NCwxMCArMjQ1LDE4IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgc2VsZWN0
KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1
aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KICAgICBMVmFs
dWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBi
dWlsZEV4dHJhY3RWYWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9CiAgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVu
Y3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVp
bGRlciwgZnVuY3Rpb24sIHZlY3Rvcik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rp
b24pIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uKTsgfQogICAgIExWYWx1
ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1aWxkQ2FsbCht
X2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5j
dGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJldHVybiBidWlsZENhbGwobV9idWls
ZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMik7IH0KICAgICAKKyAgICBMVmFsdWUgY29udmVydFRv
VGFpbENhbGwoTFZhbHVlIGNhbGwpCisgICAgeworICAgICAgICBzZXRUYWlsQ2FsbChjYWxsLCBJ
c1RhaWxDYWxsKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAogICAgIHZvaWQg
anVtcChMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyBidWlsZEJyKG1fYnVpbGRlciwgZGVzdGlu
YXRpb24pOyB9CiAgICAgdm9pZCBicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sg
dGFrZW4sIExCYXNpY0Jsb2NrIG5vdFRha2VuKSB7IGJ1aWxkQ29uZEJyKG1fYnVpbGRlciwgY29u
ZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgdm9pZCByZXQoTFZhbHVlIHZhbHVlKSB7
IGJ1aWxkUmV0KG1fYnVpbGRlciwgdmFsdWUpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJG
VExKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgogI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICBMTW9kdWxlIG1vZHVsZTsKICAgICBM
VmFsdWUgZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CisgICAgVmVjdG9y
PE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CiAgICAgCiAgICAgdm9pZCBkdW1wU3Rh
dGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJGVExUaHVua3MuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSkKK3sKKyAg
ICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJz
ICsgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZl
ciogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEtPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0
Y2hTaXplKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2Rl
ZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyAr
K2kpCisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSwg
YnVmZmVyICsgaSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzICsgaSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAgICAgICBqaXQuc3RvcmVEb3Vi
bGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBz
Y3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNhbGwuCisgICAgaml0Lm1vdmUoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkp
LCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKworICAg
IC8vIGFyZ3VtZW50IDAgaXMgYWxyZWFkeSB0aGUgY2FsbCBmcmFtZS4KKyAgICBqaXQubW92ZShH
UFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgCisgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVu
Z3RoUHRyKCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgIGppdC5z
dG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5mbzo6bm9uUHJl
c2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
RlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUkluZm86Om51bWJl
ck9mQXJndW1lbnRSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0dXJu
R1BSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoR1BSSW5mbzo6bm9uUHJlc2VydmVkTm9uUmV0
dXJuR1BSLCBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIH0KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsg
KytpKQorICAgICAgICBqaXQubG9hZDY0KGJ1ZmZlciArIGksIEdQUkluZm86OnRvQXJndW1lbnRS
ZWdpc3RlcihpKSk7CisgICAgCisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIp
OworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIEdM
T0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIGNvbXBp
bGVGVExPU1JFeGl0KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1ZmZlciwgKCJG
VEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFRo
dW5rc19oCisjZGVmaW5lIEZUTFRodW5rc19oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CisKK25hbWVzcGFj
ZSBGVEwgeworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dl
bmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExUSHVua3NfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExWYWx1
ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBWYWx1ZUZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIEludmFsaWRWYWx1ZUZvcm1hdDoKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6CisgICAgICAgIG91
dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRV
SW50MzI6CisgICAgICAgIG91dC5wcmludCgiVUludDMyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJCb29sZWFuIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZToKKyAgICAgICAg
b3V0LnByaW50KCJKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9y
bWF0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlRm9ybWF0X2gKKyNkZWZpbmUgRlRMVmFsdWVGb3Jt
YXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERh
dGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAorLy8gdW5saWtlIERh
dGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVu
IFVJbnQzMiBhbmQgSW50MzIuCisKK2VudW0gVmFsdWVGb3JtYXQgeworICAgIEludmFsaWRWYWx1
ZUZvcm1hdCwKKyAgICBWYWx1ZUZvcm1hdEludDMyLAorICAgIFZhbHVlRm9ybWF0VUludDMyLAor
ICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKKyAgICBWYWx1ZUZvcm1hdEpTVmFsdWUsCisgICAgVmFs
dWVGb3JtYXREb3VibGUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6RlRMOjpW
YWx1ZUZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKKyNlbmRpZiAvLyBGVExWYWx1ZUZvcm1hdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVTb3VyY2UuaCIK
KworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU291cmNlTm90U2V0OgorICAgICAgICBvdXQu
cHJpbnQoIlNvdXJjZU5vdFNldCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUlu
SlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluSlNTdGFjayIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJJbnQz
MkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6
CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiVmFsdWVJbkxvY2Fs
cyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluTG9jYWxzOgorICAgICAgICBv
dXQucHJpbnQoIkludDMySW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQm9v
bGVhbkluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2FscyIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJbkxvY2FsczoKKyAgICAgICAgb3V0LnByaW50
KCJEb3VibGVJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVudHNT
b3VyY2U6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNvdXJjZUlzRGVhZDoKKyAgICAgICAgb3V0LnByaW50KCJTb3VyY2VJ
c0RlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSGF2ZU5vZGU6CisgICAgICAgIG91
dC5wcmludCgiTm9kZSgiLCBub2RlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEZUTFZhbHVlU291cmNlX2gKKyNkZWZpbmUgRlRMVmFsdWVTb3VyY2Vf
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitlbnVtIFZhbHVlU291cmNlS2luZCB7
CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVlSW5KU1N0YWNrLAorICAgIEludDMySW5KU1N0
YWNrLAorICAgIERvdWJsZUluSlNTdGFjaywKKyAgICBWYWx1ZUluTG9jYWxzLAorICAgIEludDMy
SW5Mb2NhbHMsCisgICAgQm9vbGVhbkluTG9jYWxzLAorICAgIERvdWJsZUluTG9jYWxzLAorICAg
IEFyZ3VtZW50c1NvdXJjZSwKKyAgICBTb3VyY2VJc0RlYWQsCisgICAgSGF2ZU5vZGUKK307CisK
K2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgpCisgICAgICAg
IDogbV92YWx1ZShTb3VyY2VOb3RTZXQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNp
dCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKKyAgICAgICAgOiBtX3ZhbHVlKGtp
bmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJjZShERkc6Ok5v
ZGUqIG5vZGUpCisgICAgICAgIDogbV92YWx1ZShiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pihub2Rl
KSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhbHVlU291cmNlS2luZCgpIGtpbmQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUgPCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KEhh
dmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtpbmQ+
KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgfQorICAgIAorICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFNvdXJjZU5vdFNldDsgfQor
ICAgIAorICAgIERGRzo6Tm9kZSogbm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxERkc6Ok5v
ZGUqPihtX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgdWludHB0cl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlm
IC8vIEZUTFZhbHVlU291cmNlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197502</attachid>
            <date>2013-04-10 21:10:41 -0700</date>
            <delta_ts>2013-04-11 18:18:49 -0700</delta_ts>
            <desc>it might be done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>155357</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMy0wNC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgor
CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAg
KEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
Ojp3aXRoT2Zmc2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAg
ICAoSlNDOjpMaW5rQnVmZmVyOjpvZmZzZXRPZik6CisgICAgICAgIChMaW5rQnVmZmVyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAg
ICAgICAgKEdQUkluZm8pOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpiZWxvbmdzSW5NaW5pZmllZEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZVR5cGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkZvcndhcmRSZXdp
cmluZyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpP
U1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgor
ICAgICAgICAoT1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXRCYXNlOjpkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdEJhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9TUkV4aXRCYXNlOjpPU1JFeGl0QmFzZSk6CisgICAgICAgIChPU1JFeGl0QmFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpo
YW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJh
bWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RG
R1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvclNwZWN1
bGF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QpOgorICAgICAg
ICAqIGZ0bC9GVExBYmJyZXZpYXRpb25zLmg6CisgICAgICAgIChGVEwpOgorICAgICAgICAoSlND
OjpGVEw6OmZ1bmN0aW9uVHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6dHlwZU9mKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpidWlsZENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OnNldFRhaWxDYWxs
KToKKyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bG9hZE5leHRBbmRC
b3gpOgorICAgICAgICAqIGZ0bC9GVExDQXJndW1lbnRHZXR0ZXIuaDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OmlzQXJndW1lbnRSZWdpc3Rlcik6CisgICAgICAg
IChDQXJndW1lbnRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6
Q0FyZ3VtZW50R2V0dGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6Omxv
YWROZXh0OCk6CisgICAgICAgIChKU0M6OkZUTDo6Q0FyZ3VtZW50R2V0dGVyOjpsb2FkTmV4dDMy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0NjQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bG9hZE5leHRQdHIpOgorICAgICAgICAo
SlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bG9hZE5leHREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bmV4dEFkZHJlc3MpOgorICAgICAgICAqIGZ0bC9GVExF
eGl0QXJndW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdEFyZ3VtZW50OjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFyZ3VtZW50Lmg6
IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEV4aXRBcmd1bWVudFJlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdEFy
Z3VtZW50OjpFeGl0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdEFyZ3VtZW50Ojphcmd1bWVudCk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdEFyZ3VtZW50Ojp3aXRoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
QXJndW1lbnQ6OnJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGl0QXJndW1lbnRGb3JPcGVyYW5kOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0
QXJndW1lbnRGb3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnRGb3JP
cGVyYW5kOjpFeGl0QXJndW1lbnRGb3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
QXJndW1lbnRGb3JPcGVyYW5kOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRB
cmd1bWVudEZvck9wZXJhbmQ6OmV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZDo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkZUTDo6bGVzc2Vy
QXJndW1lbnRJbmRleCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRBcmd1bWVudExpc3QuaDogQWRk
ZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRodW5r
R2VuZXJhdG9yOjpFeGl0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRU
aHVua0dlbmVyYXRvcjo6fkV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmspOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1
bmtHZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdFRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChF
eGl0VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdFZhbHVlOjpkZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNT
dGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpF
eGl0VmFsdWU6OmV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpr
aW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdFZhbHVlOjppc0luSlNTdGFja1NvbWVob3cpOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRWYWx1ZTo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
Ojppc0FyZ3VtZW50KToKKyAgICAgICAgKiBmdGwvRlRMRm9ybWF0dGVkVmFsdWUuaDoKKyAgICAg
ICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6bm9WYWx1ZSk6CisgICAgICAgIChKU0M6OkZU
TDo6aW50MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6dUludDMyVmFsdWUpOgorICAgICAg
ICAoSlNDOjpGVEw6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6anNWYWx1ZVZh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpkb3VibGVWYWx1ZSk6CisgICAgICAgICogZnRsL0ZU
TEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVFeGl0
VGh1bmtzKToKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6ZXhp
dFRodW5rcyk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAgKEpJVENvZGUp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChGVEwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6dHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVNldExvY2FsKToKKyAgICAgICAgKExvd2VyREZHVG9MTFZNKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2spOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTmVnYXRlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVJbnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6YmFja3dhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpmb3J3YXJkVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6dHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBw
ZW5kVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93SW50
MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dDZWxsKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Qm9vbGVhbik6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmlzTGl2ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OnVzZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmluaXRpYWxp
emVPU1JFeGl0U3RhdGVGb3JCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjph
ZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6dHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9jayk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Om9ic2VydmVNb3ZIaW50KToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0
Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojpj
b252ZXJ0VG9Gb3J3YXJkKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAg
ICAgICAgKEZUTCk6CisgICAgICAgIChPU1JFeGl0KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6
OkZUTDo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6Cisg
ICAgICAgIChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6
OmNvbXBpbGVTdHViKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlRlRMT1NSRXhpdCk6Cisg
ICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6
CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
aW50VG9QdHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZCk6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0OjpzdG9yZSk6CisgICAgICAgIChPdXRwdXQpOgorICAgICAgICAoSlND
OjpGVEw6Ok91dHB1dDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpjb252ZXJ0
VG9UYWlsQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgIChTdGF0ZSk6
CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBmdGwvRlRMVGh1bmtzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEZU
TCk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
VEYpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBmdGwvRlRMVmFs
dWVGb3JtYXQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAg
ICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExWYWx1
ZVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChWYWx1ZVNvdXJjZSk6
CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6OlZhbHVlU291cmNlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVT
b3VyY2U6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6Om5vZGUp
OgorCiAyMDEzLTA0LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgZm91cnRoVGllcjogREZHIHNob3VsZCBwcm92aWRlIHV0aWxpdGllcyBmb3IgY29tbW9uIE9T
UiBleGl0IHRhc2tzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3Ry
YWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICwg
b2Zmc2V0KG9mZnNldCkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAorICAgICAgICBB
ZGRyZXNzIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRpdGlvbmFsT2Zmc2V0KQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gQWRkcmVzcyhiYXNlLCBvZmZzZXQgKyBhZGRpdGlvbmFsT2Zmc2V0
KTsKKyAgICAgICAgfQogCiAgICAgICAgIFJlZ2lzdGVySUQgYmFzZTsKICAgICAgICAgaW50MzJf
dCBvZmZzZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZm
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTksMTEgQEAgcHVi
bGljOgogICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCkubV9vZmZzZXQ7
CiAgICAgfQogCisgICAgdW5zaWduZWQgb2Zmc2V0T2YoUGF0Y2hhYmxlSnVtcCBqdW1wKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGFwcGx5T2Zmc2V0KGp1bXAubV9qdW1wLm1fbGFiZWwpLm1fb2Zm
c2V0OworICAgIH0KKwogICAgIC8vIFVwb24gY29tcGxldGlvbiBvZiBhbGwgcGF0Y2hpbmcgJ0ZJ
TkFMSVpFX0NPREUoKScgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHRvCiAgICAgLy8gY29tcGxldGUg
Z2VuZXJhdGlvbiBvZiB0aGUgY29kZS4gQWx0ZXJuYXRpdmVseSwgY2FsbAogICAgIC8vIGZpbmFs
aXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpIGRpcmVjdGx5IGlmIHlvdSBoYXZlIHlvdXIgb3du
IHdheSBvZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw4IEBAIHZv
aWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAgICAgICAgIGNvbnRp
bnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24oKTsKKyAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9CisgICAgICAgICAgICBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgaWYgKGlzSW50
MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJvb3QtPnZhbHVlc0F0SGVh
ZC5hcmd1bWVudChpKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgZWxzZSBpZiAoaXNCb29sZWFu
U3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dQUkluZm8uaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2Nyw3ICszNjcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnaXN0ZXJGb3JJbmRleFtudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzXSA9IHsgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSB9OwogICAgICAg
ICByZXR1cm4gcmVnaXN0ZXJGb3JJbmRleFtpbmRleF07CiAgICAgfQotCisgICAgCiAgICAgc3Rh
dGljIHVuc2lnbmVkIHRvSW5kZXgoR1BSUmVnIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChy
ZWcgIT0gSW52YWxpZEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcg
QEAgaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIGNhc2UgUGhh
bnRvbUFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUKCFuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcodHlwZSkgJiYgIW5lZWRzT1NSRm9y
d2FyZFJld2lyaW5nKHR5cGUpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0ODA0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjg3LDYgKzI4NywyNSBAQCBpbmxpbmUgTm9kZUZsYWdzIGRlZmF1bHRGbGFncyhO
b2RlVHlwZSBvCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBuZWVkc09TUkJhY2t3YXJkUmV3aXJp
bmcoTm9kZVR5cGUgb3ApCit7CisgICAgcmV0dXJuIG9wID09IFVJbnQzMlRvTnVtYmVyOworfQor
CitpbmxpbmUgYm9vbCBuZWVkc09TUkZvcndhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKK3sKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgRm9yd2Fy
ZEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2FzZSBVSW50MzJU
b051bWJlcjoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxNSArMzYsMTIgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
T1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkK
LSAgICA6IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQorICAgIDogT1NSRXhpdEJhc2Uo
a2luZCwgaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCisgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNW
YWx1ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1f
cGF0Y2hhYmxlQ29kZU9mZnNldCgwKQotICAgICwgbV9jb2RlT3JpZ2luKGppdC0+bV9jb2RlT3Jp
Z2luRm9yT1NSKQotICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUobV9jb2RlT3JpZ2lu
KQogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAgLCBtX3dhdGNocG9p
bnRJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgLCBtX2tp
bmQoa2luZCkKLSAgICAsIG1fY291bnQoMCkKICAgICAsIG1fc3RyZWFtSW5kZXgoc3RyZWFtSW5k
ZXgpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKIHsKQEAg
LTczLDU3ICs3MCwxNCBAQCB2b2lkIE9TUkV4aXQ6OmNvcnJlY3RKdW1wKExpbmtCdWZmZXImIGxp
CiAgICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihsYWJlbCk7
CiB9CiAKLWJvb2wgT1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93
KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQot
ewotICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5v
c3JFeGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRF
eGl0U2l0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRnJlcXVlbnRFeGl0
U2l0ZSBleGl0U2l0ZTsKLSAgICAKLSAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQp
IHsKLSAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVy
IHdoZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKLSAgICAgICAg
Ly8gdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0
aWN1bGFyIGluc3RydWN0aW9uLgotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUo
bV9raW5kKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRl
KG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCk7Ci0gICAg
Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxv
Y2sobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJl
cXVlbnRFeGl0U2l0ZShleGl0U2l0ZSk7Ci19Ci0KIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9y
d2FyZChCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKLSAgICAvLyBDaGVj
ayB0aGF0IGVpdGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVj
ZWRpbmcgbm9kZSB3YXMgYQotICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29kZSBvcmln
aW4sIG9yIHRoYXQgd2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5LgotICAgIGlmICghQVNT
RVJUX0RJU0FCTEVECi0gICAgICAgICYmICF2YWx1ZVJlY292ZXJ5Ci0gICAgICAgICYmICFjdXJy
ZW50Tm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBi
bG9jay0+YXQobm9kZUluZGV4IC0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWws
IHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0
TG9jYWwsIHNldExvY2FsLT5jb2RlT3JpZ2luID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIG5leHQgYnl0
ZWNvZGUgaW5zdHJ1Y3Rpb24uIEFsc28gdHJhY2sgdGhlIGxhc3QgbW92IGhpbnQKLSAgICAvLyBv
biB0aGlzIG5vZGUuCi0gICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrID0gbm9kZUluZGV4ICsgMTsK
LSAgICBOb2RlKiBub2RlID0gMDsKLSAgICBOb2RlKiBsYXN0TW92SGludCA9IDA7Ci0gICAgZm9y
ICg7OykgewotICAgICAgICBpZiAoaW5kZXhJbkJsb2NrID09IGJsb2NrLT5zaXplKCkpIHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5saW5lIHJldHVybi4gR2l2ZSB1cCBhbmQgZG8gYSBi
YWNrd2FyZHMgc3BlY3VsYXRpb24uIFRoaXMgaXMgc2FmZQotICAgICAgICAgICAgLy8gYmVjYXVz
ZSBhbiBpbmxpbmUgcmV0dXJuIGhhcyBpdHMgb3duIGJ5dGVjb2RlIGluZGV4IGFuZCBpdCdzIGFs
d2F5cyBzYWZlIHRvCi0gICAgICAgICAgICAvLyByZWV4ZWN1dGUgdGhhdCBieXRlY29kZS4KLSAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAg
ICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zTW92SGludCgpICYmIG5vZGUtPmNoaWxkMSgpID09IGN1
cnJlbnROb2RlKQotICAgICAgICAgICAgbGFzdE1vdkhpbnQgPSBub2RlOwotICAgICAgICBpZiAo
bm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBpbmRleEluQmxvY2srKzsKLSAgICB9Ci0gICAgCisgICAgTm9kZSog
bm9kZTsKKyAgICBOb2RlKiBsYXN0TW92SGludDsKKyAgICBkb1NlYXJjaEZvckZvcndhcmRDb252
ZXJzaW9uKGJsb2NrLCBjdXJyZW50Tm9kZSwgbm9kZUluZGV4LCAhIXZhbHVlUmVjb3ZlcnkpOwor
CiAgICAgQVNTRVJUKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
OworICAgIAogICAgIG1fY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CiAgICAgCiAgICAg
aWYgKCF2YWx1ZVJlY292ZXJ5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0LmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTEsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiREZHQ29t
bW9uLmgiCiAjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUuaCIKICNpbmNsdWRlICJERkdHUFJJbmZv
LmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdEJhc2UuaCIKICNpbmNsdWRlICJERkdWYWx1ZVJlY292
ZXJ5T3ZlcnJpZGUuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1ZGUgIk1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKQEAgLTg0LDcgKzg1LDcgQEAgcHJpdmF0ZToK
IC8vCiAvLyBUaGlzIHN0cnVjdHVyZSBkZXNjcmliZXMgaG93IHRvIGV4aXQgdGhlIHNwZWN1bGF0
aXZlIHBhdGggYnkKIC8vIGdvaW5nIGludG8gYmFzZWxpbmUgY29kZS4KLXN0cnVjdCBPU1JFeGl0
IHsKK3N0cnVjdCBPU1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKICAgICBPU1JFeGl0KEV4
aXRLaW5kLCBKU1ZhbHVlU291cmNlLCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLCBTcGVj
dWxhdGl2ZUpJVCosIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVyeUluZGV4
ID0gVUlOVF9NQVgpOwogICAgIAogICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX2NvZGU7CkBA
IC05MywyMiArOTQsMTAgQEAgc3RydWN0IE9TUkV4aXQgewogICAgIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUgbV92YWx1ZVByb2ZpbGU7CiAKICAgICB1bnNpZ25lZCBtX3BhdGNoYWJsZUNv
ZGVPZmZzZXQ7Ci0gICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW47Ci0gICAgQ29kZU9yaWdpbiBt
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKICAgICAKICAgICB1bnNpZ25lZCBtX3JlY292ZXJ5
SW5kZXg7CiAgICAgdW5zaWduZWQgbV93YXRjaHBvaW50SW5kZXg7CiAgICAgCi0gICAgRXhpdEtp
bmQgbV9raW5kOwotICAgIHVpbnQzMl90IG1fY291bnQ7Ci0gICAgCi0gICAgYm9vbCBjb25zaWRl
ckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJs
b2NrKiBwcm9maWxlZENvZGVCbG9jaykKLSAgICB7Ci0gICAgICAgIGlmICghbV9jb3VudCB8fCAh
ZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0Nv
ZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOwotICAgIH0KLQogICAgIHZvaWQgc2V0UGF0Y2hh
YmxlQ29kZU9mZnNldChNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCk7CiAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZ2V0UGF0Y2hhYmxlQ29kZU9mZnNldEFzSnVtcCgpIGNvbnN0OwogICAg
IENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqKSBjb25z
dDsKQEAgLTEyMCw5ICsxMDksNiBAQCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgaW50IG1fbGFzdFNl
dE9wZXJhbmQ7CiAgICAgCiAgICAgUmVmUHRyPFZhbHVlUmVjb3ZlcnlPdmVycmlkZT4gbV92YWx1
ZVJlY292ZXJ5T3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgYm9vbCBjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2spOwogfTsKIAogc3RydWN0IFNwZWN1bGF0aW9uRmFpbHVyZURlYnVn
SW5mbyB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dEJhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitib29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFk
ZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVC
bG9jayogcHJvZmlsZWRDb2RlQmxvY2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4o
bV9jb3VudCkgLyBkZmdDb2RlQmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3Ny
RXhpdFByb21pbmVuY2VGb3JGcmVxdWVudEV4aXRTaXRlKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAKKyAgICBGcmVxdWVudEV4aXRTaXRlIGV4aXRTaXRlOworICAgIAorICAgIGlmICht
X2tpbmQgPT0gQXJndW1lbnRzRXNjYXBlZCkgeworICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBn
bG9iYWxseS4gSXQgZG9lc24ndCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFy
Z3VtZW50cyBleGNhcGVkOworICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5v
dCBhc3NvY2lhdGVkIHdpdGggYW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCisgICAgICAgIGV4
aXRTaXRlID0gRnJlcXVlbnRFeGl0U2l0ZShtX2tpbmQpOworICAgIH0gZWxzZQorICAgICAgICBl
eGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0
ZWNvZGVJbmRleCwgbV9raW5kKTsKKyAgICAKKyAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tG
b3JPcmlnaW5BbmRCYXNlbGluZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwg
cHJvZmlsZWRDb2RlQmxvY2spLT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKK30KKwor
Ym9vbCBPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKKyAgICBCYXNp
Y0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9v
bCBoYXNWYWx1ZVJlY292ZXJ5LAorICAgIE5vZGUqJiBub2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQp
Cit7CisgICAgLy8gQ2hlY2sgdGhhdCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFNldExv
Y2FsLCBvciB0aGUgcHJlY2VkaW5nIG5vZGUgd2FzIGEKKyAgICAvLyBTZXRMb2NhbCB3aXRoIHRo
ZSBzYW1lIGNvZGUgb3JpZ2luLCBvciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFsdWVSZWNvdmVy
eS4KKyAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRAorICAgICAgICAmJiAhaGFzVmFsdWVSZWNvdmVy
eQorICAgICAgICAmJiAhY3VycmVudE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7CisgICAgICAg
IE5vZGUqIHNldExvY2FsID0gYmxvY2stPmF0KG5vZGVJbmRleCAtIDEpOworICAgICAgICBBU1NF
UlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAg
ICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBjdXJyZW50
Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5v
ZGUgZm9yIHRoZSBuZXh0IGJ5dGVjb2RlIGluc3RydWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0
IG1vdiBoaW50CisgICAgLy8gb24gdGhpcyBub2RlLgorICAgIHVuc2lnbmVkIGluZGV4SW5CbG9j
ayA9IG5vZGVJbmRleCArIDE7CisgICAgbm9kZSA9IDA7CisgICAgbGFzdE1vdkhpbnQgPSAwOwor
ICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGluZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgp
KSB7CisgICAgICAgICAgICAvLyBUaGlzIGlzIGFuIGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5k
IGRvIGEgYmFja3dhcmRzIHNwZWN1bGF0aW9uLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgICAgIC8v
IGJlY2F1c2UgYW4gaW5saW5lIHJldHVybiBoYXMgaXRzIG93biBieXRlY29kZSBpbmRleCBhbmQg
aXQncyBhbHdheXMgc2FmZSB0bworICAgICAgICAgICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNv
ZGUuCisgICAgICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4
SW5CbG9jayk7CisgICAgICAgIGlmIChub2RlLT5jb250YWluc01vdkhpbnQoKSAmJiBub2RlLT5j
aGlsZDEoKSA9PSBjdXJyZW50Tm9kZSkKKyAgICAgICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsK
KyAgICAgICAgaWYgKG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4p
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaW5kZXhJbkJsb2NrKys7CisgICAgfQorICAg
IAorICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2lu
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT1NSRXhpdEJhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRCYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERG
R09TUkV4aXRCYXNlX2gKKyNkZWZpbmUgREZHT1NSRXhpdEJhc2VfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmln
aW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CisKKy8vIFByb3ZpZGVzIGZvciB0aGUgT1NSIGV4aXQgcHJvZmlsaW5nIGZ1
bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gYmV0d2VlbiB0aGUgREZHCisvLyBhbmQgdGhlIEZU
TC4KKworc3RydWN0IE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0QmFzZShFeGl0S2luZCBraW5k
LCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBt
X2NvdW50KDApCisgICAgICAgICwgbV9jb2RlT3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2Nv
ZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAKKyAgICBF
eGl0S2luZCBtX2tpbmQ7CisgICAgdWludDMyX3QgbV9jb3VudDsKKyAgICAKKyAgICBDb2RlT3Jp
Z2luIG1fY29kZU9yaWdpbjsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQcm9m
aWxlOworCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZShDb2RlQmxv
Y2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jaykKKyAgICB7Cisg
ICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJsZShtX2tpbmQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gY29uc2lkZXJBZGRpbmdBc0Zy
ZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRDb2RlQmxvY2spOworICAg
IH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvcndhcmQgY29udmVyc2lvbiBp
cyByZWFsbHkgbmVlZGVkLgorICAgIGJvb2wgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigK
KyAgICAgICAgQmFzaWNCbG9jayosIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5k
ZXgsIGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKKyAgICAgICAgTm9kZSomIG5leHRCQ05vZGUsIE5v
ZGUqJiBsYXN0TW92SGludCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBjb25zaWRlckFkZGluZ0Fz
RnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayog
cHJvZmlsZWRDb2RlQmxvY2spOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisj
ZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdPU1JFeGl0QmFzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
ci5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgogI2luY2x1ZGUgIkRG
R0pJVENvZGUuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0UHJlcGFyYXRpb24uaCIKICNpbmNsdWRl
ICJMaW5rQnVmZmVyLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIlJlcGF0
Y2hCdWZmZXIuaCIKQEAgLTU0LDIwICs1NSw3IEBAIHZvaWQgY29tcGlsZU9TUkV4aXQoRXhlY1N0
YXRlKiBleGVjKQogICAgIHVpbnQzMl90IGV4aXRJbmRleCA9IGdsb2JhbERhdGEtPm9zckV4aXRJ
bmRleDsKICAgICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmRmZygp
LT5vc3JFeGl0W2V4aXRJbmRleF07CiAgICAgCi0gICAgLy8gTWFrZSBzdXJlIGFsbCBjb2RlIG9u
IG91ciBpbmxpbmUgc3RhY2sgaXMgSklUIGNvbXBpbGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5j
ZQotICAgIC8vIHdlIG1heSBvcHQgdG8gaW5saW5lIGEgY29kZSBibG9jayBldmVuIGJlZm9yZSBp
dCBoYWQgZXZlciBiZWVuIGNvbXBpbGVkIGJ5IHRoZQotICAgIC8vIEpJVCwgYnV0IG91ciBPU1Ig
ZXhpdCBpbmZyYXN0cnVjdHVyZSBjdXJyZW50bHkgb25seSB3b3JrcyBpZiB0aGUgdGFyZ2V0IG9m
IHRoZQotICAgIC8vIE9TUiBleGl0IGlzIEpJVCBjb2RlLiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQg
c2luY2UgdGhlcmUgaXMgbm90aGluZyBwYXJ0aWN1bGFybHkKLSAgICAvLyBoYXJkIGFib3V0IGRv
aW5nIGFuIE9TUiBleGl0IGludG8gdGhlIGludGVycHJldGVyLCBidXQgZm9yIG5vdyB0aGlzIHNl
ZW1zIHRvIG1ha2UKLSAgICAvLyBzZW5zZSBpbiB0aGF0IGlmIHdlJ3JlIE9TUiBleGl0aW5nIGZy
b20gaW5saW5lZCBjb2RlIG9mIGEgREZHIGNvZGUgYmxvY2ssIHRoZW4KLSAgICAvLyBwcm9iYWJs
eSBpdCdzIGEgZ29vZCBzaWduIHRoYXQgdGhlIHRoaW5nIHdlJ3JlIGV4aXRpbmcgaW50byBpcyBo
b3QuIEV2ZW4gbW9yZQotICAgIC8vIGludGVyZXN0aW5nbHksIHNpbmNlIHRoZSBjb2RlIHdhcyBp
bmxpbmVkLCBpdCBtYXkgbmV2ZXIgb3RoZXJ3aXNlIGdldCBKSVQKLSAgICAvLyBjb21waWxlZCBz
aW5jZSB0aGUgYWN0IG9mIGlubGluaW5nIGl0IG1heSBlbnN1cmUgdGhhdCBpdCBvdGhlcndpc2Ug
bmV2ZXIgcnVucy4KLSAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2Rl
T3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0
KCkpCi0gICAgICAgICAgICAtPmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVGb3JDb25zdHJ1Y3QpCi0gICAg
ICAgICAgICAtPmppdENvbXBpbGUoZXhlYyk7Ci0gICAgfQorICAgIHByZXBhcmVDb2RlT3JpZ2lu
Rm9yT1NSRXhpdChleGl0Lm1fY29kZU9yaWdpbik7CiAgICAgCiAgICAgLy8gQ29tcHV0ZSB0aGUg
dmFsdWUgcmVjb3Zlcmllcy4KICAgICBPcGVyYW5kczxWYWx1ZVJlY292ZXJ5PiBvcGVyYW5kczsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQg
aGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdCYgZXhpdCkK
K3ZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJh
c2UmIGV4aXQpCiB7CiAgICAgaml0LmFkZDMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMy
KDEpLCBBc3NlbWJseUhlbHBlcnM6OkFic29sdXRlQWRkcmVzcygmZXhpdC5tX2NvdW50KSk7CiAg
ICAgCkBAIC03Myw3ICs3Myw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMm
IGppdCwKICAgICBkb25lQWRqdXN0aW5nLmxpbmsoJmppdCk7CiB9CiAKLXZvaWQgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdCYgZXhpdCkKK3Zv
aWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhp
dEJhc2UmIGV4aXQpCiB7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICBBU1NFUlQoaml0LmJhc2Vs
aW5lQ29kZUJsb2NrKCktPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CkBA
IC0xNDcsNyArMTQ3LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28g
ZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0CiB9CiAKLXZvaWQgYWRqdXN0QW5kSnVt
cFRvVGFyZ2V0KENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0JiBleGl0KQordm9pZCBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNl
JiBleGl0KQogewogICAgIGlmIChleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCiAg
ICAgICAgIGppdC5hZGRQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoZXhpdC5tX2Nv
ZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNW
YWx1ZSkpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgJKHJldmlz
aW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDkgKzM1LDkgQEAKIAogbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBERkcgewogCi12b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxw
ZXJzJiwgY29uc3QgT1NSRXhpdCYpOwotdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycyYsIGNvbnN0IE9TUkV4aXQmKTsKLXZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KEND
YWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXQmKTsKK3ZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwordm9pZCByZWlmeUlubGluZWRDYWxsRnJh
bWVzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7Cit2b2lkIGFkanVzdEFuZEp1
bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYpOwogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBh
cmF0aW9uLmgiCisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgeworCit2b2lkIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4pCit7CisgICAgZm9yICg7IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBj
b2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgICAg
ICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSkKKyAgICAgICAgICAgIC0+YmFzZWxpbmVDb2RlQmxvY2tG
b3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29k
ZUZvckNvbnN0cnVjdCkKKyAgICAgICAgICAgIC0+aml0Q29tcGlsZShleGVjKTsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFBy
ZXBhcmF0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRQcmVwYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdP
U1JFeGl0UHJlcGFyYXRpb25faAorI2RlZmluZSBERkdPU1JFeGl0UHJlcGFyYXRpb25faAorCisj
aWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworLy8gTWFrZSBzdXJlIGFsbCBjb2RlIG9uIG91ciBp
bmxpbmUgc3RhY2sgaXMgSklUIGNvbXBpbGVkLiBUaGlzIGlzIG5lY2Vzc2FyeSBzaW5jZQorLy8g
d2UgbWF5IG9wdCB0byBpbmxpbmUgYSBjb2RlIGJsb2NrIGV2ZW4gYmVmb3JlIGl0IGhhZCBldmVy
IGJlZW4gY29tcGlsZWQgYnkgdGhlCisvLyBKSVQsIGJ1dCBvdXIgT1NSIGV4aXQgaW5mcmFzdHJ1
Y3R1cmUgY3VycmVudGx5IG9ubHkgd29ya3MgaWYgdGhlIHRhcmdldCBvZiB0aGUKKy8vIE9TUiBl
eGl0IGlzIEpJVCBjb2RlLiBUaGlzIGNvdWxkIGJlIGNoYW5nZWQgc2luY2UgdGhlcmUgaXMgbm90
aGluZyBwYXJ0aWN1bGFybHkKKy8vIGhhcmQgYWJvdXQgZG9pbmcgYW4gT1NSIGV4aXQgaW50byB0
aGUgaW50ZXJwcmV0ZXIsIGJ1dCBmb3Igbm93IHRoaXMgc2VlbXMgdG8gbWFrZQorLy8gc2Vuc2Ug
aW4gdGhhdCBpZiB3ZSdyZSBPU1IgZXhpdGluZyBmcm9tIGlubGluZWQgY29kZSBvZiBhIERGRyBj
b2RlIGJsb2NrLCB0aGVuCisvLyBwcm9iYWJseSBpdCdzIGEgZ29vZCBzaWduIHRoYXQgdGhlIHRo
aW5nIHdlJ3JlIGV4aXRpbmcgaW50byBpcyBob3QuIEV2ZW4gbW9yZQorLy8gaW50ZXJlc3Rpbmds
eSwgc2luY2UgdGhlIGNvZGUgd2FzIGlubGluZWQsIGl0IG1heSBuZXZlciBvdGhlcndpc2UgZ2V0
IEpJVAorLy8gY29tcGlsZWQgc2luY2UgdGhlIGFjdCBvZiBpbmxpbmluZyBpdCBtYXkgZW5zdXJl
IHRoYXQgaXQgb3RoZXJ3aXNlIG5ldmVyIHJ1bnMuCit2b2lkIHByZXBhcmVDb2RlT3JpZ2luRm9y
T1NSRXhpdChDb2RlT3JpZ2luIGNvZGVPcmlnaW4pOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8vIERGR09TUkV4aXRQ
cmVwYXJhdGlvbl9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzc3
LDcgKzE3NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMoCiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2
aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCk7Ci0gICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPnByZWRpY3Rp
b24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlQWNj
ZXNzRGF0YS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKIAogICAgICAgICBKU1ZhbHVlU291
cmNlIHZhbHVlU291cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2
aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMSw3ICsx
MzEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKEludDMySW5KU1N0YWNr
KTsKLSAgICAgICAgaWYgKGlzQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSB8fCBpc0NlbGxT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNlKENlbGxJbkpTU3RhY2sp
OwogICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAg
ICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjayk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJ
KHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFi
bGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lk
IFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAgICAgICAgCiAgICAgICAg
ICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChu
b2RlICYmIG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpIHsKKyAgICAgICAgICAgIGlmIChu
b2RlICYmIG5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgpKSkgewogICAgICAgICAg
ICAgICAgIE1pbmlmaWVkSUQgaWQgPSBub2RlLT5jaGlsZDEoKTsKICAgICAgICAgICAgICAgICBp
ZiAodHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmllc1tpXSwgY29kZUJsb2Nr
LCBncmFwaC5hdChpZCkpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTI1Nyw2
ICsyNTcsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAg
ICAgICAgICAgICAgICAgICAgZG91YmxlQXNJbnQzMklEID0gaWQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVCghbmVlZHNPU1JGb3J3YXJkUmV3aXJpbmcobm9kZS0+b3AoKSkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFi
YnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDYgKzg0LDEx
IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHIKIHsKICAgICByZXR1
cm4gTExWTUZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCBwYXJhbUNvdW50LCB2
YXJpYWRpY2l0eSA9PSBWYXJpYWRpYyk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBl
PgoraW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBWZWN0
b3JUeXBlJiB2ZWN0b3IsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5KQoreworICAgIHJldHVybiBm
dW5jdGlvblR5cGUocmV0dXJuVHlwZSwgdmVjdG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCksIHZh
cmlhZGljaXR5KTsKK30KIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJl
dHVyblR5cGUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCiB7CiAgICAg
cmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCAwLCAwLCB2YXJpYWRpY2l0eSk7CkBAIC05
OCw2ICsxMDMsOCBAQCBzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByCiAg
ICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCAyLCB2YXJpYWRp
Y2l0eSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgTFR5cGUgdHlwZU9mKExWYWx1ZSB2YWx1ZSkgeyBy
ZXR1cm4gTExWTVR5cGVPZih2YWx1ZSk7IH0KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZEtp
bmRJRChjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIExMVk1HZXRNREtpbmRJRChzdHJpbmcs
IHN0cmxlbihzdHJpbmcpKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoY29uc3Qg
Y2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIExMVk1NRFN0cmluZyhzdHJp
bmcsIGxlbmd0aCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0IGNoYXIq
IHN0cmluZykgeyByZXR1cm4gbWRTdHJpbmcoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7IH0KQEAg
LTE1NSw2ICsxNjIsMTEgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVy
IAogewogICAgIHJldHVybiBMTFZNQnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCBu
dW1BcmdzLCAiIik7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWZWN0b3JUeXBlPgoraW5saW5lIExW
YWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBjb25zdCBW
ZWN0b3JUeXBlJiB2ZWN0b3IpCit7CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5j
dGlvbiwgdmVjdG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCkpOworfQogc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikKIHsKICAg
ICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAwLCAwKTsKQEAgLTE2OCw2ICsx
ODAsOCBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiAgICAgTFZh
bHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiB9OwogICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIGFyZ3MsIDIpOwogfQorZW51bSBUYWlsQ2FsbE1vZGUgeyBJc05vdFRhaWxD
YWxsLCBJc1RhaWxDYWxsIH07CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0VGFpbENhbGwoTFZhbHVl
IGNhbGwsIFRhaWxDYWxsTW9kZSBtb2RlKSB7IExMVk1TZXRUYWlsQ2FsbChjYWxsLCBtb2RlID09
IElzVGFpbENhbGwpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEV4dHJhY3RWYWx1ZShM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
TExWTUJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNv
bmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIExMVk1CdWls
ZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CiBzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRl
c3RpbmF0aW9uKSB7IHJldHVybiBMTFZNQnVpbGRCcihidWlsZGVyLCBkZXN0aW5hdGlvbik7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1
bWVudEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRlRMQ0FyZ3VtZW50R2V0dGVyLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZH
OworCit2b2lkIENBcmd1bWVudEdldHRlcjo6bG9hZE5leHRBbmRCb3goVmFsdWVGb3JtYXQgZm9y
bWF0LCBHUFJSZWcgZGVzdGluYXRpb24sIEdQUlJlZyBzY3JhdGNoKQoreworICAgIGlmIChzY3Jh
dGNoID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uID09IEdQUklu
Zm86Om5vbkFyZ0dQUjApCisgICAgICAgICAgICBzY3JhdGNoID0gR1BSSW5mbzo6bm9uQXJnR1BS
MTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaCA9IEdQUkluZm86Om5vbkFyZ0dQ
UjA7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBWYWx1ZUZv
cm1hdEludDMyOiB7CisgICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOworICAgICAgICBt
X2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdGluYXRpb24pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0
VUludDMyOiB7CisgICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBpc0ludCA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoKTsKKyAgICAg
ICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoZGVzdGluYXRpb24sIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgZGVzdGluYXRp
b24pOworICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKKyAgICAgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAgICAgIGlzSW50LmxpbmsoJm1faml0KTsK
KyAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3Rp
bmF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1hdEJvb2xl
YW46IHsKKyAgICAgICAgbG9hZE5leHQ4KGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbV9qaXQub3Iz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBkZXN0aW5hdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVGb3Jt
YXRKU1ZhbHVlOiB7CisgICAgICAgIGxvYWROZXh0NjQoZGVzdGluYXRpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0RG91YmxlOiB7
CisgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gp
OworICAgICAgICBsb2FkTmV4dERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgbV9q
aXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbV9q
aXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExDQXJndW1lbnRHZXR0ZXJfaAor
I2RlZmluZSBGVExDQXJndW1lbnRHZXR0ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5o
IgorI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworLy8gVGhpcyBjdXJyZW50bHkgb25seSB1bmRlcnN0YW5kcyBob3cgdG8gZ2V0
IGFyZ3VtZW50cyBvbiBYODYtNjQgY2RlY2wuIFRoaXMgaXMgYWxzbworLy8gbm90IHBhcnRpY3Vs
YXJseSBlZmZpY2llbnQuIEl0IHdpbGwgZ2VuZXJhdGUgc29tZSByZWR1bmRhbnQgbW92ZXMuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFJlZ2lzdGVyS2luZD4KK2Jvb2wgaXNBcmd1bWVudFJlZ2lzdGVy
KFJlZ2lzdGVyS2luZDo6UmVnaXN0ZXJUeXBlIHJlZykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgUmVnaXN0ZXJLaW5kOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsK
KyAgICAgICAgaWYgKFJlZ2lzdGVyS2luZDo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpID09IHJlZykK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2NsYXNzIENBcmd1bWVudEdldHRlciB7CisgICAgdXNpbmcgbmFtZXNwYWNlIERGRzsKKyAgICAK
K3B1YmxpYzoKKyAgICAvLyBQZWVrIG9mZnNldCBpcyB0aGUgbnVtYmVyIG9mIHRoaW5ncyBvbiB0
aGUgc3RhY2sgYmVsb3cgdGhlIGZpcnN0IGFyZ3VtZW50LgorICAgIC8vIEl0IHdpbGwgYmUgMSBp
ZiB5b3UgaGF2ZW4ndCBwdXNoZWQgb3IgcG9wcGVkIGFmdGVyIHRoZSBjYWxsOyBpLmUuIHRoZSBv
bmx5CisgICAgLy8gdGhpbmcgaXMgdGhlIHJldHVybiBhZGRyZXNzLgorICAgIENBcmd1bWVudEdl
dHRlcihBc3NlbWJseUhlbHBlcnMmIGppdCwgaW50IHBlZWtPZmZzZXQgPSAxKQorICAgICAgICA6
IG1faml0KGppdCkKKyAgICAgICAgLCBtX3BlZWtPZmZzZXQocGVla09mZnNldCkKKyAgICAgICAg
LCBtX2dwckFyZ3VtZW50SW5kZXgoMCkKKyAgICAgICAgLCBtX2ZwckFyZ3VtZW50SW5kZXgoMCkK
KyAgICAgICAgLCBtX3N0YWNrQXJndW1lbnRJbmRleCgwKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkTmV4dDgoR1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFpc0FyZ3VtZW50UmVnaXN0ZXI8R1BSSW5mbz4oZGVzdGluYXRpb24pKTsKKyAgICAgICAg
aWYgKG1fZ3ByQXJndW1lbnRJbmRleCA8IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVy
KG1fZ3ByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkOChuZXh0QWRkcmVzcygp
LCBkZXN0aW5hdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZE5leHQzMihHUFJSZWcg
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIWlzQXJndW1lbnRSZWdpc3RlcjxH
UFJJbmZvPihkZXN0aW5hdGlvbikpOworICAgICAgICBpZiAobV9ncHJBcmd1bWVudEluZGV4IDwg
R1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgeworICAgICAgICAgICAgbV9qaXQu
bW92ZShHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIobV9ncHJBcmd1bWVudEluZGV4KyspLCBk
ZXN0aW5hdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1faml0LmxvYWQzMihuZXh0QWRkcmVzcygpLCBkZXN0aW5hdGlvbik7CisgICAgfQor
ICAgIAorICAgIHZvaWQgbG9hZE5leHQ2NChHUFJSZWcgZGVzdGluYXRpb24pCisgICAgeworICAg
ICAgICBBU1NFUlQoIWlzQXJndW1lbnRSZWdpc3RlcjxHUFJJbmZvPihkZXN0aW5hdGlvbikpOwor
ICAgICAgICBpZiAobV9ncHJBcmd1bWVudEluZGV4IDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVu
dFJlZ2lzdGVycykgeworICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjp0b0FyZ3VtZW50
UmVnaXN0ZXIobV9ncHJBcmd1bWVudEluZGV4KyspLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWQ2NChuZXh0
QWRkcmVzcygpLCBkZXN0aW5hdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZE5leHRQ
dHIoR1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgbG9hZE5leHQ2NChkZXN0aW5h
dGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZE5leHREb3VibGUoRlBSUmVnIGRlc3Rp
bmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKAorICAgICAgICAgICAgIWlzQXJndW1lbnRS
ZWdpc3RlcjxGUFJJbmZvPihkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uID09
IEZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgICAgIAorICAgICAgICBpZiAobV9mcHJBcmd1
bWVudEluZGV4IDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycykgeworICAgICAg
ICAgICAgbV9qaXQubW92ZURvdWJsZShGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIobV9mcHJB
cmd1bWVudEluZGV4KyspLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWREb3VibGUobmV4dEFkZHJlc3MoKSwg
ZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0QW5kQm94KFZhbHVl
Rm9ybWF0IGZvcm1hdCwgR1BSUmVnIGRlc3RpbmF0aW9uLCBHUFJSZWcgc2NyYXRjaCA9IEludmFs
aWRHUFJSZWcpOworCitwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIG5leHRB
ZGRyZXNzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAg
ICAgICAgIChtX3BlZWtPZmZzZXQgKyBtX3N0YWNrQXJndW1lbnRJbmRleCsrKSAqIHNpemVvZih2
b2lkKikpOworICAgIH0KKyAgICAgICAgICAgIAorICAgIEFzc2VtYmx5SGVscGVycyYgbV9qaXQ7
CisgICAgdW5zaWduZWQgbV9wZWVrT2Zmc2V0OworICAgIHVuc2lnbmVkIG1fZ3ByQXJndW1lbnRJ
bmRleDsKKyAgICB1bnNpZ25lZCBtX2ZwckFyZ3VtZW50SW5kZXg7CisgICAgdW5zaWduZWQgbV9z
dGFja0FyZ3VtZW50SW5kZXg7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTENBcmd1bWVudEdldHRlcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRlRMRXhpdEFyZ3VtZW50LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRBcmd1bWVudDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYXJnIiwgYXJndW1lbnQoKSwg
IiBhcyAiLCBmb3JtYXQoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRBcmd1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdEFyZ3VtZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExFeGl0QXJndW1lbnRfaAorI2RlZmluZSBGVExFeGl0QXJndW1lbnRfaAorCisjaW5jbHVkZSA8
d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTFZh
bHVlRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc3RydWN0IEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9u
IHsKKyAgICBWYWx1ZUZvcm1hdCBmb3JtYXQ7CisgICAgdW5zaWduZWQgYXJndW1lbnQ7Cit9Owor
CitjbGFzcyBFeGl0QXJndW1lbnQgeworcHVibGljOgorICAgIEV4aXRBcmd1bWVudCgpCisgICAg
eworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9IEludmFsaWRWYWx1ZUZvcm1hdDsK
KyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50KFZhbHVlRm9ybWF0IGZvcm1hdCwgdW5zaWdu
ZWQgYXJndW1lbnQpCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9IGZv
cm1hdDsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbi5hcmd1bWVudCA9IGFyZ3VtZW50OworICAg
IH0KKyAgICAKKyAgICBleHBsaWNpdCBFeGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50UmVwcmVzZW50
YXRpb24gcmVwcmVzZW50YXRpb24pCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uID0g
cmVwcmVzZW50YXRpb247CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPT0gSW52YWxpZFZhbHVlRm9ybWF0OyB9
CisgICAgCisgICAgVmFsdWVGb3JtYXQgZm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVCgqdGhpcyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdDsKKyAg
ICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uYXJndW1lbnQ7
CisgICAgfQorICAgIAorICAgIEV4aXRBcmd1bWVudCB3aXRoRm9ybWF0KFZhbHVlRm9ybWF0IGZv
cm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBFeGl0QXJndW1lbnQoZm9ybWF0LCBhcmd1bWVu
dCgpKTsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVwcmVz
ZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcHJlc2VudGF0aW9uOyB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEV4aXRB
cmd1bWVudFJlcHJlc2VudGF0aW9uIG1fcmVwcmVzZW50YXRpb247Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8v
IEZUTEV4aXRBcmd1bWVudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0QXJndW1lbnRGb3JPcGVyYW5k
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZXhpdEFy
Z3VtZW50LCAiIGZvciByIiwgb3BlcmFuZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJndW1lbnRGb3JP
cGVyYW5kX2gKKyNkZWZpbmUgRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZF9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRM
RXhpdEFyZ3VtZW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xh
c3MgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCB7CitwdWJsaWM6CisgICAgRXhpdEFyZ3VtZW50Rm9y
T3BlcmFuZCgpCisgICAgICAgIDogbV9vcGVyYW5kKC0xKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZChFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50LCBpbnQg
b3BlcmFuZCkKKyAgICAgICAgOiBtX2V4aXRBcmd1bWVudChleGl0QXJndW1lbnQpCisgICAgICAg
ICwgbV9vcGVyYW5kKG9wZXJhbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFtX2V4aXRBcmd1bWVudDsgfQorICAgIAorICAgIGNvbnN0
IEV4aXRBcmd1bWVudCYgZXhpdEFyZ3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9leGl0QXJndW1l
bnQ7IH0KKyAgICBpbnQgb3BlcmFuZCgpIGNvbnN0IHsgcmV0dXJuIG1fb3BlcmFuZDsgfQorICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBFeGl0QXJndW1lbnQgbV9leGl0QXJndW1lbnQ7CisgICAgaW50IG1fb3BlcmFuZDsKK307CisK
K2lubGluZSBib29sIGxlc3NlckFyZ3VtZW50SW5kZXgoRXhpdEFyZ3VtZW50IGEsIEV4aXRBcmd1
bWVudCBiKQoreworICAgIHJldHVybiBhLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCkgPCBiLmV4
aXRBcmd1bWVudCgpLmFyZ3VtZW50KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFy
Z3VtZW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdEFyZ3VtZW50TGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0QXJndW1lbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTEV4aXRBcmd1bWVudExpc3RfaAorI2RlZmluZSBGVExFeGl0QXJndW1lbnRMaXN0X2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbGR1ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3R5cGVkZWYgVmVjdG9yPExWYWx1ZSwgMTY+
IEV4aXRBcmd1bWVudExpc3Q7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50TGlzdF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpE
Rkc7CisKK0V4aXRUaHVua0dlbmVyYXRvcjo6RXhpdFRodW5rR2VuZXJhdG9yKFN0YXRlJiBzdGF0
ZSkKKyAgICA6IENDYWxsSGVscGVycygmc3RhdGUuZ3JhcGgubV9nbG9iYWxEYXRhLCBzdGF0ZS5n
cmFwaC5tX2NvZGVCbG9jaykKK3sKK30KKworRXhpdFRodW5rR2VuZXJhdG9yOjp+RXhpdFRodW5r
R2VuZXJhdG9yKCkKK3sKK30KKwordm9pZCBFeGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVuayh1
bnNpZ25lZCBpbmRleCwgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbykKK3sKKyAgICBpbmZv
Lm1fdGh1bmtMYWJlbCA9IGxhYmVsKCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoaW5kZXgpLCBH
UFJJbmZvOjpub25BcmdHUlAwKTsKKyAgICBpbmZvLm1fdGh1bmtKdW1wID0gcGF0Y2hhYmxlSnVt
cCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRUaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKyNkZWZpbmUgRlRMRXhpdFRodW5rR2VuZXJhdG9y
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCitjbGFzcyBPU1JFeGl0Q29tcGlsYXRpb25JbmZvOworY2xhc3MgU3RhdGU7CisK
K2NsYXNzIEV4aXRUaHVua0dlbmVyYXRvciA6IHB1YmxpYyBDQ2FsbEhlbHBlcnMgeworcHVibGlj
OgorICAgIEV4aXRUaHVua0dlbmVyYXRvcihTdGF0ZSYgc3RhdGUpOworICAgIH5FeGl0VGh1bmtH
ZW5lcmF0b3IoKTsKKyAgICAKKyAgICB2b2lkIGVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCwgT1NS
RXhpdENvbXBpbGF0aW9uSW5mbyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VGh1bmtHZW5l
cmF0b3JfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkZUTEV4aXRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgSW52YWxpZEV4
aXRWYWx1ZToKKyAgICAgICAgb3V0LnByaW50KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEV4aXRWYWx1ZURlYWQ6CisgICAgICAgIG91dC5wcmludCgiRGVhZCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgb3V0LnBy
aW50KCJBcmd1bWVudCgiLCBleGl0QXJndW1lbnQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRXhpdFZhbHVlQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQo
IiwgY29uc3RhbnQoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVl
SW5KU1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIkluSlNTdGFjayIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFZh
bHVlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnQuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworLy8gVGhpcyBpcyBsaWtlIFZhbHVlUmVjb3ZlcnksIGJ1dCByZXNwZWN0cyB0
aGUgd2F5IHRoYXQgdGhlIEZUTCBkb2VzIE9TUgorLy8gZXhpdDogdGhlIGxpdmUgbm9uLWNvbnN0
YW50IG5vbi1mbHVzaGVkIHZhbHVlcyBhcmUgcGFzc2VkIGFzIGFyZ3VtZW50cworLy8gdG8gYSBu
b3JldHVybiB0YWlsIGNhbGwuIEV4aXRWYWx1ZSBpcyBoZW5jZSBtb3N0bHkgcmVzcG9uc2libGUg
Zm9yCisvLyB0ZWxsaW5nIHVzIHRoZSBtYXBwaW5nIGJldHdlZW4gb3BlcmFuZHMgaW4gYnl0ZWNv
ZGUgYW5kIHRoZSBhcmd1bWVudHMgdG8KKy8vIHRoZSBjYWxsLgorCitlbnVtIEV4aXRWYWx1ZUtp
bmQgeworICAgIEludmFsaWRFeGl0VmFsdWUsCisgICAgRXhpdFZhbHVlRGVhZCwKKyAgICBFeGl0
VmFsdWVBcmd1bWVudCwKKyAgICBFeGl0VmFsdWVDb25zdGFudCwKKyAgICBFeGl0VmFsdWVJbkpT
U3RhY2ssCisgICAgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMiwKKyAgICBFeGl0VmFsdWVJbkpT
U3RhY2tBc0RvdWJsZQorfTsKKworY2xhc3MgRXhpdFZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0
VmFsdWUoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkRXhpdFZhbHVlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52
YWxpZEV4aXRWYWx1ZTsgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUgZGVhZCgpCisgICAg
eworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhp
dFZhbHVlRGVhZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIEV4aXRWYWx1ZSBpbkpTU3RhY2soKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNTdGFjazsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3Rh
Y2tBc0ludDMyKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGluSlNTdGFja0FzRG91
YmxlKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBjb25zdGFudChKU1ZhbHVlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEV4aXRWYWx1ZUNvbnN0YW50OworICAgICAgICByZXN1bHQudS5jb25zdGFudCA9IEpT
VmFsdWU6OmVuY29kZSh2YWx1ZSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAg
IAorICAgIHN0YXRpYyBFeGl0VmFsdWUgZXhpdEFyZ3VtZW50KGNvbnN0IEV4aXRBcmd1bWVudCYg
YXJndW1lbnQpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gRXhpdFZhbHVlQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC51LmFyZ3VtZW50
ID0gYXJndW1lbnQucmVwcmVzZW50YXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisgICAgCisgICAgRXhpdFZhbHVlS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisgICAgCisgICAgYm9vbCBpc0RlYWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhp
dFZhbHVlRGVhZDsgfQorICAgIGJvb2wgaXNJbkpTU3RhY2tTb21laG93KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0
YWNrOgorICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgICAgIGNh
c2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhp
dFZhbHVlQ29uc3RhbnQ7IH0KKyAgICBib29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgPT0gRXhpdFZhbHVlQXJndW1lbnQ7IH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQgZXhp
dEFyZ3VtZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0FyZ3VtZW50KCkpOwor
ICAgICAgICByZXR1cm4gRXhpdEFyZ3VtZW50KHUuYXJndW1lbnQpOworICAgIH0KKyAgICAKKyAg
ICBKU1ZhbHVlIGNvbnN0YW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NvbnN0
YW50KCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKHUuY29uc3RhbnQpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZh
dGU6CisgICAgRXhpdFZhbHVlS2luZCBtX2tpbmQ7CisgICAgdW5pb24geworICAgICAgICBFeGl0
QXJndW1lbnRSZXByZXNlbnRhdGlvbiBhcmd1bWVudDsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUg
Y29uc3RhbnQ7CisgICAgfSB1OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0VmFsdWVfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAkocmV2
aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9K
SVQpCiAKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVG
b3JtYXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MSwxOCAr
NDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAvLyB1c2UgdGhpcyBpbiBz
aXR1YXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIHNheSB3aGF0IG5vZGUgdGhl
IHZhbHVlIGNhbWUKIC8vIGZyb20uCiAKLS8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBz
aW1pbGFyIHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAot
Ly8gdW5saWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vp
c2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCi0KLWVudW0gVmFsdWVGb3JtYXQgewotICAg
IEludmFsaWRWYWx1ZUZvcm1hdCwKLSAgICBWYWx1ZUZvcm1hdEludDMyLAotICAgIFZhbHVlRm9y
bWF0VUludDMyLAotICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKLSAgICBWYWx1ZUZvcm1hdEpTVmFs
dWUsCi0gICAgVmFsdWVGb3JtYXREb3VibGUKLX07Ci0KIGNsYXNzIEZvcm1hdHRlZFZhbHVlIHsK
IHB1YmxpYzoKICAgICBGb3JtYXR0ZWRWYWx1ZSgpCkBAIC04MSw2ICs3MCwxMyBAQCBwcml2YXRl
OgogICAgIExWYWx1ZSBtX3ZhbHVlOwogfTsKIAorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1
ZSBub1ZhbHVlKCkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoKTsgfQorc3RhdGljIGlubGluZSBG
b3JtYXR0ZWRWYWx1ZSBpbnQzMlZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVk
VmFsdWUoVmFsdWVGb3JtYXRJbnQzMiwgdmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRl
ZFZhbHVlIHVJbnQzMlZhbHVlKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUo
VmFsdWVGb3JtYXRVSW50MzIsIHZhbHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1
ZSBib29sZWFuVmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1
ZUZvcm1hdEJvb2xlYW4sIHZhbHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBq
c1ZhbHVlVmFsdWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZv
cm1hdEpTVmFsdWUsIHZhbHVlKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBkb3Vi
bGVWYWx1ZShMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0
RG91YmxlLCB2YWx1ZSk7IH0KKwogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VENvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
Q29kZS5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDExIEBAIEpJVENvZGU6
On5KSVRDb2RlKCkKICAgICAgICAgTExWTURpc3Bvc2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUp
OwogfQogCit2b2lkIEpJVENvZGU6OmluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYgZXhpdFRo
dW5rcykKK3sKKyAgICBtX2V4aXRUaHVua3MgPSBleGl0VGh1bmtzOworfQorCiB2b2lkIEpJVENv
ZGU6OmluaXRpYWxpemVDb2RlKExMVk1FeGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVm
IGVudHJ5cG9pbnQpCiB7CiAgICAgbV9lbmdpbmUgPSBlbmdpbmU7CkBAIC05Nyw2ICsxMDIsMTEg
QEAgYm9vbCBKSVRDb2RlOjpjb250YWlucyh2b2lkKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
K0NvZGVQdHIgSklUQ29kZTo6ZXhpdFRodW5rcygpCit7CisgICAgcmV0dXJuIG1fZXhpdFRodW5r
cy5jb2RlKCk7Cit9CisKIEpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiB7CiAgICAgcmV0dXJuIHRo
aXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24g
MTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ4LDEyICs0OCwxNiBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsK
ICAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsKICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFeGl0
VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVu
Z2luZVJlZiwgQ29kZVJlZiBlbnRyeXBvaW50KTsKICAgICAKKyAgICBDb2RlUHRyIGV4aXRUaHVu
a3MoKTsKKyAgICAKICAgICBKSVRDb2RlKiBmdGwoKTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRm
Z0NvbW1vbigpOwogICAgIAogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CisgICAgU2VnbWVu
dGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgCiBwcml2YXRlOgogICAgIC8vIEZJ
WE1FOiBMTFZNIHNob3VsZCB1c2Ugb3VyIG93biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdl
IHNob3VsZG4ndCBoYXZlIHRvCkBAIC02MSw2ICs2NSw3IEBAIHByaXZhdGU6CiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYxOQogICAgIExMVk1FeGVj
dXRpb25FbmdpbmVSZWYgbV9lbmdpbmU7CiAgICAgQ29kZVJlZiBtX2VudHJ5cG9pbnQ7CisgICAg
Q29kZVJlZiBtX2V4aXRUaHVua3M7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDggKzMwLDEwIEBACiAKICNpbmNs
dWRlICJERkdBYnN0cmFjdFN0YXRlLmgiCiAjaW5jbHVkZSAiRlRMQWJzdHJhY3RIZWFwUmVwb3Np
dG9yeS5oIgorI2luY2x1ZGUgIkZUTEV4aXRUaHVua0dlbmVyYXRvci5oIgogI2luY2x1ZGUgIkZU
TEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCisjaW5jbHVkZSAiRlRM
VGh1bmtzLmgiCiAjaW5jbHVkZSAiT3BlcmF0aW9ucy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CkBAIC00MSw3ICs0Myw3IEBAIHVzaW5nIG5hbWVzcGFjZSBERkc7CiAvLyBV
c2luZyB0aGlzIGluc3RlYWQgb2YgdHlwZUNoZWNrKCkgaGVscHMgdG8gcmVkdWNlIHRoZSBsb2Fk
IG9uIExMVk0sIGJ5IGNyZWF0aW5nCiAvLyBzaWduaWZpY2FudGx5IGxlc3MgZGVhZCBjb2RlLgog
I2RlZmluZSBGVExfVFlQRV9DSEVDSyhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRo
cm91Z2gsIGZhaWxDb25kaXRpb24pIGRvIHsgXAotICAgICAgICBMVmFsdWUgX2Z0Y19sb3dWYWx1
ZSA9IChsb3dWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBG
b3JtYXR0ZWRWYWx1ZSBfZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAgICAg
ICAgICAgXAogICAgICAgICBFZGdlIF9mdGNfaGlnaFZhbHVlID0gKGhpZ2hWYWx1ZSk7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBfZnRjX3R5
cGVzUGFzc2VkVGhyb3VnaCA9ICh0eXBlc1Bhc3NlZFRocm91Z2gpOyAgXAogICAgICAgICBpZiAo
IW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soX2Z0Y19oaWdoVmFsdWUsIF9mdGNfdHlwZXNQYXNzZWRU
aHJvdWdoKSkgXApAQCAtNTcsNiArNTksOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sb2NhbHNC
b29sZWFuKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0
SGVhZCkKICAgICAgICAgLCBtX2xvY2FsczMyKE9wZXJhbmRzTGlrZSwgc3RhdGUuZ3JhcGgubV9i
bG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKICAgICAgICAgLCBtX2xvY2FsczY0KE9wZXJhbmRz
TGlrZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAg
LCBtX3ZhbHVlU291cmNlcyhPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52
YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAg
ICAgICAgICwgbV9zdGF0ZShzdGF0ZS5ncmFwaCkKICAgICB7CiAgICAgfQpAQCAtODAsMTQgKzg0
LDE0IEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxv
Y2EobV9vdXQubV9idWlsZGVyLCBtX291dC5pbnQ2NCk7CiAgICAgICAgIH0KICAgICAgICAgCisg
ICAgICAgIG1faW5pdGlhbGl6YXRpb24gPSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuZnVu
Y3Rpb24pOworICAgICAgICBtX291dC5qdW1wKG1faW5pdGlhbGl6YXRpb24pOworICAgICAgICBt
X291dC5hcHBlbmRUbyhtX2luaXRpYWxpemF0aW9uKTsKKyAgICAgICAgCiAgICAgICAgIG1fY2Fs
bEZyYW1lID0gbV9vdXQucGFyYW0oMCk7CiAgICAgICAgIG1fdGFnVHlwZU51bWJlciA9IG1fb3V0
LmNvbnN0SW50NjQoVGFnVHlwZU51bWJlcik7CiAgICAgICAgIG1fdGFnTWFzayA9IG1fb3V0LmNv
bnN0SW50NjQoVGFnTWFzayk7CiAgICAgICAgIAotICAgICAgICBtX2Fib3J0RnVuY3Rpb24gPSBj
b25zdEludFRvUHRyKAotICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoYWJvcnQpLAotICAg
ICAgICAgICAgcG9pbnRlclR5cGUoZnVuY3Rpb25UeXBlKG1fb3V0LnZvaWRUeXBlKSkpOwotICAg
ICAgICAKICAgICAgICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4
IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkgewogICAgICAgICAgICAg
bV9oaWdoQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW2Jsb2NrSW5kZXhdLmdldCgpOwogICAgICAg
ICAgICAgaWYgKCFtX2hpZ2hCbG9jaykKQEAgLTk4LDE0ICsxMDIsMTcgQEAgcHVibGljOgogICAg
ICAgICAKICAgICAgICAgY2xvc2VPdmVyRmx1c2hlZExvY2FsT3BzKCk7CiAKLSAgICAgICAgbV9v
dXQuYXBwZW5kVG8obV9wcm9sb2d1ZSwgbV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0u
Z2V0KCkpKTsKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbiwgbV9ibG9j
a3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKIAogICAgICAgICB0cmFuc2ZlckFu
ZENoZWNrQXJndW1lbnRzKCk7CiAgICAgICAgIAotICAgICAgICBtX291dC5qdW1wKG1fYmxvY2tz
LmdldChtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpKSk7CisgICAgICAgIC8vIExlYXZlIHRoZSBp
bml0aWFsaXphdGlvbiBibG9jayBoYW5naW5nLCBzaW5jZSB3ZSB3aWxsIGFkZCB0byBpdCBsYXRl
ci4KICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAg
ICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIAorICAgICAgICAvLyBBbmQg
bm93IGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KKyAgICAgICAgbGlua09TUkV4
aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrKCk7CiAKICAgICAgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAgICAgICAgIG1fZnRsU3RhdGUuZHVtcFN0YXRl
KCJhZnRlciBsb3dlcmluZyIpOwpAQCAtMTUxLDggKzE1OCw5IEBAIHByaXZhdGU6CiAgICAgCiAg
ICAgdm9pZCB0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKCkKICAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBTZXQgdXAgdGhlIE9TUiBzdG9yeSBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIC8vIFdoaWxlIGNoZWNr
aW5nIGFyZ3VtZW50cywgZXZlcnl0aGluZyBpcyBpbiB0aGUgc3RhY2suCisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHNpemUoKTsgaS0tOykKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ld
ID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAKICAgICAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtX2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkg
ewogICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CkBAIC0x
NzAsMjEgKzE3OCwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVbmJveElmUG9zc2libGUoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2
YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGlj
dGlvbigpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJp
YWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlz
Tm90SW50MzIoanNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2Fy
ZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1
ZSkpOwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwg
bV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNO
b3RDZWxsKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQo
QmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkp
OwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRp
b24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQo
QmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFs
dWUpLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBt
X291dC5zZXQodW5ib3hCb29sZWFuKGpzVmFsdWUpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICB9CkBAIC0yMTYsMTggKzIyNCwxOCBAQCBwcml2YXRlOgogICAgICAgICAvLyBt
YWtlIElSIGR1bXBzIGVhc2llciB0byByZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dC
bG9jaywgbV9uZXh0TG93QmxvY2spOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCB0cmFjayB0aGUgT1NSIHNpdHVhdGlvbiBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGluaXRpYWxpemVP
U1JFeGl0U3RhdGVGb3JCbG9jaygpOwogICAgICAgICAKICAgICAgICAgbV9pbnQzMlZhbHVlcy5j
bGVhcigpOwogICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9ib29s
ZWFuVmFsdWVzLmNsZWFyKCk7CiAgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOworICAg
ICAgICBtX3RpbWVUb0xpdmUuY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVz
ZXQoKTsKICAgICAgICAgbV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwogICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBt
X2hpZ2hCbG9jay0+c2l6ZSgpOyArK25vZGVJbmRleCkKKyAgICAgICAgZm9yIChtX25vZGVJbmRl
eCA9IDA7IG1fbm9kZUluZGV4IDwgbV9oaWdoQmxvY2stPnNpemUoKTsgKyttX25vZGVJbmRleCkK
ICAgICAgICAgICAgIGNvbXBpbGVOb2RlKG5vZGVJbmRleCk7CiAgICAgfQogICAgIApAQCAtMjQw
LDkgKzI0OCw2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBib29sIHNob3VsZEV4ZWN1
dGVFZmZlY3RzID0gbV9zdGF0ZS5zdGFydEV4ZWN1dGluZyhtX25vZGUpOwogICAgICAgICAKLSAg
ICAgICAgaWYgKCFtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAgICByZXR1cm47
IC8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSIG1hZ2ljIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKLSAgICAgICAgCiAgICAgICAgIG1fZGlyZWN0aW9u
ID0gKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2FyZFNwZWN1bGF0
aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIHN3aXRjaCAobV9u
b2RlLT5vcCgpKSB7CkBAIC0yNTgsNiArMjYzLDEyIEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
U2V0TG9jYWw6CiAgICAgICAgICAgICBjb21waWxlU2V0TG9jYWwoKTsKICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBjb21waWxlTW92SGludCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWm9tYmllSGludDoKKyAgICAgICAg
ICAgIGNvbXBpbGVab21iaWVIaW50KCk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgICAgICAgICBjb21waWxlTW92SGludEFuZENoZWNrKCk7
CiAgICAgICAgICAgICBicmVhazsKQEAgLTM1Miw2ICszNjMsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBERkdfTk9ERV9ET19U
T19DSElMRFJFTihtX2dyYXBoLCBtX25vZGUsIHVzZSk7CisgICAgICAgIAorICAgICAgICBpZiAo
bV9ub2RlLT5oYXNSZXN1bHQoKSkKKyAgICAgICAgICAgIG1fdGltZVRvTGl2ZS5hZGQobV9ub2Rl
LCBtX25vZGUtPmFkanVzdGVkUmVmQ291bnQoKSk7CisgICAgICAgIAogICAgICAgICBpZiAoc2hv
dWxkRXhlY3V0ZUVmZmVjdHMpCiAgICAgICAgICAgICBtX3N0YXRlLmV4ZWN1dGVFZmZlY3RzKG5v
ZGVJbmRleCk7CiAgICAgfQpAQCAtMzY4LDggKzM4NCwxMiBAQCBwcml2YXRlOgogICAgIAogICAg
IHZvaWQgY29tcGlsZUdldExvY2FsKCkKICAgICB7CisgICAgICAgIC8vIEdldExvY2FsIGlzIG9u
ZSBvZiB0aGUgZmV3IG5vZGVzIHRoYXQgbWF5IGJlIGxlZnQgYmVoaW5kLCB3aXRoICFzaG91bGRH
ZW5lcmF0ZSgpLgorICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFy
aWFibGUgPSBtX25vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigp
OwogICAgICAgICBBYnN0cmFjdFZhbHVlJiB2YWx1ZSA9IG1fc3RhdGUudmFyaWFibGVzKCkub3Bl
cmFuZCh2YXJpYWJsZS0+bG9jYWwoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAocHJlZGljdGlv
biA9PSBTcGVjTm9uZSkgewpAQCAtNDIwLDEzICs0NDAsMTIgQEAgcHJpdmF0ZToKICAgICAKICAg
ICB2b2lkIGNvbXBpbGVTZXRMb2NhbCgpCiAgICAgeworICAgICAgICBvYnNlcnZlTW92SGludCht
X25vZGUpOworICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9
IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlw
ZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAg
ICAgIGJvb2wgbmVlZHNGbHVzaGluZyA9IG1fZmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG1fbm9k
ZSk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogSGFuZGxlIHRoZSBNb3ZIaW50IGZvciBP
U1IuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjMKLSAgICAgICAgCiAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3Np
YmxlKCkpIHsKICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0
KCkpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4gRlRM
LgpAQCAtNDM4LDIxICs0NTcsMjcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlmIChpc0ludDMy
U3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICBtX291dC5zZXQo
dmFsdWUsIG1fbG9jYWxzMzIub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICAg
ICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNo
aW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlMzIodmFsdWUsIHBheWxvYWRG
b3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOworICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAg
ICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3Rv
cmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShD
ZWxsSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHBy
ZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jvb2xlYW4obV9ub2Rl
LT5jaGlsZDEoKSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7
Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYg
KG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmU2NChsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9
IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00NjAsMTggKzQ4
NSwzMiBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQoKSkgewogICAg
ICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwo
KSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFibGUtPmxvY2FsKCldID0gVmFs
dWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2
YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAg
aWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFsdWUsIGFk
ZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
W3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkKKyAgICB7CisgICAg
ICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGls
ZVpvbWJpZUhpbnQoKQorICAgIHsKKyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0g
bV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9
IGRhdGEtPmxvY2FsKCk7CisgICAgICAgIG1fdmFsdWVTb3VyY2VzW2RhdGEtPmxvY2FsKCldID0g
VmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
TW92SGludEFuZENoZWNrKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1v
dkhpbnQgZm9yIE9TUi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMzYyMworICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOwogICAgICAg
ICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgfQogICAgIApAQCAtNTAwLDcgKzUz
OSw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0g
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShy
ZXN1bHQsIDEpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAw
LCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7CiAgICAgICAgICAgICBtX2ludDMyVmFs
dWVzLmFkZChtX25vZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01MjQsNyArNTYzLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0
LnN1YldpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShP
dmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOworICAgICAgICAg
ICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShy
ZXN1bHQsIDEpKTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQu
ZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
QEAgLTU0Nyw3ICs1ODYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
b3V0Lm11bChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRoT3ZlcmZsb3czMihsZWZ0LCBy
aWdodCk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCAwLCAwLCBtX291dC5l
eHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxh
dGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVz
dWx0LCAxKSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQuZXh0cmFjdFZhbHVlKG92
ZXJmbG93UmVzdWx0LCAwKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNTU2LDgg
KzU5NSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIDAsIDAsIG1f
b3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybykpOwotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShOZWdhdGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5p
bnQzMlplcm8pKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCBub1Zh
bHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybykpOworICAgICAg
ICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVz
c1RoYW4ocmlnaHQsIG1fb3V0LmludDMyWmVybykpOwogICAgICAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51
YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIH0KQEAgLTU4NSw3ICs2MjQsNyBAQCBwcml2
YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBuZWdhdGUtd2l0aC1vdmVy
ZmxvdyBpbnRyaW5zaWMuIEhvcGVmdWxseSB0aGlzCiAgICAgICAgICAgICAgICAgLy8gZG9lcyB0
aGUgdHJpY2ssIHRob3VnaC4KICAgICAgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQg
PSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihtX291dC5pbnQzMlplcm8sIHZhbHVlKTsKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShv
dmVyZmxvd1Jlc3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywg
bm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQs
IDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02NTYsNyArNjk1LDcgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+
Y2hpbGQxKCkpOwogICAgICAgICBzcGVjdWxhdGVGb3J3YXJkKAotICAgICAgICAgICAgT3ZlcmZs
b3csIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5pbnQzMlplcm8pLAorICAgICAg
ICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVzc1RoYW4odmFsdWUsIG1fb3V0
LmludDMyWmVybyksCiAgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdFVJbnQz
MiwgdmFsdWUpKTsKICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCB2YWx1ZSk7CiAg
ICAgfQpAQCAtNjc1LDcgKzcxNCw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAo
bV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewogICAgICAgICAgICAgc3BlY3Vs
YXRlKAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBjZWxsLCAwLAorICAgICAgICAgICAgICAg
IGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCiAgICAgICAgICAgICAgICAgbV9vdXQu
bm90RXF1YWwoc3RydWN0dXJlLCB3ZWFrUG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZVNldCgpWzBd
KSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC02OTIsNyArNzMxLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgc3BlY3VsYXRlKAotICAgICAg
ICAgICAgZXhpdEtpbmQsIGNlbGwsIDAsCisgICAgICAgICAgICBleGl0S2luZCwganNWYWx1ZVZh
bHVlKGNlbGwpLCAwLAogICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlLCB3ZWFr
UG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkpKTsKICAgICAgICAgCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNzU1LDcgKzc5
NCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6IHsKICAgICAg
ICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3VuZHMoKSkgewogICAgICAgICAg
ICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAgT3V0T2ZCb3VuZHMsIDAsIDAs
CisgICAgICAgICAgICAgICAgICAgIE91dE9mQm91bmRzLCBub1ZhbHVlKCksIDAsCiAgICAgICAg
ICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKICAgICAgICAgICAgICAgICAgICAgICAg
IGluZGV4LCBtX291dC5sb2FkMzIoc3RvcmFnZSwgbV9oZWFwcy5CdXR0ZXJmbHlfcHVibGljTGVu
Z3RoKSkpOwogICAgICAgICAgICAgICAgIApAQCAtNzY0LDcgKzgwMyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJbnQzMlByb3BlcnRpZXMgOiBt
X2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywKICAgICAgICAgICAgICAgICAgICAg
c3RvcmFnZSwgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50UHRyKSwKICAgICAgICAgICAg
ICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQyKCkpLm1fdmFsdWUpKTsKLSAg
ICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCAwLCAwLCBtX291dC5pc1plcm82
NChyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCBub1Zh
bHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwogICAgICAgICAgICAgICAgIG1fanNW
YWx1ZVZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgfQpAQCAtODY1LDMyICs5MDQsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgfQog
ICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKEV4aXRLaW5kLCBMVmFsdWUs
IE5vZGUqLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJk
KAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSog
aGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIExCYXNpY0Js
b2NrIGZhaWxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgY29u
dGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgCi0gICAgICAgIG1fb3V0LmJy
YW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9u
KTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgZXhpdC4KLSAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICBtX291
dC5jYWxsKG1fYWJvcnRGdW5jdGlvbik7Ci0gICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0g
ICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICBh
cHBlbmRPU1JFeGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFp
bENvbmRpdGlvbiwgQmFja3dhcmRTcGVjdWxhdGlvbiwgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlRm9yd2FyZChFeGl0S2luZCBraW5kLCBMVmFsdWUg
bG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24sIGNvbnN0IEZv
cm1hdHRlZFZhbHVlJikKKyAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoCisgICAgICAgIEV4aXRL
aW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1
ZSBmYWlsQ29uZGl0aW9uLAorICAgICAgICBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYgcmVjb3Zlcnkp
CiAgICAgewotICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChraW5kLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmlu
ZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAg
ICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBGb3J3YXJk
U3BlY3VsYXRpb24sIHJlY292ZXJ5KTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGUo
RXhpdEtpbmQga2luZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBm
YWlsQ29uZGl0aW9uKQorICAgIHZvaWQgc3BlY3VsYXRlKAorICAgICAgICBFeGl0S2luZCBraW5k
LCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENv
bmRpdGlvbikKICAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVl
LCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50
IHJld2lyaW5nIHRoZSBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3
YXJkRGlyZWN0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGFwcGVuZE9TUkV4aXQoCisgICAgICAgICAgICBraW5k
LCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBtX2RpcmVjdGlvbiwgRm9ybWF0
dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdGVybWluYXRlKEV4aXRLaW5kIGtp
bmQpCkBAIC04OTgsMjcgKzkzMSw0MiBAQCBwcml2YXRlOgogICAgICAgICBzcGVjdWxhdGUoa2lu
ZCwgMCwgMCwgbV9vdXQuYm9vbGVhblRydWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJhY2t3
YXJkVHlwZUNoZWNrKExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCBi
YWNrd2FyZFR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlw
ZUNoZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkp
OwotICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVl
Lm5vZGUoKSwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIG1fc3RhdGUuZm9yTm9kZShoaWdoVmFs
dWUpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgICAgICBhcHBlbmRUeXBlQ2hlY2so
CisgICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZh
aWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24sCisgICAgICAgICAgICBGb3JtYXR0ZWRW
YWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKExWYWx1ZSBs
b3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3Vn
aCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKAorICAg
ICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAg
ICAgewotICAgICAgICBiYWNrd2FyZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBl
c1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IHJld2lyaW5nIG9mIE9TUiBleGl0IHRvIGZvcndhcmQuCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kVHlw
ZUNoZWNrKAorICAgICAgICAgICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJv
dWdoLCBmYWlsQ29uZGl0aW9uLCBGb3J3YXJkU3BlY3VsYXRpb24sCisgICAgICAgICAgICBGb3Jt
YXR0ZWRWYWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB0eXBlQ2hlY2soTFZhbHVlIGxv
d1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdo
LCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIHR5cGVDaGVjaygKKyAgICAgICAgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBl
c1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAg
ICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRU
aHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdp
cmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2RpcmVjdGlvbiA9PSBGb3J3YXJkRGly
ZWN0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzNjIzCisgICAgICAgIGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgICAgIGxvd1ZhbHVl
LCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgbV9kaXJlY3Rp
b24sCisgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBhcHBlbmRUeXBlQ2hlY2soCisgICAgICAgIExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFs
dWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZh
aWxDb25kaXRpb24sIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFs
dWUgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hlY2so
aGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNlS2luZCgpKSk7CisgICAg
ICAgIGFwcGVuZE9TUkV4aXQoQmFkVHlwZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZh
aWxDb25kaXRpb24sIGRpcmVjdGlvbiwgcmVjb3ZlcnkpOworICAgICAgICBtX3N0YXRlLmZvck5v
ZGUoaGlnaFZhbHVlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKICAgICB9CiAgICAgCiAg
ICAgTFZhbHVlIGxvd0ludDMyKEVkZ2UgZWRnZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2Rl
ID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0aW9uKQpAQCAtOTI5LDcgKzk3Nyw4IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAKICAgICAgICAgaWYgKExW
YWx1ZSBib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0g
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhib3hlZFJlc3VsdCwgZWRnZSwgU3BlY0ludDMyLCBp
c05vdEludDMyKGJveGVkUmVzdWx0KSk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAg
ICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIs
IGlzTm90SW50MzIoYm94ZWRSZXN1bHQpKTsKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1
bmJveEludDMyKGJveGVkUmVzdWx0KTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKGVk
Z2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk0NSw3
ICs5OTQsOCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0g
TWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAg
ICAgICAKICAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1
ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0sodW5jaGVj
a2VkUmVzdWx0LCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tlZFJlc3VsdCkpOwor
ICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVl
KHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVz
dWx0KSk7CiAgICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkUmVzdWx0OwogICAgICAgICB9CiAg
ICAgICAgIApAQCAtOTcxLDcgKzEwMjEsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1f
anNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9D
SEVDSyh1bmJveGVkUmVzdWx0LCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94
ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAg
IGpzVmFsdWVWYWx1ZSh1bmJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9v
bGVhbih1bmJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hC
b29sZWFuKHVuYm94ZWRSZXN1bHQpOwogICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChl
ZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDk0
LDcgKzExNDUsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRn
ZSwgTFZhbHVlIGNlbGwpCiAgICAgewogICAgICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAg
ICAgIGNlbGwsIGVkZ2UsIFNwZWNPYmplY3QsCisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoY2Vs
bCksIGVkZ2UsIFNwZWNPYmplY3QsCiAgICAgICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAg
ICAgICAgICBtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZSksCiAg
ICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoZ2xvYmFsRGF0YSgpLnN0cmluZ1N0cnVj
dHVyZS5nZXQoKSkpKTsKQEAgLTExMDUsNiArMTE1NiwzNTcgQEAgcHJpdmF0ZToKICAgICAgICAg
c3BlY3VsYXRlT2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwogICAgIH0KICAgICAKKyAgICBi
b29sIGlzTGl2ZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5z
aWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLT5maW5kKGVkZ2Uubm9kZSgpKTsK
KyAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV90aW1lVG9MaXZlLT5lbmQoKSk7CisgICAgICAgIHJl
dHVybiAhIWl0ZXItPnZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZShFZGdlIGVkZ2Up
CisgICAgeworICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIg
PSBtX3RpbWVUb0xpdmUtPmZpbmQoZWRnZS5ub2RlKCkpOworICAgICAgICBBU1NFUlQoaXRlciAh
PSBtX3RpbWVUb0xpdmUtPmVuZCgpKTsKKyAgICAgICAgQVNTRVJUKGl0ZXItPnZhbHVlKTsKKyAg
ICAgICAgaXRlci0+dmFsdWUtLTsKKyAgICB9CisgICAgCisgICAgLy8gV3JhcHBlciB1c2VkIG9u
bHkgZm9yIERGR19OT0RFX0RPX1RPX0NISUxEUkVOCisgICAgdm9pZCB1c2UoTm9kZSosIEVkZ2Ug
ZWRnZSkKKyAgICB7CisgICAgICAgIHVzZShlZGdlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBp
bml0aWFsaXplT1NSRXhpdFN0YXRlRm9yQmxvY2soKQorICAgIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBOb2Rl
KiBub2RlID0gbV9oaWdoQmxvY2stPnZhcmlhYmxlc0F0SGVhZFtpXTsKKyAgICAgICAgICAgIGlm
ICghbm9kZSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJs
ZSA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPmlzQXJndW1lbnRzQWxpYXMoKSkg
eworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQXJndW1l
bnRzU291cmNlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFub2RlLT5zaG91bGRHZW5lcmF0ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3VyY2VJc0Rl
YWQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAobV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobm9kZSkpIHsK
KyAgICAgICAgICAgICAgICAvLyBUaGlzIHZhbHVlIHdpbGwgaGF2ZSBiZWVuIGZsdXNoZWQgdG8g
dGhlIEpTU3RhY2sgaW4gc29tZSBmb3JtIG9yCisgICAgICAgICAgICAgICAgLy8gYW5vdGhlci4K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVu
Ym94SWZQb3NzaWJsZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hv
dWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoRG91YmxlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
VmFsdWVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQ
b3NzaWJsZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3Vi
bGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEludDMySW5Mb2NhbHMpOworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7
CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoQm9v
bGVhbkluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX3ZhbHVl
U291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5Mb2NhbHMpOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIHZvaWQgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwg
Rm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25k
aXRpb24sCisgICAgICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVk
VmFsdWUgcmVjb3ZlcnkpCisgICAgeworICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4
aXQuYXBwZW5kKAorICAgICAgICAgICAgT1NSRXhpdCgKKyAgICAgICAgICAgICAgICBraW5kLCBs
b3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlRm9y
KGhpZ2hWYWx1ZSksCisgICAgICAgICAgICAgICAgbV9ub2RlLT5jb2RlT3JpZ2luLCBtX2xhc3RT
ZXRPcGVyYW5kLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAgICAg
ICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgbV9mdGxT
dGF0ZS5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOworICAgICAgICAK
KyAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5sYXN0
KCk7CisgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRlLm9z
ckV4aXQubGFzdCgpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3
QmxvY2soKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWls
Q2FzZSwgY29udGludWF0aW9uKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1f
cHJvbG9ndWUpOworICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzID0gYnVpbGRBbGxvY2EobV9v
dXQubV9idWlsZGVyLCBtX291dC5pbnRQdHIpOworICAgICAgICAKKyAgICAgICAgTEJhc2ljQmxv
Y2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKKyAg
ICAgICAgCisgICAgICAgIEV4aXRBcmd1bWVudExpc3QgYXJndW1lbnRzOworICAgICAgICBhcmd1
bWVudHMuYXBwZW5kKG1fY2FsbEZyYW1lKTsKKyAgICAgICAgaWYgKGxvd1ZhbHVlKQorICAgICAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZChhcmd1bWVudHMudmFsdWUoKSk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgVmFsdWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgeworICAgICAg
ICAgICAgY2FzZSBWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVz
W2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgSW50MzJJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbjMyKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKKyAgICAgICAgICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxzOgorICAg
ICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwg
YXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2FsczY0W2ld
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDMySW5Mb2Nh
bHM6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAgICAg
ICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldChtX2xvY2Fs
czMyW2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJvb2xl
YW5JbkxvY2FsczoKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAg
ICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBtX291dC5n
ZXQobV9sb2NhbHNCb29sZWFuW2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIERvdWJsZUluTG9jYWxzOgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBs
ZW1lbnQgZG91YmxlcyBpbiBGVEwuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNAorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVt
ZW50IFBoYW50b21Bcmd1bWVudHMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk4NgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFNvdXJjZUlzRGVhZDoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEhhdmVOb2RlOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvck5vZGUoZXhp
dCwgYXJndW1lbnRzLCBpLCBzb3VyY2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9IEZvcndhcmRTcGVjdWxhdGlv
bikKKyAgICAgICAgICAgIGV4aXQuY29udmVydFRvRm9yd2FyZChtX2hpZ2hCbG9jaywgbV9ub2Rl
LCBtX25vZGVJbmRleCwgcmVjb3ZlcnksIGFyZ3VtZW50cyk7CisgICAgICAgIAorICAgICAgICAv
LyBTbywgdGhlIHJlYWxseSBsYW1lIHRoaW5nIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIHRvIGJ1aWxk
IGFuIExMVk0gZnVuY3Rpb24gdHlwZS4KKyAgICAgICAgLy8gQm9vby4KKyAgICAgICAgVmVjdG9y
PExUeXBlLCAxNj4gYXJndW1lbnRUeXBlczsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGFyZ3VtZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIGFyZ3VtZW50VHlwZXMuYXBw
ZW5kKHR5cGVPZihhcmd1bWVudHNbaV0pKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmNhbGwo
CisgICAgICAgICAgICBtX291dC5pbnRUb1B0cigKKyAgICAgICAgICAgICAgICBtX291dC5nZXQo
aW5mby5tX3RodW5rQWRkcmVzcyksCisgICAgICAgICAgICAgICAgcG9pbnRlclR5cGUoZnVuY3Rp
b25UeXBlKG1fb3V0LnZvaWRUeXBlLCBhcmd1bWVudFR5cGVzKSkpLAorICAgICAgICAgICAgYXJn
dW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwg
bGFzdE5leHQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEV4aXRBcmd1bWVudEZvck5vZGUo
CisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgdW5z
aWduZWQgaW5kZXgsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5oYXNSZXN1bHQoKSk7CisKKyAg
ICAgICAgaWYgKHRyeVRvU2V0Q29uc3RhbnRFeGl0QXJ1bWVudChleGl0LCBhcmd1bWVudHMsIGlu
ZGV4LCBub2RlKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgICAgIGlmICgh
aXNMaXZlKG5vZGUpKSB7CisgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcobm9kZS0+b3Ao
KSkpIHsKKyAgICAgICAgICAgICAgICBub2RlID0gbm9kZS0+Y2hpbGQxKCkubm9kZSgpOworICAg
ICAgICAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50RXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3Vt
ZW50cywgaW5kZXgsIG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgaWYgKGlzTGl2ZShub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0
cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIWZvdW5k
KSB7CisgICAgICAgICAgICAgICAgTm9kZSogaW50MzJUb0RvdWJsZSA9IDA7CisgICAgICAgICAg
ICAgICAgTm9kZSogdmFsdWVUb0ludDMyID0gMDsKKyAgICAgICAgICAgICAgICBOb2RlKiB1aW50
MzJUb051bWJlciA9IDA7CisgICAgICAgICAgICAgICAgTm9kZSogZG91YmxlQXNJbnQzMiA9IDA7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWdu
ZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmJlZ2luKCk7CisgICAgICAgICAgICAg
ICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBlbmQgPSBtX3RpbWVUb0xpdmUu
ZW5kKCk7CisgICAgICAgICAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFpdGVyLT52YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBOb2RlKiBjYW5kaWRhdGUgPSBpdGVy
LT5rZXk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FuZGlkYXRlLT5jaGlsZDEoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBpZiAo
Y2FuZGlkYXRlLT5jaGlsZDEoKSAhPSBub2RlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoY2FuZGlkYXRlLT5vcCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgSW50MzJUb0RvdWJsZToKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
dDMyVG9Eb3VibGUgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZVRvSW50MzIgPSBjYW5kaWRhdGU7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBVSW50MzJUb051bWJlcjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVyID0gY2FuZGlkYXRlOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgRG91YmxlQXNJ
bnQzMjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMlRvTnVtYmVyID0gY2FuZGlkYXRl
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoIW5lZWRzT1NSRm9yd2FyZFJl
d2lyaW5nKGNhbmRpZGF0ZS0+b3AoKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgKGRvdWJsZUFzSW50MzIpCisgICAgICAgICAgICAgICAg
ICAgIG5vZGUgPSBkb3VibGVBc0luMzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoaW50MzJU
b0RvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGludDMyVG9Eb3VibGU7CisgICAg
ICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMyKQorICAgICAgICAgICAgICAgICAgICBu
b2RlID0gdmFsdWVUb0ludDMyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQzMlRvTnVt
YmVyKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gdWludDMyVG9OdW1iZXI7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzTGl2ZShub2RlKSkKKyAgICAgICAgICAg
ICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRl
eF0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChpc0xpdmUobm9kZSkp
OworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2ludDMyVmFsdWVzLmdl
dChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3VtZW50cywg
aW5kZXgsIFZhbHVlRm9ybWF0SW50MzIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9ib29sZWFu
VmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFy
Z3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwgcmVzdWx0KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQg
PSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICBhZGRFeGl0QXJndW1l
bnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVlLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IGRvdWJsZXMgaW4gdGhlIEZUTC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNAorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIHRyeVRvU2V0Q29uc3RhbnRF
eGl0QXJndW1lbnQoCisgICAgICAgIE9TUkV4aXQmIGV4aXQsIEV4aXRBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgdW5zaWduZWQgaW5kZXgsIE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAo
IW5vZGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICBjYXNl
IFdlYWtKU0NvbnN0YW50OgorICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0
VmFsdWU6OmNvbnN0YW50KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5ODYKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgT1NS
RXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwg
VmFsdWVGb3JtYXQgZm9ybWF0LAorICAgICAgICBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAg
ICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50
KGZvcm1hdCwgYXJndW1lbnRzLnNpemUoKSkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKHZh
bHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRp
YWxpemF0aW9uQmxvY2soKQorICAgIHsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9z
ckV4aXRUaHVuayA9CisgICAgICAgICAgICBnbG9iYWxEYXRhKCkuZ2V0Q1RJU3R1Yihvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKTsKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgdGFy
Z2V0ID0gQ29kZUxvY2F0aW9uTGFiZWwob3NyRXhpdFRodW5rLmNvZGUoKSk7CisgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhtX2luaXRpYWxpemF0aW9uKTsKKyAgICAgICAgCisgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigKKyAgICAgICAgICAgICZnbG9iYWxEYXRhKCksICZt
X2V4aXRUaHVua0dlbmVyYXRvciwgbV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywKKyAgICAg
ICAgICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAKKyAgICAgICAgQVNT
RVJUKG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JF
eGl0LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvJiBpbmZvID0gbV9mdGxTdGF0ZS5vc3JFeGl0W2ldOworICAgICAgICAgICAg
T1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdFtpXTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGluZm8ubV90aHVua0p1bXAsIHRhcmdl
dCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LnNldCgKKyAgICAgICAgICAgICAg
ICBtX291dC5jb25zdEludFB0cigKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKGluZm8ubV90aHVua0xhYmVsKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKKyAgICAgICAg
ICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
ZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGV4aXQubV90
aHVua0p1bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBzdGF0ZS5qaXRDb2RlLT5p
bml0aWFsaXplRXhpdFRodW5rcygKKyAgICAgICAgICAgIEZJTkFMSVpFX0RGR19DT0RFKAorICAg
ICAgICAgICAgICAgIGxpbmtCdWZmZXIsCisgICAgICAgICAgICAgICAgKCJGVEwgZXhpdCB0aHVu
a3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1f
Y29kZUJsb2NrLEpJVENvZGU6OkZUTEpJVCkpLmRhdGEoKSkpKTsKKworICAgICAgICBtX291dC5q
dW1wKG1fYmxvY2tzLmdldChtX2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpKSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgb2JzZXJ2ZU1vdkhpbnQoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChub2RlLT5jb250YWluc01vdkhpbnQoKSk7CisgICAgICAgIEFTU0VSVChub2RlLT5vcCgp
ICE9IFpvbWJpZUhpbnQpOworICAgICAgICAKKyAgICAgICAgaW50IG9wZXJhbmQgPSBub2RlLT5s
b2NhbCgpOworICAgICAgICAKKyAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG9wZXJhbmQ7Cisg
ICAgICAgIG1fdmFsdWVTb3VyY2VzW29wZXJhbmRdID0gVmFsdWVTb3VyY2Uobm9kZS0+Y2hpbGQx
KCkubm9kZSgpKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBhZGRXZWFrUmVmZXJlbmNlKEpTQ2Vs
bCogdGFyZ2V0KQogICAgIHsKICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24ud2Vh
a1JlZmVyZW5jZXMuYXBwZW5kKApAQCAtMTE1MSwxMiArMTU1MywxMiBAQCBwcml2YXRlOgogICAg
IE91dHB1dCBtX291dDsKICAgICAKICAgICBMQmFzaWNCbG9jayBtX3Byb2xvZ3VlOworICAgIExC
YXNpY0Jsb2NrIG1faW5pdGlhbGl6YXRpb247CiAgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgTEJh
c2ljQmxvY2s+IG1fYmxvY2tzOwogICAgIAogICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKICAgICBM
VmFsdWUgbV90YWdUeXBlTnVtYmVyOwogICAgIExWYWx1ZSBtX3RhZ01hc2s7Ci0gICAgTFZhbHVl
IG1fYWJvcnRGdW5jdGlvbjsKICAgICAKICAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2Nh
bE9wczsKICAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKQEAgLTEx
NjUsMTUgKzE1NjcsMjEgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1f
anNWYWx1ZVZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fYm9vbGVhblZhbHVl
czsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNo
TWFwPE5vZGUqLCB1bnNpZ25lZD4gbV90aW1lVG9MaXZlOwogICAgIAogICAgIE9wZXJhbmRzPExW
YWx1ZT4gbV9sb2NhbHNCb29sZWFuOwogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsK
ICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzNjQ7CiAgICAgCisgICAgT3BlcmFuZHM8VmFs
dWVTb3VyY2U+IG1fdmFsdWVTb3VyY2VzOworICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAg
IEV4aXRUaHVua0dlbmVyYXRvciBtX2V4aXRUaHVua0dlbmVyYXRvcjsKKyAgICAKICAgICBBYnN0
cmFjdFN0YXRlIG1fc3RhdGU7CiAgICAgQmFzaWNCbG9jayogbV9oaWdoQmxvY2s7CiAgICAgQmFz
aWNCbG9jayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dExvd0Jsb2Nr
OworICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4OwogICAgIE5vZGUqIG1fbm9kZTsKICAgICBTcGVj
dWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK09TUkV4aXQ6Ok9TUkV4aXQo
CisgICAgRXhpdEtpbmQgZXhpdEtpbmQsIFZhbHVlRm9ybWF0IHByb2ZpbGVWYWx1ZUZvcm1hdCwK
KyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIHZhbHVlUHJvZmlsZSwgQ29kZU9yaWdp
biBjb2RlT3JpZ2luLAorICAgIGludCBsYXN0U2V0T3BlcmFuZCwgdW5zaWduZWQgbnVtYmVyT2ZB
cmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxzKQorICAgIDogT1NSRXhpdEJhc2UoZXhp
dEtpbmQsIGNvZGVPcmlnaW4pCisgICAgLCBtX3Byb2ZpbGVWYWx1ZUZvcm1hdChwcm9maWxlVmFs
dWVGb3JtYXQpCisgICAgLCBtX3ZhbHVlUHJvZmlsZSh2YWx1ZVByb2ZpbGUpCisgICAgLCBtX3Bh
dGNoYWJsZUNvZGVPZmZzZXQoMCkKKyAgICAsIG1fbGFzdFNldE9wZXJhbmQobGFzdFNldE9wZXJh
bmQpCisgICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3VtZW50cywgbnVtYmVyT2ZMb2NhbHMpCit7
Cit9CisKK0NvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChD
b2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4gQ29kZUxvY2F0aW9u
SnVtcCgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oCisgICAgICAgICAgICBmdGxD
b2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZnRsKCktPmV4aXRUaHVua3MoKS5kYXRhTG9jYXRpb24o
KSkgKworICAgICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQpOworfQorCit2b2lkIE9TUkV4aXQ6
OmNvbnZlcnRUb0ZvcndhcmQoCisgICAgREZHOjpCYXNpY0Jsb2NrKiBibG9jaywgREZHOjpOb2Rl
KiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9kZUluZGV4LAorICAgIGNvbnN0IEZvcm1hdHRlZFZh
bHVlICZ2YWx1ZSwgRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzKQoreworICAgIE5vZGUqIG5v
ZGU7CisgICAgTm9kZSogbGFzdE1vdkhpbnQ7CisgICAgZG9TZWFyY2hGb3JGb3J3YXJkQ29udmVy
c2lvbihibG9jaywgY3VycmVudE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZVJlY292ZXJ5KTsKKwor
ICAgIEFTU0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsK
KyAgICAKKyAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOworICAgIAorICAgIGlm
ICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpbnQgb3ZlcnJpZGRlbk9wZXJh
bmQgPSBsYXN0TW92SGludC0+bG9jYWwoKTsKKyAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3ZlcnJp
ZGRlbk9wZXJhbmQ7CisgICAgCisgICAgLy8gSXMgdGhlIHZhbHVlIGZvciB0aGlzIG9wZXJhbmQg
YmVpbmcgcGFzc2VkIGFzIGFuIGFyZ3VtZW50IHRvIHRoZSBleGl0LCBvciBpcworICAgIC8vIGl0
IHNvbWV0aGluZyBlbHNlPyBJZiBpdCdzIGFuIGFyZ3VtZW50IGFscmVhZHksIHRoZW4gcmVwbGFj
ZSB0aGF0IGFyZ3VtZW50OworICAgIC8vIG90aGVyd2lzZSBhZGQgYW5vdGhlciBhcmd1bWVudC4K
KyAgICBpZiAobV92YWx1ZXNbb3ZlcnJpZGRlbk9wZXJhbmRdLmlzQXJndW1lbnQoKSkgeworICAg
ICAgICBFeGl0QXJndW1lbnQgYXJndW1lbnQgPSBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0u
ZXhpdEFyZ3VtZW50KCk7CisgICAgICAgIGFyZ3VtZW50c1tleGl0QXJndW1lbnQuYXJndW1lbnQo
KV0gPSB2YWx1ZS52YWx1ZSgpOworICAgICAgICBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0g
PSBFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgIGV4aXRBcmd1bWVudC53aXRo
Rm9ybWF0KHZhbHVlLmZvcm1hdCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisg
ICAgdW5zaWduZWQgYXJndW1lbnQgPSBhcmd1bWVudHMuc2l6ZSgpOworICAgIGFyZ3VtZW50cy5h
cHBlbmQodmFsdWUudmFsdWUoKSk7CisgICAgbV92YWx1ZXNbbV9sYXN0U2V0T3BlcmFuZF0gPSBF
eGl0VmFsdWU6OmV4aXRBcmd1bWVudCgKKyAgICAgICAgRXhpdEFyZ3VtZW50KHZhbHVlLmZvcm1h
dCgpLCBhcmd1bWVudCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRfaAorI2Rl
ZmluZSBGVExPU1JFeGl0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhp
dFByb2ZpbGUuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgorI2luY2x1ZGUgIkZUTEFi
YnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRMaXN0LmgiCisjaW5jbHVk
ZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmls
ZS5oIgorI2luY2x1ZGUgIk9wZXJhbmRzLmgiCisjaW5jbHVkZSAiVmFsdWVQcm9maWxlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVHJhY2tzIG9uZSBPU1IgZXhp
dCBzaXRlIHdpdGhpbiB0aGUgRlRMIEpJVC4gT1NSIGV4aXQgaW4gRlRMIHdvcmtzIGJ5IGRlY29u
c3RydWN0aW5nCisvLyB0aGUgY3JhenkgdGhhdCBpcyBPU1IgZG93biB0byBzaW1wbGUgU1NBIENG
RyBwcmltaXRpdmVzIHRoYXQgYW55IGNvbXBpbGVyIGJhY2tlbmQKKy8vIChpbmNsdWRpbmcgb2Yg
Y291cnNlIExMVk0pIGNhbiBncm9rIGFuZCBkbyBtZWFuaW5nZnVsIHRoaW5ncyB0by4gRXhjZXB0
IGZvcgorLy8gd2F0Y2hwb2ludC1iYXNlZCBleGl0cywgd2hpY2ggaGF2ZW4ndCB5ZXQgYmVlbiBp
bXBsZW1lbnRlZCAoc2VlIHdlYmtpdC5vcmcvYi8xMTM2NDcpLAorLy8gYW4gZXhpdCBpcyBqdXN0
IGEgY29uZGl0aW9uYWwgYnJhbmNoIGluIHRoZSBlbWl0dGVkIGNvZGUgd2hlcmUgb25lIGRlc3Rp
bmF0aW9uIGlzIHRoZQorLy8gY29udGludWF0aW9uIGFuZCB0aGUgb3RoZXIgaXMgYSBiYXNpYyBi
bG9jayB0aGF0IHBlcmZvcm1zIGEgbm8tcmV0dXJuIHRhaWwtY2FsbCB0byBhbgorLy8gZXhpdCB0
aHVuay4gVGhpcyB0aHVuayB0YWtlcyBhcyBpdHMgYXJndW1lbnRzIHRoZSBsaXZlIG5vbi1jb25z
dGFudAorLy8gbm90LWFscmVhZHktYWNjb3VudGVkLWZvciBieXRlY29kZSBzdGF0ZS4gVG8gYXBw
cmVjaWF0ZSBob3cgdGhpcyB3b3JrcyBjb25zaWRlciB0aGUKKy8vIGZvbGxvd2luZyBKYXZhU2Ny
aXB0IHByb2dyYW0sIGFuZCBpdHMgbG93ZXJpbmcgZG93biB0byBMTFZNIElSIGluY2x1ZGluZyB0
aGUgcmVsZXZhbnQKKy8vIGV4aXRzOgorLy8KKy8vIGZ1bmN0aW9uIGZvbyhvKSB7CisvLyAgICAg
dmFyIGEgPSBvLmE7IC8vIHByZWRpY3RlZCBpbnQKKy8vICAgICB2YXIgYiA9IG8uYjsKKy8vICAg
ICB2YXIgYyA9IG8uYzsgLy8gTkIgdGhpcyBpcyBkZWFkCisvLyAgICAgYSA9IGEgfCA1OyAvLyBv
dXIgZXhhbXBsZSBPU1IgZXhpdDogbmVlZCB0byBjaGVjayBpZiBhIGlzIGFuIGludAorLy8gICAg
IHJldHVybiBhICsgYjsKKy8vIH0KKy8vCisvLyBKdXN0IGNvbnNpZGVyIHRoZSAiYSB8IDUiLiBJ
biB0aGUgREZHIElSLCB0aGlzIGxvb2tzIGxpa2U6CisvLworLy8gQml0T3IoQ2hlY2s6SW50MzI6
QGEsIEludDMyOjUpCisvLworLy8gV2hlcmUgQGEgaXMgdGhlIG5vZGUgZm9yIHRoZSBHZXRMb2Nh
bCBub2RlIHRoYXQgZ2V0cyB0aGUgdmFsdWUgb2YgdGhlICdhJyB2YXJpYWJsZS4KKy8vIENvbmNl
cHR1YWxseSwgdGhpcyBub2RlIGNhbiBiZSBmdXJ0aGVyIGJyb2tlbiBkb3duIHRvIHRoZSBmb2xs
b3dpbmcgKG5vdGUgdGhhdCB0aGlzCisvLyBwYXJ0aWN1bGFyIGxvd2VyaW5nIG5ldmVyIGFjdHVh
bGx5IGhhcHBlbnMgLSB3ZSBza2lwIHRoaXMgc3RlcCBhbmQgZ28gc3RyYWlnaHQgdG8KKy8vIExM
Vk0gSVIgLSBidXQgaXQncyBzdGlsbCB1c2VmdWwgdG8gc2VlIHRoaXMpOgorLy8KKy8vIGV4aXRJ
ZihAYSBpcyBub3QgaW50MzIpOworLy8gY29udGludWF0aW9uOworLy8KKy8vIFdoZXJlICdleGl0
SWYoKScgaXMgYSBmdW5jdGlvbiB0aGF0IHdpbGwgZXhpdCBpZiB0aGUgYXJndW1lbnQgaXMgdHJ1
ZSwgYW5kCisvLyAnY29udGludWF0aW9uJyBpcyB0aGUgc3R1ZmYgdGhhdCB3ZSB3aWxsIGRvIGFm
dGVyIHRoZSBleGl0SWYoKSBjaGVjay4gKE5vdGUgdGhhdAorLy8gRlRMIHJlZmVycyB0byAnZXhp
dElmKCknIGFzICdzcGVjdWxhdGUoKScsIHdoaWNoIGlzIGluIGxpbmUgd2l0aCBERkcgdGVybWlu
b2xvZ3kuKQorLy8gVGhpcyB0aGVuIGdldHMgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyBM
TFZNIElSLCBhc3N1bWluZyB0aGF0ICUwIGlzIHRoZSBMTFZNCisvLyB2YWx1ZSBjb3JyZXNwb25k
aW5nIHRvIHZhcmlhYmxlICdhJywgYW5kICUxIGlzIHRoZSBMTFZNIHZhbHVlIGZvciB2YXJpYWJs
ZSAnYic6CisvLworLy8gICAlMiA9IC4uLiAvLyB0aGUgcHJlZGljdGF0ZSBjb3JyZXNwb25kaW5n
IHRvICdAYSBpcyBub3QgaW50MzInCisvLyAgIGJyIGkxICUyLCBsYWJlbCAlMywgbGFiZWwgJTQK
Ky8vIDsgPGxhYmVsPjozCisvLyAgIGNhbGwgdm9pZCBleGl0VGh1bmsxKCUwLCAlMSkgLy8gcGFz
cyAnYScgYW5kICdiJywgc2luY2UgdGhleSdyZSBib3RoIGxpdmUtaW4tYnl0ZWNvZGUKKy8vICAg
dW5yZWFjaGFibGUKKy8vIDsgPGxhYmVsPjo0CisvLyAgIC4uLiAvLyBjb2RlIGZvciB0aGUgY29u
dGludWF0aW9uCisvLworLy8gV2hlcmUgJ2V4aXRUaHVuazEnIGlzIHRoZSBJUiB0byBnZXQgdGhl
IGV4aXQgdGh1bmsgZm9yICp0aGlzKiBPU1IgZXhpdC4gRWFjaCBPU1IKKy8vIGV4aXQgd2lsbCBh
cHBlYXIgdG8gTExWTSB0byBoYXZlIGEgZGlzdGluY3QgZXhpdCB0aHVuay4KKy8vCisvLyBOb3Rl
IHRoYXQgdGhpcyBkaWRuJ3QgaGF2ZSB0byBwYXNzICc1JywgJ28nLCBvciAnYycgdG8gdGhlIGV4
aXQgdGh1bmsuIDUgaXMgYQorLy8gY29uc3RhbnQgYW5kIHRoZSBERkcgYWxyZWFkeSBrbm93cyB0
aGF0LCBhbmQgY2FuIGFscmVhZHkgdGVsbCB0aGUgT1NSIGV4aXQgbWFjaGluZXJ5CisvLyB3aGF0
IHRoYXQgY29udGFudCBpcyBhbmQgd2hpY2ggYnl0ZWNvZGUgdmFyaWFibGVzIChpZiBhbnkpIGl0
IG5lZWRzIHRvIGJlIGRyb3BwZWQKKy8vIGludG8uIFRoaXMgaXMgY29udmV5ZWQgdG8gdGhlIGV4
aXQgc3RhdGljYWxseSwgdmlhIHRoZSBPU1JFeGl0IGRhdGEgc3RydWN0dXJlIGJlbG93LgorLy8g
U2VlIHRoZSBjb2RlIGZvciBFeGl0VmFsdWUgZm9yIGRldGFpbHMuICdvJyBpcyBhbiBhcmd1bWVu
dCwgYW5kIGFyZ3VtZW50cyBhcmUgYWx3YXlzCisvLyAiZmx1c2hlZCIgLSBpZiB5b3UgbmV2ZXIg
YXNzaWduIHRoZW0gdGhlbiB0aGVpciB2YWx1ZXMgYXJlIHN0aWxsIGluIHRoZSBhcmd1bWVudAor
Ly8gc3RhY2sgc2xvdHMsIGFuZCBpZiB5b3UgZG8gYXNzaWduIHRoZW0gdGhlbiB3ZSBlYWdlcmx5
IHN0b3JlIHRoZW0gaW50byB0aG9zZSBzbG90cy4KKy8vICdjJyBpcyBkZWFkIGluIGJ5dGVjb2Rl
LCBhbmQgdGhlIERGRyBrbm93cyB0aGlzOyB3ZSBzdGF0aWNhbGx5IHRlbGwgdGhlIGV4aXQgdGh1
bmsKKy8vIHRoYXQgaXQncyBkZWFkIGFuZCBkb24ndCBoYXZlIHRvIHBhc3MgYW55dGhpbmcuIFRo
ZSBleGl0IHRodW5rIHdpbGwgImluaXRpYWxpemUiIGl0cworLy8gdmFsdWUgdG8gVW5kZWZpbmVk
LgorLy8KKy8vIFRoaXMgYXBwcm9hY2ggdG8gT1NSIGV4aXQgaGFzIGEgbnVtYmVyIG9mIHZpcnR1
ZXM6CisvLworLy8gLSBJdCBpcyBhbiBlbnRpcmVseSB1bnN1cnByaXNpbmcgcmVwcmVzZW50YXRp
b24gZm9yIGEgY29tcGlsZXIgdGhhdCBhbHJlYWR5IGdyb2tzCisvLyAgIENGRy1saWtlIElScyBm
b3IgQy1saWtlIGxhbmd1YWdlcy4gQWxsIGV4aXN0aW5nIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1h
dGlvbnMganVzdAorLy8gICB3b3JrLgorLy8KKy8vIC0gSXQgbGVuZHMgaXRzZWxmIG5hdHVyYWxs
eSB0byBtb2Rlcm4gYXBwcm9hY2hlcyB0byBjb2RlIG1vdGlvbi4gRm9yIGV4YW1wbGUsIHlvdQor
Ly8gICBjb3VsZCBzaW5rIG9wZXJhdGlvbnMgZnJvbSBhYm92ZSB0aGUgZXhpdCB0byBiZWxvdyBp
dCwgaWYgeW91IGp1c3QgZHVwbGljYXRlIHRoZQorLy8gICBvcGVyYXRpb24gaW50byB0aGUgT1NS
IGV4aXQgYmxvY2suIFRoaXMgaXMgYm90aCBsZWdhbCBhbmQgZGVzaXJhYmxlLiBJdCB3b3Jrcwor
Ly8gICBiZWNhdXNlIHRoZSBiYWNrZW5kIHNlZXMgdGhlIE9TUiBleGl0IGJsb2NrIGFzIGJlaW5n
IG5vIGRpZmZlcmVudCB0aGFuIGFueSBvdGhlciwKKy8vICAgYW5kIExMVk0gYWxyZWFkeSBzdXBw
b3J0cyBzaW5raW5nIGlmIGl0IHNlZXMgdGhhdCBhIHZhbHVlIGlzIG9ubHkgcGFydGlhbGx5IHVz
ZWQuCisvLyAgIEhlbmNlIHRoZXJlIGV4aXN0cyBhIHZhbHVlIHRoYXQgZG9taW5hdGVzIHRoZSBl
eGl0IGJ1dCBpcyBvbmx5IHVzZWQgYnkgdGhlIGV4aXQKKy8vICAgdGh1bmsgYW5kIG5vdCBieSB0
aGUgY29udGludWF0aW9uLCBzaW5raW5nIG91Z2h0IHRvIGtpY2sgaW4gZm9yIHRoYXQgdmFsdWUu
CisvLyAgIEhvaXN0aW5nIG9wZXJhdGlvbnMgZnJvbSBiZWxvdyBpdCB0byBhYm92ZSBpdCBpcyBh
bHNvIHBvc3NpYmxlLCBmb3Igc2ltaWxhcgorLy8gICByZWFzb25zLgorLy8KKy8vIC0gVGhlIG5v
LXJldHVybiB0YWlsLWNhbGwgdG8gdGhlIE9TUiBleGl0IHRodW5rIGNhbiBiZSBzdWJqZWN0ZWQg
dG8gc3BlY2lhbGl6ZWQKKy8vICAgY29kZS1zaXplIHJlZHVjdGlvbiBvcHRpbWl6YXRpb25zLCB0
aG91Z2ggdGhpcyBpcyBvcHRpb25hbC4gRm9yIGV4YW1wbGUsIGluc3RlYWQKKy8vICAgb2YgYWN0
dWFsbHkgZW1pdHRpbmcgYSBjYWxsIGFsb25nIHdpdGggYWxsIHRoYXQgZ29lcyB3aXRoIGl0IChs
aWtlIHBsYWNpbmcgdGhlCisvLyAgIGFyZ3VtZW50cyBpbnRvIGFyZ3VtZW50IHBvc2l0aW9uKSwg
dGhlIGJhY2tlbmQgY291bGQgY2hvb3NlIHRvIHNpbXBseSBpbmZvcm0gdXMKKy8vICAgd2hlcmUg
aXQgaGFkIHBsYWNlZCB0aGUgYXJndW1lbnRzIGFuZCBleHBlY3QgdGhlIGNhbGxlZSAoaS5lLiB0
aGUgZXhpdCB0aHVuaykgdG8KKy8vICAgZmlndXJlIGl0IG91dCBmcm9tIHRoZXJlLiBJdCBjb3Vs
ZCBhbHNvIHRlbGwgdXMgd2hhdCB3ZSBuZWVkIHRvIGRvIHRvIHBvcCBzdGFjaywKKy8vICAgYWx0
aG91Z2ggYWdhaW4sIGl0IGRvZXNuJ3QgaGF2ZSB0bzsgaXQgY291bGQganVzdCBlbWl0IHRoYXQg
Y29kZSBub3JtYWxseS4gVGhvdWdoCisvLyAgIHdlIGRvbid0IHN1cHBvcnQgdGhpcyB5ZXQsIHdl
IGNvdWxkOyB0aGUgb25seSB0aGluZyB0aGF0IHdvdWxkIGNoYW5nZSBvbiBvdXIgZW5kCisvLyAg
IGlzIHRoYXQgd2UnZCBuZWVkIGZlZWRiYWNrIGZyb20gdGhlIGJhY2tlbmQgYWJvdXQgdGhlIGxv
Y2F0aW9uIG9mIHRoZSBhcmd1bWVudHMKKy8vICAgYW5kIGEgZGVzY3JpcHRpb24gb2YgdGhlIHRo
aW5ncyB0aGF0IG5lZWQgdG8gYmUgZG9uZSB0byBwb3Agc3RhY2suIFRoaXMgd291bGQKKy8vICAg
aW52b2x2ZSBzd2l0Y2hpbmcgdGhlIG1fdmFsdWVzIGFycmF5IHRvIHVzZSBzb21ldGhpbmcgbW9y
ZSBha2luIHRvIFZhbHVlUmVjb3ZlcnkKKy8vICAgcmF0aGVyIHRoYW4gdGhlIGN1cnJlbnQgRXhp
dFZhbHVlLCBhbGJlaXQgcG9zc2libHkgd2l0aCBzb21lIGhhY2tzIHRvIGJldHRlcgorLy8gICB1
bmRlcnN0YW5kIHRoZSBraW5kcyBvZiBwbGFjZXMgd2hlcmUgdGhlIExMVk0gYmFja2VuZCB3b3Vs
ZCBwdXQgdmFsdWVzLgorLy8KKy8vIC0gSXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gYWxsb3cgdGhl
IGJhY2tlbmQgdG8gZG8gaXRzIG93biBleGl0IGhvaXN0aW5nLCBieSB1c2luZworLy8gICBpbnRy
aW5zaWNzIChvciBtZXRhLWRhdGEsIG9yIHNvbWV0aGluZykgdG8gaW5mb3JtIHRoZSBiYWNrZW5k
IHRoYXQgaXQncyBzYWZlIHRvCisvLyAgIG1ha2UgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4
aXRJZigpJyBtb3JlIHRydXRoeS4KKy8vCisvLyAtIEl0IGNvdWxkIGJlIGV4dGVuZGVkIHRvIHN1
cHBvcnQgd2F0Y2hwb2ludHMgKHNlZSB3ZWJraXQub3JnL2IvMTEzNjQ3KSBieSBtYWtpbmcKKy8v
ICAgdGhlIHByZWRpY2F0ZSBwYXNzZWQgdG8gJ2V4aXRJZigpJyBiZSBhbiBpbnRyaW5zaWMgdGhh
dCB0aGUgYmFja2VuZCBrbm93cyB0byBiZQorLy8gICB0cnVlIGF0IGNvbXBpbGUtdGltZS4gVGhl
IGJhY2tlbmQgY291bGQgdGhlbiB0dXJuIHRoZSBjb25kaXRpb25hbCBicmFuY2ggaW50byBhCisv
LyAgIHJlcGxhY2VhYmxlIGp1bXAsIG11Y2ggbGlrZSB0aGUgREZHIGRvZXMuCisKK3N0cnVjdCBP
U1JFeGl0IDogcHVibGljIE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0KAorICAgICAgICBFeGl0
S2luZCwgVmFsdWVGb3JtYXQgcHJvZmlsZVZhbHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFs
dWVQcm9maWxlLAorICAgICAgICBDb2RlT3JpZ2luLCBpbnQgbGFzdFNldE9wZXJhbmQsIHVuc2ln
bmVkIG51bWJlck9mQXJndW1lbnRzLAorICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7
CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKKyAgICAKKyAgICAvLyBU
aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNo
IHRvIHByb2ZpbGUuCisgICAgLy8gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwg
YmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQorICAgIC8vIG1ldGhvZCBvZiBnZXR0aW5n
IGEgdmFsdWUgcHJvZmlsZS4gTm90ZSB0aGF0IGFsbCBvZiB0aGUgRXhpdEFyZ3VtZW50J3MKKyAg
ICAvLyBhcmUgYWxyZWFkeSBhd2FyZSBvZiB0aGlzIHBvc3NpYmxlIG9mZi1ieS1vbmUsIHNvIHRo
ZXJlIGlzIG5vIG5lZWQgdG8KKyAgICAvLyBjb3JyZWN0IHRoZW0uCisgICAgVmFsdWVGb3JtYXQg
bV9wcm9maWxlVmFsdWVGb3JtYXQ7CisgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBt
X3ZhbHVlUHJvZmlsZTsKKyAgICAKKyAgICAvLyBPZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0dWJz
IG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQuCisgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2Rl
T2Zmc2V0OworICAgIAorICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIAorICAgIE9wZXJh
bmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgCisgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2Rl
TG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdDsKKyAgICAK
KyAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQoCisgICAgICAgIERGRzo6QmFzaWNCbG9jayosIERG
Rzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwKKyAgICAgICAgY29uc3Qg
Rm9ybWF0dGVkVmFsdWUmLCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMpOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExPU1JFeGl0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mb19oCisj
ZGVmaW5lIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlv
bnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvIHsKKyAgICBPU1JF
eGl0Q29tcGlsYXRpb25JbmZvKCkKKyAgICAgICAgOiBtX3RodW5rQWRkcmVzcygwKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6OkxhYmVsIG1fdGh1bmtMYWJlbDsKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBtX3RodW5rSnVtcDsKKyAgICBMVmFsdWUg
bV90aHVua0FkZHJlc3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRp
ZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTE9TUkV4aXRDb21waWxhdGlvbklu
Zm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGlsZXIuaCIKKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgiCisjaW5jbHVk
ZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCisjaW5jbHVkZSAiRlRMQ0FyZ3VtZW50R2V0dGVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNl
IERGRzsKKworc3RhdGljIGNvbXBpbGVTdHViKAorICAgIHVuc2lnbmVkIGV4aXRJRCwgT1NSRXhp
dCYgZXhpdCwgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgCisg
ICAgLy8gVGhpcyBpcyBhY3R1YWxseSBmYWlybHkgZWFzeSwgZXZlbiB0aG91Z2ggaXQgaXMgaG9y
cmlibHkgZ3Jvc3MuIFdlIGtub3cgdGhhdAorICAgIC8vIExMVk0gd291bGQgaGF2ZSBwYXNzZXMg
dXMgYWxsIG9mIHRoZSBzdGF0ZSB2aWEgYXJndW1lbnRzLiBXZSBrbm93IGhvdyB0byBnZXQKKyAg
ICAvLyB0aGUgYXJndW1lbnRzLiBBbmQsIHdlIGtub3cgaG93IHRvIHBvcCBzdGFjayBiYWNrIHRv
IHRoZSBKSVQgc3RhY2sgZnJhbWUsIHNvcnQKKyAgICAvLyBvZjogd2Uga25vdyB0aGF0IGl0J3Mg
dHdvIGZyYW1lcyBiZW5lYXRoIHVzLiBUaGlzIGlzIHRlcnJpYmxlIGFuZCBJIGZlZWwKKyAgICAv
LyBhc2hhbWVkIG9mIGl0LCBidXQgaXQgd2lsbCB3b3JrIGZvciBub3cuCisgICAgCisgICAgQ0Fy
Z3VtZW50R2V0dGVyIGFyZ3VtZW50cyhqaXQpOworICAgIAorICAgIC8vIEZpcnN0IHJlY292ZXIg
b3VyIGNhbGwgZnJhbWUgYW5kIHRhZyB0aGluZ2llcy4KKyAgICBhcmd1bWVudHMubG9hZE5leHRQ
dHIoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3Rlcik7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdN
YXNrKSwgR1BSSW5mbzo6dGFnTWFza1JlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBEbyBzb21lIHZh
bHVlIHByb2ZpbGluZy4KKyAgICBpZiAoZXhpdC5tX3Byb2ZpbGVWYWx1ZUZvcm1hdCAhPSBJbnZh
bGlkVmFsdWVGb3JtYXQpIHsKKyAgICAgICAgYXJndW1lbnRzLmxvYWROZXh0QW5kQm94KGV4aXQu
bV9wcm9maWxlVmFsdWVGb3JtYXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAKKyAg
ICAgICAgaWYgKGV4aXQubV9raW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZElu
ZGV4aW5nVHlwZSkgeworICAgICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZTsKKyAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZSA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0
QXJyYXlQcm9maWxlKGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAg
ICBqaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIw
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAg
ICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86Om5vbkFyZ0dQUjEsIGFycmF5UHJvZmls
ZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgaml0Lmxv
YWQ4KE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjEsIFN0cnVjdHVy
ZTo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAgICAg
ICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZv
Ojpub25BcmdHUFIyKTsKKyAgICAgICAgICAgICAgICBqaXQubHNoaWZ0MzIoR1BSSW5mbzo6bm9u
QXJnR1BSMSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgICAgICAgICAgICAgaml0Lm9yMzIo
R1BSSW5mbzo6bm9uQXJnR1BSMiwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhhcnJh
eVByb2ZpbGUtPmFkZHJlc3NPZkFycmF5TW9kZXMoKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBpZiAoISFleGl0Lm1fdmFsdWVQcm9maWxlKQorICAgICAg
ICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bm9uQXJnR1BSMCwgZXhpdC5tX3ZhbHVlUHJvZmls
ZS5nZXRTcGVjRmFpbEJ1Y2tldCgwKSk7CisgICAgfQorICAgIAorICAgIC8vIFN0YXJ0IGJ5IGR1
bXBpbmcgYWxsIGFyZ3VtZW50IGV4aXQgdmFsdWVzIHRvIHRoZSBzdGFjay4KKyAgICAKKyAgICBW
ZWN0b3I8RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCwgMTY+IHNvcnRlZEFyZ3VtZW50czsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBF
eGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2ldOworICAgICAgICBpbnQgb3BlcmFuZCA9
IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYg
KCF2YWx1ZS5pc0FyZ3VtZW50KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisg
ICAgICAgIHNvcnRlZEFyZ3VtZW50cy5hcHBlbmQoRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCh2YWx1
ZS5leGl0QXJndW1lbnQoKSwgb3BlcmFuZCkpOworICAgIH0KKyAgICBzdGQ6OnNvcnQoc29ydGVk
QXJndW1lbnRzLmJlZ2luKCksIHNvcnRlZEFyZ3VtZW50cy5lbmQoKSwgbGVzc2VyQXJndW1lbnRJ
bmRleCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvcnRlZEFyZ3VtZW50
cy5zaXplKCk7ICsraSkgeworICAgICAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5kIGFyZ3VtZW50
ID0gc29ydGVkQXJndW1lbnRzW2ldOworICAgICAgICAKKyAgICAgICAgYXJndW1lbnRzLmxvYWRO
ZXh0QW5kQm94KGFyZ3VtZW50LmV4aXRBcmd1bWVudCgpLmZvcm1hdCgpLCBHUFJJbmZvOjpub25B
cmdHUFIwKTsKKyAgICAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6bm9uQXJnR1BSMCwgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIGFyZ3VtZW50Lm9w
ZXJhbmQoKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKKyAgICB9CisgICAgCisgICAgLy8g
Qm94IGFueXRoaW5nIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2ssIG9yIHRoYXQgaXMgYSBj
b25zdGFudC4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBleGl0Lm1fdmFsdWVzLnNpemUo
KTsgaS0tOykgeworICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2ldOwor
ICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOwor
ICAgICAgICAKKyAgICAgICAgQWRkcmVzcyBhZGRyZXNzID0gTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoCisgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rlciwgb3BlcmFuZCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoICh2YWx1ZS5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICAgICAgaml0LnN0
b3JlNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4
aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICAgICAgaml0LnN0b3JlNjQoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBhZGRyZXNz
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50
MzI6CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIGFkZHJlc3Mud2l0
aE9mZnNldChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBq
aXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAg
ICAgIGppdC5sb2FkRG91YmxlKGFkZHJlc3MsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAg
ICAgaml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAg
ICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGhhbmRsZUV4aXRDb3VudHMoaml0LCBleGl0KTsKKyAgICByZWlmeUlubGluZWRDYWxsRnJhbWVz
KGppdCwgZXhpdCk7CisgICAgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KGppdCwgZXhpdCk7CisgICAg
CisgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgY29kZUJsb2Nr
KTsKKyAgICBleGl0Lm1fY29kZSA9IEZJTkFMSVpFX0NPREVfSUYoCisgICAgICAgIHNob3VsZFNo
b3dEaXNhc3NlbWJseSgpLAorICAgICAgICBwYXRjaEJ1ZmZlciwKKyAgICAgICAgKCJGVEwgT1NS
IGV4aXQgIyV1IChiYyMldSwgJXMpIGZyb20gJXMiLAorICAgICAgICAgICAgZXhpdElELCBleGl0
Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LAorICAgICAgICAgICAgZXhpdEtpbmRUb1N0cmlu
ZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5kYXRhKCkpKTsgCit9CisKK2V4
dGVybiAiQyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBleGl0SUQpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkZUTCBPU1Ig
RXhpdCBDb21waWxhdGlvbiIpOworICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhl
Yy0+Y29kZUJsb2NrKCk7CisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgQVNTRVJU
KGNvZGVCbG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CisgICAgCisgICAg
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAg
ICBPU1JFeGl0JiBleGl0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmZ0bCgpLT5vc3JFeGl0
W2V4aXRJRF07CisgICAgCisgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4aXQubV9j
b2RlT3JpZ2luKTsKKyAgICAKKyAgICBjb21waWxlU3R1YihleGl0SUQsIGV4aXQsIGdsb2JhbERh
dGEsIGNvZGVCbG9jayk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGV4aXQuY29kZUxv
Y2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29k
ZS5jb2RlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gZXhpdC5tX2NvZGUuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBGVExPU1JFeGl0Q29tcGlsZXJfaAorI2RlZmluZSBGVExPU1JFeGl0Q29tcGlsZXJfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUYWtlcyB0aGUgY2FsbCBmcmFtZSBhbmQg
dGhlIGluZGV4IG9mIHRoZSBleGl0LCBhbmQgcmV0dXJucyB0aGUgYWRkcmVzcyB0bworLy8ganVt
cCB0by4KK2V4dGVybiAiQyIgdm9pZCogREZHX09QRVJBVElPTiBjb21waWxlRlRMT1NSRXhpdChF
eGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0SUQpIFdURl9JTlRFUk5BTDsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBG
VExPU1JFeGl0Q29tcGlsZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE91dHB1dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0
cHV0LmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
T3V0cHV0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNSwxOSArMTM1LDIwIEBAIHB1YmxpYzoKICAg
ICBMVmFsdWUgemVyb0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxk
WkV4dChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBpbnRDYXN0KExWYWx1
ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRDYXN0KG1fYnVpbGRlciwgdmFs
dWUsIHR5cGUpOyB9CiAgICAgTFZhbHVlIGNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1
cm4gaW50Q2FzdCh2YWx1ZSwgaW50MzIpOyB9CisgICAgTFZhbHVlIGludFRvUHRyKExWYWx1ZSB2
YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHZhbHVl
LCB0eXBlKTsgfQogICAgIAogICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1
cm4gYnVpbGRMb2FkKG1fYnVpbGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZh
bHVlIHZhbHVlLCBMVmFsdWUgcmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRl
ciwgdmFsdWUsIHJlZmVyZW5jZSk7IH0KICAgICAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50
ZXIgcG9pbnRlciwgTFR5cGUgcmVmVHlwZSkKICAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQg
PSBnZXQoYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkp
OworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gZ2V0KGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwg
cmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJl
c3VsdCwgKm1faGVhcHMpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICB2b2lk
IHN0b3JlKExWYWx1ZSB2YWx1ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5cGUp
CiAgICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gc2V0KHZhbHVlLCBidWlsZEludFRvUHRy
KG1fYnVpbGRlciwgcG9pbnRlci52YWx1ZSgpLCByZWZUeXBlKSk7CisgICAgICAgIExWYWx1ZSBy
ZXN1bHQgPSBzZXQodmFsdWUsIGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwog
ICAgICAgICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVh
cHMpOwogICAgIH0KICAgICAKQEAgLTI0NCwxMCArMjQ1LDE4IEBAIHB1YmxpYzoKICAgICBMVmFs
dWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsg
cmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0K
ICAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9CiAg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBMVmFsdWUgY2FsbChM
VmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gYnVpbGRD
YWxsKG1fYnVpbGRlciwgZnVuY3Rpb24sIHZlY3Rvcik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFs
dWUgZnVuY3Rpb24pIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uKTsgfQog
ICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1
aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uLCBhcmcxKTsgfQogICAgIExWYWx1ZSBjYWxsKExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJldHVybiBidWlsZENh
bGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSwgYXJnMik7IH0KICAgICAKKyAgICBMVmFsdWUg
Y29udmVydFRvVGFpbENhbGwoTFZhbHVlIGNhbGwpCisgICAgeworICAgICAgICBzZXRUYWlsQ2Fs
bChjYWxsLCBJc1RhaWxDYWxsKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAog
ICAgIHZvaWQganVtcChMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyBidWlsZEJyKG1fYnVpbGRl
ciwgZGVzdGluYXRpb24pOyB9CiAgICAgdm9pZCBicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwgTEJh
c2ljQmxvY2sgdGFrZW4sIExCYXNpY0Jsb2NrIG5vdFRha2VuKSB7IGJ1aWxkQ29uZEJyKG1fYnVp
bGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgdm9pZCByZXQoTFZhbHVl
IHZhbHVlKSB7IGJ1aWxkUmV0KG1fYnVpbGRlciwgdmFsdWUpOyB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNp
bmNsdWRlICJGVExKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5m
by5oIgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CkBAIC00OSw2ICs1MCw3IEBAIHB1YmxpYzoKICAgICBMTW9kdWxlIG1vZHVs
ZTsKICAgICBMVmFsdWUgZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7Cisg
ICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CiAgICAgCiAgICAgdm9p
ZCBkdW1wU3RhdGUoY29uc3QgY2hhciogd2hlbik7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK01hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgc2l6ZV90IHNjcmF0Y2hT
aXplID0gc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSAqIChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50
UmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgU2Ny
YXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZlciA9IGdsb2JhbERhdGEtPnNjcmF0Y2hCdWZmZXJGb3JT
aXplKHNjcmF0Y2hTaXplKTsKKyAgICBFbmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nh
c3Q8RW5jb2RlZEpTVmFsdWUqPihzY3JhdGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnRvQXJndW1lbnRSZWdp
c3RlcihpKSwgYnVmZmVyICsgaSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkgeworICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzICsgaSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAgICAgICBqaXQu
c3RvcmVEb3VibGUoRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJbmZvOjpub25B
cmdHUFIxKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNo
IG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBpcyBhY3RpdmUgZHVyaW5nIGNhbGwuCisgICAgaml0Lm1v
dmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVu
Z3RoUHRyKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICBqaXQuc3RvcmVQdHIoTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaFNpemUpLCBHUFJJbmZvOjpub25BcmdHUFIx
KTsKKworICAgIC8vIGFyZ3VtZW50IDAgaXMgYWxyZWFkeSB0aGUgY2FsbCBmcmFtZS4KKyAgICBq
aXQubW92ZShHUFJJbmZvOjpub25BcmdHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1bmN0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgCisg
ICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+
YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOwor
ICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSwgR1BSSW5m
bzo6bm9uUHJlc2VydmVkTm9uUmV0dXJuR1BSKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKSB7CisgICAg
ICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6bm9uUHJlc2VydmVk
Tm9uUmV0dXJuR1BSKTsKKyAgICAgICAgaml0LmxvYWREb3VibGUoR1BSSW5mbzo6bm9uUHJlc2Vy
dmVkTm9uUmV0dXJuR1BSLCBGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIH0K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJl
Z2lzdGVyczsgKytpKQorICAgICAgICBqaXQubG9hZDY0KGJ1ZmZlciArIGksIEdQUkluZm86OnRv
QXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgCisgICAgaml0Lmp1bXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEs
ICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNh
bGwsIGNvbXBpbGVGVExPU1JFeGl0KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRjaEJ1
ZmZlciwgKCJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEZUTFRodW5rc19oCisjZGVmaW5lIEZUTFRodW5rc19oCisKKyNpbmNsdWRlIDx3dGYvUGxh
dGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7CisK
K25hbWVzcGFjZSBGVEwgeworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRp
b25UaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExUSHVua3Nf
aApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExWYWx1ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBWYWx1ZUZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3Jt
YXQpIHsKKyAgICBjYXNlIEludmFsaWRWYWx1ZUZvcm1hdDoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6Cisg
ICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFs
dWVGb3JtYXRVSW50MzI6CisgICAgICAgIG91dC5wcmludCgiVUludDMyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50KCJC
b29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZToK
KyAgICAgICAgb3V0LnByaW50KCJKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlRm9ybWF0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlRm9ybWF0X2gKKyNkZWZpbmUgRlRM
VmFsdWVGb3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1p
bGFyIHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAorLy8g
dW5saWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hl
cyBiZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCisKK2VudW0gVmFsdWVGb3JtYXQgeworICAgIElu
dmFsaWRWYWx1ZUZvcm1hdCwKKyAgICBWYWx1ZUZvcm1hdEludDMyLAorICAgIFZhbHVlRm9ybWF0
VUludDMyLAorICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKKyAgICBWYWx1ZUZvcm1hdEpTVmFsdWUs
CisgICAgVmFsdWVGb3JtYXREb3VibGUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6RlRMOjpWYWx1ZUZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExWYWx1ZUZvcm1hdF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVT
b3VyY2UuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU291cmNlTm90U2V0OgorICAg
ICAgICBvdXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluSlNTdGFjayIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnQzMkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJ
bkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiVmFs
dWVJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluTG9jYWxzOgor
ICAgICAgICBvdXQucHJpbnQoIkludDMySW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQm9vbGVhbkluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5JbkxvY2Fs
cyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJbkxvY2FsczoKKyAgICAgICAg
b3V0LnByaW50KCJEb3VibGVJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
cmd1bWVudHNTb3VyY2U6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNvdXJjZUlzRGVhZDoKKyAgICAgICAgb3V0LnByaW50
KCJTb3VyY2VJc0RlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSGF2ZU5vZGU6Cisg
ICAgICAgIG91dC5wcmludCgiTm9kZSgiLCBub2RlKCksICIpIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlU291cmNlX2gKKyNkZWZpbmUgRlRMVmFs
dWVTb3VyY2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitlbnVtIFZhbHVlU291
cmNlS2luZCB7CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVlSW5KU1N0YWNrLAorICAgIElu
dDMySW5KU1N0YWNrLAorICAgIERvdWJsZUluSlNTdGFjaywKKyAgICBWYWx1ZUluTG9jYWxzLAor
ICAgIEludDMySW5Mb2NhbHMsCisgICAgQm9vbGVhbkluTG9jYWxzLAorICAgIERvdWJsZUluTG9j
YWxzLAorICAgIEFyZ3VtZW50c1NvdXJjZSwKKyAgICBTb3VyY2VJc0RlYWQsCisgICAgSGF2ZU5v
ZGUKK307CisKK2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgp
CisgICAgICAgIDogbV92YWx1ZShTb3VyY2VOb3RTZXQpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKKyAgICAgICAgOiBt
X3ZhbHVlKGtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJj
ZShERkc6Ok5vZGUqIG5vZGUpCisgICAgICAgIDogbV92YWx1ZShiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhbHVlU291cmNlS2luZCgpIGtp
bmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUgPCBzdGF0aWNfY2FzdDx1aW50
cHRyX3Q+KEhhdmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNv
dXJjZUtpbmQ+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgfQorICAg
IAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFNvdXJjZU5v
dFNldDsgfQorICAgIAorICAgIERGRzo6Tm9kZSogbm9kZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxERkc6Ok5vZGUqPihtX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdWludHB0cl90IG1fdmFsdWU7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkK
KworI2VuZGlmIC8vIEZUTFZhbHVlU291cmNlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197706</attachid>
            <date>2013-04-11 18:18:49 -0700</date>
            <delta_ts>2013-04-12 17:35:00 -0700</delta_ts>
            <desc>lol it compiles</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>188358</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIzOCBA
QAorMjAxMy0wNC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBXb3JrIGluIHByb2dyZXNzLgor
CisgICAgICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAg
KEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
Ojp3aXRoT2Zmc2V0KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAg
ICAoSlNDOjpMaW5rQnVmZmVyOjpvZmZzZXRPZik6CisgICAgICAgIChMaW5rQnVmZmVyKToKKyAg
ICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJz
dHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZGZnL0RGR0dQUkluZm8uaDoKKyAg
ICAgICAgKEdQUkluZm8pOgorICAgICAgICAqIGRmZy9ERkdNaW5pZmllZE5vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpiZWxvbmdzSW5NaW5pZmllZEdyYXBoKToKKyAgICAgICAgKiBkZmcvREZH
Tm9kZVR5cGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcp
OgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpuZWVkc09TUkZvcndhcmRSZXdp
cmluZyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6
Ok9TUkV4aXQ6Ok9TUkV4aXQpOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpP
U1JFeGl0Ojpjb252ZXJ0VG9Gb3J3YXJkKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5oOgor
ICAgICAgICAoT1NSRXhpdCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4aXRCYXNlOjpjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3cpOgorICAgICAgICAoSlNDOjpERkc6Ok9T
UkV4aXRCYXNlOjpkb1NlYXJjaEZvckZvcndhcmRDb252ZXJzaW9uKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdEJhc2UuaDogQWRkZWQuCisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpE
Rkc6Ok9TUkV4aXRCYXNlOjpPU1JFeGl0QmFzZSk6CisgICAgICAgIChPU1JFeGl0QmFzZSk6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpo
YW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJh
bWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJnZXQpOgorICAgICAg
ICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA6IEFkZGVkLgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaDogQWRkZWQuCisgICAgICAgIChERkcp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRG
Rzo6U3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcyk6CisgICAgICAgICogZGZnL0RG
R1ZhbHVlU291cmNlLmg6CisgICAgICAgIChKU0M6OkRGRzo6VmFsdWVTb3VyY2U6OmZvclNwZWN1
bGF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6VmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QpOgorICAgICAg
ICAqIGZ0bC9GVExBYmJyZXZpYXRpb25zLmg6CisgICAgICAgIChGVEwpOgorICAgICAgICAoSlND
OjpGVEw6OmZ1bmN0aW9uVHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6dHlwZU9mKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpidWlsZENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OnNldFRhaWxDYWxs
KToKKyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bG9hZE5leHRBbmRC
b3gpOgorICAgICAgICAqIGZ0bC9GVExDQXJndW1lbnRHZXR0ZXIuaDogQWRkZWQuCisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OmlzQXJndW1lbnRSZWdpc3Rlcik6CisgICAgICAg
IChDQXJndW1lbnRHZXR0ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6
Q0FyZ3VtZW50R2V0dGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6Omxv
YWROZXh0OCk6CisgICAgICAgIChKU0M6OkZUTDo6Q0FyZ3VtZW50R2V0dGVyOjpsb2FkTmV4dDMy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0NjQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bG9hZE5leHRQdHIpOgorICAgICAgICAo
SlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bG9hZE5leHREb3VibGUpOgorICAgICAgICAoSlND
OjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bmV4dEFkZHJlc3MpOgorICAgICAgICAqIGZ0bC9GVExF
eGl0QXJndW1lbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdEFyZ3VtZW50OjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFyZ3VtZW50Lmg6
IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEV4aXRBcmd1bWVudFJlcHJlc2VudGF0
aW9uKToKKyAgICAgICAgKEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdEFy
Z3VtZW50OjpFeGl0QXJndW1lbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6
b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmZvcm1hdCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdEFyZ3VtZW50Ojphcmd1bWVudCk6CisgICAgICAgIChKU0M6
OkZUTDo6RXhpdEFyZ3VtZW50Ojp3aXRoRm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
QXJndW1lbnQ6OnJlcHJlc2VudGF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGl0QXJndW1lbnRGb3JPcGVyYW5kOjpkdW1wKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0
QXJndW1lbnRGb3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnRGb3JP
cGVyYW5kOjpFeGl0QXJndW1lbnRGb3JPcGVyYW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
QXJndW1lbnRGb3JPcGVyYW5kOjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRB
cmd1bWVudEZvck9wZXJhbmQ6OmV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZDo6b3BlcmFuZCk6CisgICAgICAgIChKU0M6OkZUTDo6bGVzc2Vy
QXJndW1lbnRJbmRleCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRBcmd1bWVudExpc3QuaDogQWRk
ZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3Iu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRodW5r
R2VuZXJhdG9yOjpFeGl0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRU
aHVua0dlbmVyYXRvcjo6fkV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFRodW5rR2VuZXJhdG9yOjplbWl0VGh1bmspOgorICAgICAgICAqIGZ0bC9GVExFeGl0VGh1
bmtHZW5lcmF0b3IuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdFRodW5r
R2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6CisgICAgICAg
ICogZnRsL0ZUTEV4aXRWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChF
eGl0VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdFZhbHVlOjpkZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNT
dGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpF
eGl0VmFsdWU6OmV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpr
aW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdFZhbHVlOjppc0luSlNTdGFja1NvbWVob3cpOgorICAgICAgICAoSlNDOjpG
VEw6OkV4aXRWYWx1ZTo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVl
Ojppc0FyZ3VtZW50KToKKyAgICAgICAgKiBmdGwvRlRMRm9ybWF0dGVkVmFsdWUuaDoKKyAgICAg
ICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6bm9WYWx1ZSk6CisgICAgICAgIChKU0M6OkZU
TDo6aW50MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6dUludDMyVmFsdWUpOgorICAgICAg
ICAoSlNDOjpGVEw6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6anNWYWx1ZVZh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpkb3VibGVWYWx1ZSk6CisgICAgICAgICogZnRsL0ZU
TEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRpYWxpemVFeGl0
VGh1bmtzKToKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6ZXhp
dFRodW5rcyk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAgKEpJVENvZGUp
OgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChGVEwpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExWTSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6dHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cyk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZVNldExvY2FsKToKKyAgICAgICAgKExvd2VyREZHVG9MTFZNKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhpbnQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNb3ZIaW50QW5kQ2hlY2spOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTmVnYXRlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVJbnQzMlRvTnVtYmVyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQmFja3dhcmQpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVGb3J3YXJkKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6YmFja3dhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpmb3J3YXJkVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6dHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBw
ZW5kVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93SW50
MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dDZWxsKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Qm9vbGVhbik6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmlzTGl2ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OnVzZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmluaXRpYWxp
emVPU1JFeGl0U3RhdGVGb3JCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjph
ZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6dHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9jayk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Om9ic2VydmVNb3ZIaW50KToKKyAgICAg
ICAgKiBmdGwvRlRMT1NSRXhpdC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAg
KEpTQzo6RlRMOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0
Ojpjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojpj
b252ZXJ0VG9Gb3J3YXJkKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAg
ICAgICAgKEZUTCk6CisgICAgICAgIChPU1JFeGl0KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6
OkZUTDo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6Cisg
ICAgICAgIChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhp
dENvbXBpbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6
OmNvbXBpbGVTdHViKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlRlRMT1NSRXhpdCk6Cisg
ICAgICAgICogZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6
CisgICAgICAgICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
aW50VG9QdHIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZCk6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0OjpzdG9yZSk6CisgICAgICAgIChPdXRwdXQpOgorICAgICAgICAoSlND
OjpGVEw6Ok91dHB1dDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpjb252ZXJ0
VG9UYWlsQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgIChTdGF0ZSk6
CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBmdGwvRlRMVGh1bmtzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEZU
TCk6CisgICAgICAgICogZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcDogQWRkZWQuCisgICAgICAgIChX
VEYpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBmdGwvRlRMVmFs
dWVGb3JtYXQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoV1RGKToKKyAgICAg
ICAgKiBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAg
ICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExWYWx1
ZVNvdXJjZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChWYWx1ZVNvdXJjZSk6
CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6OlZhbHVlU291cmNlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVT
b3VyY2U6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6Om5vZGUp
OgorCiAyMDEzLTA0LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgZm91cnRoVGllcjogREZHIHNob3VsZCBwcm92aWRlIHV0aWxpdGllcyBmb3IgY29tbW9uIE9T
UiBleGl0IHRhc2tzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYgKzg5LDMyIEBACiAJCTBG
MjFDMjdDMTRCRTcyNzYwMEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3QTE0QkU3MjczMDBBREM2
NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTBGMjFDMjdEMTRCRTcyN0EwMEFEQzY0QiAvKiBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjFD
MjdGMTRCRUFBODIwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIxQzI3RTE0QkVBQTgwMDBBREM2
NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTBGMjM1QkQxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJn
dW1lbnRHZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyMzVCQkIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1bWVudEdldHRlci5jcHAg
Ki87IH07CisJCTBGMjM1QkQyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkJD
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJEMzE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMRXhpdEFyZ3VtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjM1QkJEMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1l
bnQuY3BwICovOyB9OworCQkwRjIzNUJENDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3Vt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIz
NUJCRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCRDUxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQkYxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwICovOyB9OworCQkwRjIzNUJENjE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJENzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFy
Z3VtZW50TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudExpc3QuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJEODE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwICovOyB9OworCQkwRjIzNUJEOTE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
RXhpdFRodW5rR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyMzVCREExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJD
NDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyMzVCREIx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRWYWx1ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkM2MTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLzsgfTsKKwkJMEYyMzVCREQxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTE9TUkV4aXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCREUxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkM4MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCREYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9T
UkV4aXRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIzNUJDOTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmNw
cCAqLzsgfTsKKwkJMEYyMzVCRTAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVC
Q0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjM1QkUxMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMzVCQ0IxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgKi87
IH07CisJCTBGMjM1QkUyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNDMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExUaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQkwRjIzNUJFMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVC
Q0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCAqLzsgfTsKKwkJMEYyMzVC
RTQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDRTE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMVmFsdWVGb3JtYXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjIzNUJFNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0Yx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCAqLzsgfTsKKwkJMEYyMzVCRTYx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVTb3VyY2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjIzNUJFQjE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRTcxNzE3
OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCAqLzsgfTsKKwkJMEYyMzVCRUMxNzE3
OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFODE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NS
RXhpdEJhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU5
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwICovOyB9OworCQkw
RjIzNUJFRTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFQTE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyNDJEQTcxM0YzQjFFODAwN0FERDRDIC8q
IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNl
SGFydmVzdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyNTZDMzYxNjI3QjBBRDAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNs
b3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9y
U2xvd1BhdGhHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMx
MjE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi87IH07CkBAIC0xMDIyLDYg
KzEwNDgsMzIgQEAKIAkJMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXph
dGlvbktpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29kZVNwZWNpYWxp
emF0aW9uS2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjIxQzI3QTE0QkU3
MjczMDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFeGVjdXRpb25IYXJuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAvKiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJ5dGVjb2RlQ29udmVudGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQkIxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TENBcmd1bWVudEdldHRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGVExDQXJndW1lbnRHZXR0ZXIuY3BwOyBwYXRoID0gZnRsL0ZUTENBcmd1bWVudEdldHRlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkJDMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMQ0FyZ3VtZW50R2V0dGVyLmg7IHBhdGggPSBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkJEMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0QXJndW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRlRMRXhpdEFyZ3VtZW50LmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0QXJndW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJCRTE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMRXhpdEFyZ3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4
aXRBcmd1bWVudC5oOyBwYXRoID0gZnRsL0ZUTEV4aXRBcmd1bWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0QXJndW1lbnRG
b3JPcGVyYW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQzAxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oOyBwYXRoID0g
ZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudExpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdEFyZ3VtZW50TGlzdC5oOyBw
YXRoID0gZnRsL0ZUTEV4aXRBcmd1bWVudExpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0VGh1bmtHZW5l
cmF0b3IuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
VGh1bmtHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhp
dFRodW5rR2VuZXJhdG9yLmg7IHBhdGggPSBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkM0MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRM
RXhpdFZhbHVlLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjIzNUJDNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRWYWx1ZS5oOyBwYXRo
ID0gZnRsL0ZUTEV4aXRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIz
NUJDNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBGVExPU1JFeGl0LmNwcDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQzcxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTE9TUkV4aXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRM
T1NSRXhpdC5oOyBwYXRoID0gZnRsL0ZUTE9TUkV4aXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyMzVCQzgxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlv
bkluZm8uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT1NSRXhpdENvbXBp
bGF0aW9uSW5mby5oOyBwYXRoID0gZnRsL0ZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQzkxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXRDb21waWxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBGVExPU1JFeGl0Q29tcGlsZXIuY3BwOyBwYXRoID0gZnRsL0ZUTE9TUkV4aXRDb21waWxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkNBMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gRlRMT1NSRXhpdENvbXBpbGVyLmg7IHBhdGggPSBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkNCMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExUaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRM
VGh1bmtzLmNwcDsgcGF0aCA9IGZ0bC9GVExUaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRjIzNUJDQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFRodW5rcy5oOyBwYXRoID0gZnRsL0ZUTFRo
dW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDRDE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gRlRMVmFsdWVGb3JtYXQuY3BwOyBwYXRoID0gZnRsL0ZUTFZhbHVlRm9ybWF0LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFZhbHVlRm9ybWF0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFZhbHVlRm9ybWF0Lmg7IHBhdGggPSBmdGwvRlRMVmFsdWVGb3JtYXQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQ0YxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291
cmNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTFZhbHVlU291
cmNlLmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZVNvdXJjZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjM1QkQwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExWYWx1ZVNvdXJjZS5oOyBwYXRo
ID0gZnRsL0ZUTFZhbHVlU291cmNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0QmFzZS5jcHA7IHBhdGggPSBkZmcv
REZHT1NSRXhpdEJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJF
ODE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdEJhc2UuaDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0QmFz
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJFOTE3MTc4RTczMDA2OTBD
N0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA7IHBhdGggPSBkZmcvREZHT1NS
RXhpdFByZXBhcmF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVC
RUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0UHJlcGFyYXRpb24uaDsgcGF0aCA9IGRm
Zy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI1NkMzNDE2MjdCMEFBMDA3RjI3ODMgLyog
REZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aDsgcGF0aCA9IGRmZy9ERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyog
REZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBE
RkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMjUsMTcgKzIwNzcsMjggQEAKIAkJMEZFQTA5RkMxNzA1
MTM3RjAwQkI3MjJDIC8qIGZ0bCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRy
ZW4gPSAoCisJCQkJMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTEFiYnJldmlhdGlvbnMu
aCAqLywKIAkJCQkwRkVBMEExNzE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmNw
cCAqLywKIAkJCQkwRkVBMEExODE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwLmgg
Ki8sCiAJCQkJMEZFQTBBMTkxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVhcFJlcG9z
aXRvcnkuY3BwICovLAogCQkJCTBGRUEwQTFBMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFj
dEhlYXBSZXBvc2l0b3J5LmggKi8sCi0JCQkJMEZFQTA5RkQxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TEFiYnJldmlhdGlvbnMuaCAqLywKIAkJCQkwRkVBMDlGRTE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
Q2FwYWJpbGl0aWVzLmNwcCAqLywKIAkJCQkwRkVBMDlGRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
Q2FwYWJpbGl0aWVzLmggKi8sCisJCQkJMEYyMzVCQkIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENB
cmd1bWVudEdldHRlci5jcHAgKi8sCisJCQkJMEYyMzVCQkMxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TENBcmd1bWVudEdldHRlci5oICovLAogCQkJCTBGRUEwQTI1MTcwOTYyM0IwMEJCNzIyQyAvKiBG
VExDb21tb25WYWx1ZXMuY3BwICovLAogCQkJCTBGRUEwQTIxMTcwOTYwNjkwMEJCNzIyQyAvKiBG
VExDb21tb25WYWx1ZXMuaCAqLywKIAkJCQkwRkVBMEEwMDE3MDUxM0RCMDBCQjcyMkMgLyogRlRM
Q29tcGlsZS5jcHAgKi8sCiAJCQkJMEZFQTBBMDExNzA1MTNEQjAwQkI3MjJDIC8qIEZUTENvbXBp
bGUuaCAqLywKKwkJCQkwRjIzNUJCRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
LmNwcCAqLywKKwkJCQkwRjIzNUJCRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
LmggKi8sCisJCQkJMEYyMzVCQkYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZv
ck9wZXJhbmQuY3BwICovLAorCQkJCTBGMjM1QkMwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
QXJndW1lbnRGb3JPcGVyYW5kLmggKi8sCisJCQkJMEYyMzVCQzExNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRBcmd1bWVudExpc3QuaCAqLywKKwkJCQkwRjIzNUJDMjE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCAqLywKKwkJCQkwRjIzNUJDMzE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmggKi8sCisJCQkJMEYyMzVCQzQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi8sCisJCQkJMEYyMzVCQzUxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5oICovLAogCQkJCTBGRUEwQTJCMTcwQjY2MTkwMEJCNzIy
QyAvKiBGVExGb3JtYXR0ZWRWYWx1ZS5oICovLAogCQkJCTBGRUEwQTI2MTcwOTYyM0IwMEJCNzIy
QyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEEyMjE3MDk2MDY5
MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oICovLApAQCAtMjA0NCwxMSArMjEw
NywyMiBAQAogCQkJCTBGRUEwQTEzMTcwNjM2MzYwMEJCNzIyQyAvKiBGVExMTFZNSGVhZGVycy5o
ICovLAogCQkJCTBGRUEwQTA0MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5j
cHAgKi8sCiAJCQkJMEZFQTBBMDUxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZN
LmggKi8sCisJCQkJMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICov
LAorCQkJCTBGMjM1QkM3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8sCisJCQkJ
MEYyMzVCQzgxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCAq
LywKKwkJCQkwRjIzNUJDOTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmNw
cCAqLywKKwkJCQkwRjIzNUJDQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVy
LmggKi8sCiAJCQkJMEZFQTBBMjkxNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgKi8s
CiAJCQkJMEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovLAogCQkJCTBG
RUEwQTE1MTcwNkJCOTAwMEJCNzIyQyAvKiBGVExTdGF0ZS5jcHAgKi8sCiAJCQkJMEZFQTBBMDcx
NzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi8sCisJCQkJMEYyMzVCQ0IxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgKi8sCisJCQkJMEYyMzVCQ0MxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFRodW5rcy5oICovLAogCQkJCTBGRUEwQTFCMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExU
eXBlZFBvaW50ZXIuaCAqLywKKwkJCQkwRjIzNUJDRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFs
dWVGb3JtYXQuY3BwICovLAorCQkJCTBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZUZvcm1hdC5oICovLAorCQkJCTBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNv
dXJjZS5jcHAgKi8sCisJCQkJMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291
cmNlLmggKi8sCiAJCQkpOwogCQkJbmFtZSA9IGZ0bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7CkBAIC0yNzk4LDYgKzI4NzIsOCBAQAogCQkJCTBGRDgyRTUzMTQxREFFREUwMDE3OUM5NCAv
KiBERkdPU1JFbnRyeS5oICovLAogCQkJCTBGQzA5NzhFMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdP
U1JFeGl0LmNwcCAqLywKIAkJCQkwRkMwOTc2ODE0NjhBNkVGMDBDRjI0NDIgLyogREZHT1NSRXhp
dC5oICovLAorCQkJCTBGMjM1QkU3MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5j
cHAgKi8sCisJCQkJMEYyMzVCRTgxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmgg
Ki8sCiAJCQkJNjU5ODdGMkMxNjdGRTg0QjAwM0MyRjhEIC8qIERGR09TUkV4aXRDb21waWxhdGlv
bkluZm8uaCAqLywKIAkJCQkwRkMwOTc4RjE0NkE2RjYzMDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyLmNwcCAqLywKIAkJCQkwRkMwOTc2RjE0NjkzQUVGMDBDRjI0NDIgLyogREZHT1NSRXhp
dENvbXBpbGVyLmggKi8sCkBAIC0yODA3LDYgKzI4ODMsOCBAQAogCQkJCTBGNzAyNUE4MTcxNEIw
RjgwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaCAqLywKIAkJCQkwRkVGQzlB
NzE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgKi8sCiAJ
CQkJMEZFRkM5QTgxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
aCAqLywKKwkJCQkwRjIzNUJFOTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0
aW9uLmNwcCAqLywKKwkJCQkwRjIzNUJFQTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFBy
ZXBhcmF0aW9uLmggKi8sCiAJCQkJMEZGRkM5NEYxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNl
LmNwcCAqLywKIAkJCQkwRkZGQzk1MDE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuaCAqLywK
IAkJCQkwRkJFMEY2RDE2QzFEQjAxMDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBo
YXNlLmNwcCAqLywKQEAgLTMxODMsNiArMzI2MSw3IEBACiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAw
NjhCNzdDIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZE
REJGQjYxNjY2RUVEQTAwQzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJEMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0QjE1MjI4MDlEMDBD
RDg5MTAgLyogREZHVmFyaWFibGVFdmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
QTBBMjQxNzA5NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRUEwQTMyMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdDb21tb25EYXRhLmgg
aW4gSGVhZGVycyAqLywKQEAgLTMyMDcsNiArMzI4Niw3IEBACiAJCQkJQkNCRTJDQUUxNEU5ODVB
QTAwMDU5M0FEIC8qIEdDQXNzZXJ0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzAx
NUE4RENFMjAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIyMzlEMUIxNjI2MkJERDAwNUFDNUZEIC8qIEdDVGhyZWFkLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRjIzNUJFMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlDMjExMjJFMjE1REQ5QUIzMDA3OTBFM0EgLyogR0NUaHJlYWRTaGFyZWREYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBMDE0Q0E3RENEMDA4NUYzQzYgLyogR2V0QnlJ
ZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxMzQxMzRGRjBBNjAwQUZBREI1IC8q
IEhhbmRsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjM3LDYgKzMzMTcsNyBAQAogCQkJCUJDMThD
NDE0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRjIzNUJENDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkNDRUZERTBGNDEzRjg5MDBGRDdGOUUgLyogSklUQ29k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNzc2QkYxNEZGMDAyQjAwMTAyMzMyIC8qIEpJVENv
bXBpbGF0aW9uRWZmb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkFGN0VGRTE2NUJBOTFGMDAw
Qzg0NTUgLyogSklURGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNTEsNiArMzMz
Miw3IEBACiAJCQkJQTc2RjU0QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQWN0aXZh
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQwNDgwMTMxMDIxQTFEOTAwOEU3RjAxIC8qIEpT
QVBJVmFsdWVXcmFwcGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJFNDE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE3MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0FycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxODBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBEMTdENzBF
OEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMzA4
LDkgKzMzOTAsMTEgQEAKIAkJCQlDMkNGMzlDMjE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFw
cGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzQ4MkI5MzExNjcxMTQ3MDAzQjA3MTIg
LyogSlNXZWFrT2JqZWN0TWFwUmVmUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MjU2
NjIxNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjIzNUJENjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1h
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3Jh
cHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzUxNUFFMjUzQjAwOEYzNjNF
IC8qIEp1bXBSZXBsYWNlbWVudFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1
QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNGRDhDOTMwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTcyRkZENjQxMzk5ODVBODAwRTUzNjVBIC8qIEtleXdvcmRMb29rdXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTk2OUEwNzJBMEVEMUNFNjkwMEYxRjY4MSAvKiBMYWJlbC5oIGluIEhlYWRl
cnMgKi8sCkBAIC0zMzQxLDYgKzM0MjUsNyBAQAogCQkJCTg2QzM2RUVBMEVFMTI4OUQwMEIzREY1
OSAvKiBNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZEM0IyQzYxMDE1NkJE
RTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFE
RDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEYyMzVCREUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxhdGlv
bkluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzRCMTRDMTZENDNFMEQwMDFDREE1QSAvKiBQ
b2x5bW9ycGhpY0FjY2Vzc1N0cnVjdHVyZUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2M0Iy
M0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMu
aCBpbiBIZWFkZXJzICovLApAQCAtMzM4MSw4ICszNDY2LDEwIEBACiAJCQkJQkMxOEM0NDUwRTE2
RjVDRDAwQjM0NDYwIC8qIE9iamVjdENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ0NjBFMTZGNUNEMDBCMzQ0NjAgLyogT2JqZWN0UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMjM1QkQ5MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAv
KiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAv
KiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCRDcxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRBcmd1bWVudExpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUyMjhF
RDE0MzZBQjI3MDAxOTZDNDggLyogT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NEIwRTE2RjVDRDAwQjM0NDYwIC8qIFBhcnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDA4LDYg
KzM0OTUsNyBAQAogCQkJCTBGRjcyOUMwMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdp
blN0YWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4QzE2NzU0ODMzMDBGOEFCNkUgLyog
UHJvZmlsZXJPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4RTE2NzU0ODNBMDBG
OEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVC
RTYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjEzOTEyQzE2NzcxQzNEMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdGQjYxMDAxMDQwQzM4QjAwMTdBMjg2IC8qIFByb3BlcnR5
RGVzY3JpcHRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkM5NTQzN0QwRUJBNzBGRDAwNzJCNkQz
IC8qIFByb3BlcnR5TWFwSGFzaFRhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTM0MjAsNiArMzUw
OCw3IEBACiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0
dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXRE
aXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1QkRCMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2
MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRF
NkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY2
MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8s
CkBAIC0zNDQ1LDYgKzM1MzQsNyBAQAogCQkJCUMyMTYwRkU3MTVGN0U5NUUwMDk0MkRGQyAvKiBT
bG90VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0OTQw
MDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJF
MDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291
cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtMzUxOSwxMSArMzYwOSwx
MyBAQAogCQkJCTBGQkUwRjc3MTZDMURCMTIwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQyQzkyNDE2RDAxRUU5MDBDNzgwM0YgLyogU3RydWN0
dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkMxNkQwMjhBRDAwOUU0RkQy
IC8qIFVudXNlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1QkREMTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAy
QkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjky
MTgxNkQwMkVCMjAwNTVBNURCIC8qIERGR0FsbG9jYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGQjkyMUExNkQwMkVDNTAwNTVBNURCIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZCOTIxQjE2RDAyRjAxMDA1NUE1REIgLyogREZHTm9kZUFsbG9jYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09T
UkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1QkVFMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFEMTZEMDJGMzAwMDU1QTVEQiAvKiBERkdTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGQjkyMUUxNkQwMkY0NzAwNTVBNURCIC8qIERGR1ZhcmlhZGljRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFGMTZEMDMzMDUwMDU1QTVEQiAvKiAo
bnVsbCkgaW4gSGVhZGVycyAqLywKQEAgLTM5MTcsMTEgKzQwMDksMTQgQEAKIAkJCQkwRjYyMDE3
OTE0M0ZDRDQ4MDA2OEI3N0MgLyogREZHQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjE2MDE1RDE1NjE5OEM5MDBDMjU4N0MgLyogREZHQXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0Mg
LyogREZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjM1QkQ1MTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzA5NzZFMTQ2OEFCNTEwMENGMjQ0MiAvKiBERkdBc3NlbWJseUhlbHBlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjM1QkQ4MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjEx
NDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCRDExNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTENBcmd1bWVudEdldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJDNTU3MDE0NzM4
RjM1MDAxMjFFNEYgLyogREZHQ29kZUJsb2Nrcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYw
RjE5RDE2QjcyQTA4MDA1REY5NUIgLyogREZHQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGM0IzQTFBMTUzRTY4RjIwMDNFRDBGRiAvKiBERkdDb25zdGFudEZvbGRpbmdQaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTM5MzMsMTIgKzQwMjgsMTQgQEAKIAkJCQkwRkJDMEFFNzE0OTZD
N0M0MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJD
RjM5QzExNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCREMxNTE1MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJEQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBE
RkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEyNzE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMQ29tbW9uVmFsdWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5RENCMTMyOERG
ODIwMDJCMkFENyAvKiBERkdKSVRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkYw
RjE5OTE2QjcyOUY2MDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyQkRDNEQxNTIyODE4NjAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkYwRjE5QzE2QjcyQTAzMDA1REY5NUIgLyogREZHTm9kZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NS
RXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQTU4MUJBMTUwRTk1MkMw
MEI5QTJEOSAvKiBERkdOb2RlRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0Yx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEODJFNTYxNDFEQUYwODAwMTc5Qzk0IC8qIERGR09TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICov
LApAQCAtMzk5OCw2ICs0MDk1LDcgQEAKIAkJCQkxNDI5RDkyRjBFRDIyRDcwMDBCODk2MTkgLyog
SklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QTkwRUQwMEVFN0Q1MUYwMEFCMzUwRCAvKiBK
SVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NTcwNkRFMTE4QTJCQ0YwMDU3
Rjg4RiAvKiBKSVRBcml0aG1ldGljMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVC
RUIxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2Q0M4NUEzMEVFNzlCNzQwMDI4ODY4MiAvKiBKSVRDYWxsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0NkZFNTEyMTFBNzEwNDMwMDg3QUU2NiAvKiBKSVRDYWxsMzJfNjQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDQxNjY3NjM1NDAwRDYxOTcxIC8qIEpJVENvZGUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC00MDE2LDYgKzQxMTQsNyBAQAogCQkJCTE0MDU2NkM0MTA3RUMyNTUw
MDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlEMDEwN0VDMzc2MDA0MjdBNDggLyogSlNBcnJheS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDIxMzU5QjBBNjc3RjRGMDBBODE5NUUgLyogSlNCYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMjM1QkU1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxi
YWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAw
MDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQwMzcs
NiArNDEzNiw3IEBACiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVj
dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Y5OTM2MDBGRDczMjUxMDBBMEIyRDAgLyog
SlNPTk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJERjE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1RjZFNjk1
MEU1QjVGOTcwMDkxRTg2MCAvKiBKU1Byb2ZpbGVyUHJpdmF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzI3RkY2QjBEQTMwOTIyMDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94
eS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQxMDUsMTEgKzQyMDUsMTQgQEAKIAkJCQkwRjlGQzhD
MzE0RTFCNUZFMDBENTJBRTAgLyogUG9seW1vcnBoaWNQdXRCeUlkTGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5NTc0MkY2NTBERDExRjVBMDAwOTE3RkIgLyogUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk5NUNENDU3NjBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRv
ci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJFMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVGb3JtYXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVBQjgzNTYwREE0M0MzMDAwQkM4
M0YzIC8qIFByb2ZpbGVOb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFEMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjM1
QkUxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9m
aWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTMxLDYgKzQyMzQs
NyBAQAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJEMzE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
NDJDNTEyMTUxQzA4M0QwMDQ2RDRFRiAvKiBSZWdFeHBNYXRjaGVzQXJyYXkuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQyODA4NDMxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0NDEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwUHJv
dG90eXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9u
IDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCwxMSBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICAsIG9mZnNldChvZmZzZXQpCiAgICAgICAgIHsKICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQWRkcmVzcyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEFkZHJlc3MoYmFzZSwgb2Zmc2V0ICsgYWRk
aXRpb25hbE9mZnNldCk7CisgICAgICAgIH0KIAogICAgICAgICBSZWdpc3RlcklEIGJhc2U7CiAg
ICAgICAgIGludDMyX3Qgb2Zmc2V0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9MaW5rQnVmZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9MaW5rQnVmZmVyLmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiAr
MTk5LDExIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGx5T2Zmc2V0KGxhYmVsLm1fbGFi
ZWwpLm1fb2Zmc2V0OwogICAgIH0KIAorICAgIHVuc2lnbmVkIG9mZnNldE9mKFBhdGNoYWJsZUp1
bXAganVtcCkKKyAgICB7CisgICAgICAgIHJldHVybiBhcHBseU9mZnNldChqdW1wLm1fanVtcC5t
X2xhYmVsKS5tX29mZnNldDsKKyAgICB9CisKICAgICAvLyBVcG9uIGNvbXBsZXRpb24gb2YgYWxs
IHBhdGNoaW5nICdGSU5BTElaRV9DT0RFKCknIHNob3VsZCBiZSBjYWxsZWQgb25jZSB0bwogICAg
IC8vIGNvbXBsZXRlIGdlbmVyYXRpb24gb2YgdGhlIGNvZGUuIEFsdGVybmF0aXZlbHksIGNhbGwK
ICAgICAvLyBmaW5hbGl6ZUNvZGVXaXRob3V0RGlzYXNzZW1ibHkoKSBkaXJlY3RseSBpZiB5b3Ug
aGF2ZSB5b3VyIG93biB3YXkgb2YKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgJKHJldmlzaW9uIDE0
ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJY
ODZDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtOTMsNiArOTMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIERvdWJsZUNvbmRpdGlvbkJpdHNfc2hvdWxkX25vdF9pbnRlcmZlcmVfd2l0aF9YODZBc3Nl
bWJsZXJfQ29uZGl0aW9uX2NvZGVzKTsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0
YWNrUG9pbnRlclJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplc3A7CisgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgZnJhbWVQb2ludGVyUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVicDsKIAog
I2lmIEVOQUJMRShKSVRfQ09OU1RBTlRfQkxJTkRJTkcpCiAgICAgc3RhdGljIGJvb2wgc2hvdWxk
QmxpbmRGb3JTcGVjaWZpY0FyY2godWludDMyX3QgdmFsdWUpIHsgcmV0dXJuIHZhbHVlID49IDB4
MDBmZmZmZmY7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0
cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsOCBA
QCB2b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPQorICAgICAgICAgICAgbm9kZS0+dmFyaWFi
bGVBY2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChp
c0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNB
dEhlYWQuYXJndW1lbnQoaSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHUFJJbmZvLmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OlJl
Z2lzdGVySUQgR1BSUmVnOwotI2RlZmluZSBJbnZhbGlkR1BSUmVnICgoR1BSUmVnKS0xKQorI2Rl
ZmluZSBJbnZhbGlkR1BSUmVnICgoOjpKU0M6OkRGRzo6R1BSUmVnKS0xKQogCiAjaWYgVVNFKEpT
VkFMVUU2NCkKIGNsYXNzIEpTVmFsdWVSZWdzIHsKQEAgLTM2Nyw3ICszNjcsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnaXN0ZXJGb3JJbmRleFtudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzXSA9IHsgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50
R1BSMiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSB9OwogICAgICAg
ICByZXR1cm4gcmVnaXN0ZXJGb3JJbmRleFtpbmRleF07CiAgICAgfQotCisgICAgCiAgICAgc3Rh
dGljIHVuc2lnbmVkIHRvSW5kZXgoR1BSUmVnIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChy
ZWcgIT0gSW52YWxpZEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R01pbmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcg
QEAgaW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIGNhc2UgUGhh
bnRvbUFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUKCFuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcodHlwZSkgJiYgIW5lZWRzT1NSRm9y
d2FyZFJld2lyaW5nKHR5cGUpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0ODA0
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjg3LDYgKzI4NywyNSBAQCBpbmxpbmUgTm9kZUZsYWdzIGRlZmF1bHRGbGFncyhO
b2RlVHlwZSBvCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBuZWVkc09TUkJhY2t3YXJkUmV3aXJp
bmcoTm9kZVR5cGUgb3ApCit7CisgICAgcmV0dXJuIG9wID09IFVJbnQzMlRvTnVtYmVyOworfQor
CitpbmxpbmUgYm9vbCBuZWVkc09TUkZvcndhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKK3sKKyAg
ICBzd2l0Y2ggKG9wKSB7CisgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgRm9yd2Fy
ZEludDMyVG9Eb3VibGU6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2FzZSBVSW50MzJU
b051bWJlcjoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxNDgwNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiwxNSArMzYsMTIgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAog
T1NSRXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3Vy
Y2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2
ZUpJVCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkK
LSAgICA6IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQorICAgIDogT1NSRXhpdEJhc2Uo
a2luZCwgaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCisgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNW
YWx1ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1f
cGF0Y2hhYmxlQ29kZU9mZnNldCgwKQotICAgICwgbV9jb2RlT3JpZ2luKGppdC0+bV9jb2RlT3Jp
Z2luRm9yT1NSKQotICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUobV9jb2RlT3JpZ2lu
KQogICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAgLCBtX3dhdGNocG9p
bnRJbmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgLCBtX2tp
bmQoa2luZCkKLSAgICAsIG1fY291bnQoMCkKICAgICAsIG1fc3RyZWFtSW5kZXgoc3RyZWFtSW5k
ZXgpCiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKIHsKQEAg
LTczLDU3ICs3MCwxNSBAQCB2b2lkIE9TUkV4aXQ6OmNvcnJlY3RKdW1wKExpbmtCdWZmZXImIGxp
CiAgICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihsYWJlbCk7
CiB9CiAKLWJvb2wgT1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93
KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQot
ewotICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5v
c3JFeGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRF
eGl0U2l0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRnJlcXVlbnRFeGl0
U2l0ZSBleGl0U2l0ZTsKLSAgICAKLSAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQp
IHsKLSAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVy
IHdoZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKLSAgICAgICAg
Ly8gdGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0
aWN1bGFyIGluc3RydWN0aW9uLgotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUo
bV9raW5kKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRl
KG1fY29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCk7Ci0gICAg
Ci0gICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxv
Y2sobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJl
cXVlbnRFeGl0U2l0ZShleGl0U2l0ZSk7Ci19Ci0KIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9y
d2FyZChCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJ
bmRleCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKLSAgICAvLyBDaGVj
ayB0aGF0IGVpdGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVj
ZWRpbmcgbm9kZSB3YXMgYQotICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29kZSBvcmln
aW4sIG9yIHRoYXQgd2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5LgotICAgIGlmICghQVNT
RVJUX0RJU0FCTEVECi0gICAgICAgICYmICF2YWx1ZVJlY292ZXJ5Ci0gICAgICAgICYmICFjdXJy
ZW50Tm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBi
bG9jay0+YXQobm9kZUluZGV4IC0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWws
IHNldExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0
TG9jYWwsIHNldExvY2FsLT5jb2RlT3JpZ2luID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsK
LSAgICB9Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIG5leHQgYnl0
ZWNvZGUgaW5zdHJ1Y3Rpb24uIEFsc28gdHJhY2sgdGhlIGxhc3QgbW92IGhpbnQKLSAgICAvLyBv
biB0aGlzIG5vZGUuCi0gICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrID0gbm9kZUluZGV4ICsgMTsK
LSAgICBOb2RlKiBub2RlID0gMDsKLSAgICBOb2RlKiBsYXN0TW92SGludCA9IDA7Ci0gICAgZm9y
ICg7OykgewotICAgICAgICBpZiAoaW5kZXhJbkJsb2NrID09IGJsb2NrLT5zaXplKCkpIHsKLSAg
ICAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5saW5lIHJldHVybi4gR2l2ZSB1cCBhbmQgZG8gYSBi
YWNrd2FyZHMgc3BlY3VsYXRpb24uIFRoaXMgaXMgc2FmZQotICAgICAgICAgICAgLy8gYmVjYXVz
ZSBhbiBpbmxpbmUgcmV0dXJuIGhhcyBpdHMgb3duIGJ5dGVjb2RlIGluZGV4IGFuZCBpdCdzIGFs
d2F5cyBzYWZlIHRvCi0gICAgICAgICAgICAvLyByZWV4ZWN1dGUgdGhhdCBieXRlY29kZS4KLSAg
ICAgICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOwotICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAg
ICAgICAgaWYgKG5vZGUtPmNvbnRhaW5zTW92SGludCgpICYmIG5vZGUtPmNoaWxkMSgpID09IGN1
cnJlbnROb2RlKQotICAgICAgICAgICAgbGFzdE1vdkhpbnQgPSBub2RlOwotICAgICAgICBpZiAo
bm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBpbmRleEluQmxvY2srKzsKLSAgICB9Ci0gICAgCisgICAgTm9kZSog
bm9kZTsKKyAgICBOb2RlKiBsYXN0TW92SGludDsKKyAgICBpZiAoIWRvU2VhcmNoRm9yRm9yd2Fy
ZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVy
eSwgbm9kZSwgbGFzdE1vdkhpbnQpKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NFUlQobm9k
ZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCiAgICAgbV9j
b2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAKICAgICBpZiAoIXZhbHVlUmVjb3Zl
cnkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24g
MTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRl
ICJERkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJE
RkdPU1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZh
bHVlUHJvZmlsZS5oIgpAQCAtODQsNyArODUsNyBAQCBwcml2YXRlOgogLy8KIC8vIFRoaXMgc3Ry
dWN0dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8g
Z29pbmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9TUkV4aXQgeworc3RydWN0IE9TUkV4
aXQgOiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVT
b3VyY2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwgdW5z
aWduZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7CiAg
ICAgCiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKQEAgLTkzLDIyICs5NCwxMCBA
QCBzdHJ1Y3QgT1NSRXhpdCB7CiAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3Zh
bHVlUHJvZmlsZTsKIAogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKLSAgICBD
b2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4
aXRQcm9maWxlOwogICAgIAogICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKICAgICB1bnNp
Z25lZCBtX3dhdGNocG9pbnRJbmRleDsKICAgICAKLSAgICBFeGl0S2luZCBtX2tpbmQ7Ci0gICAg
dWludDMyX3QgbV9jb3VudDsKLSAgICAKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVu
dEV4aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29k
ZUJsb2NrKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2luZElzQ291bnRh
YmxlKG1fa2luZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJsb2NrLCBwcm9maWxl
ZENvZGVCbG9jayk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1h
Y3JvQXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBn
ZXRQYXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7CiAgICAgQ29kZUxvY2F0aW9uSnVt
cCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwpAQCAtMTIwLDkgKzEw
OSw2IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAgICAK
ICAgICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlk
ZTsKLQotcHJpdmF0ZToKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRl
U2xvdyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9j
ayk7CiB9OwogCiBzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhp
dEJhc2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNs
dWRlICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKwor
Ym9vbCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENv
ZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQorewor
ICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5vc3JF
eGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0
U2l0ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRnJlcXVlbnRFeGl0U2l0
ZSBleGl0U2l0ZTsKKyAgICAKKyAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsK
KyAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdo
ZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKKyAgICAgICAgLy8g
dGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0aWN1
bGFyIGluc3RydWN0aW9uLgorICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9r
aW5kKTsKKyAgICB9IGVsc2UKKyAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCk7CisgICAgCisg
ICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJlcXVl
bnRFeGl0U2l0ZShleGl0U2l0ZSk7Cit9CisKK2Jvb2wgT1NSRXhpdEJhc2U6OmRvU2VhcmNoRm9y
Rm9yd2FyZENvbnZlcnNpb24oCisgICAgQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnRO
b2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsIGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKKyAgICBOb2Rl
KiYgbm9kZSwgTm9kZSomIGxhc3RNb3ZIaW50KQoreworICAgIC8vIENoZWNrIHRoYXQgZWl0aGVy
IHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdh
cyBhCisgICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3
ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3ZlcnkuCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQK
KyAgICAgICAgJiYgIWhhc1ZhbHVlUmVjb3ZlcnkKKyAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5j
b250YWluc01vdkhpbnQoKSkgeworICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChu
b2RlSW5kZXggLSAxKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwt
PmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0
TG9jYWwtPmNvZGVPcmlnaW4gPT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOworICAgIH0KKyAg
ICAKKyAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0
cnVjdGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAorICAgIC8vIG9uIHRoaXMgbm9k
ZS4KKyAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAxOworICAgIG5vZGUg
PSAwOworICAgIGxhc3RNb3ZIaW50ID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChp
bmRleEluQmxvY2sgPT0gYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBh
biBpbmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4g
VGhpcyBpcyBzYWZlCisgICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFz
IGl0cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAgICAg
ICAgIC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVjb2RlLgorICAgICAgICAgICAgQVNTRVJUKG5vZGUt
Pm9wKCkgPT0gSnVtcCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICBpZiAobm9kZS0+
Y29udGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCisgICAg
ICAgICAgICBsYXN0TW92SGludCA9IG5vZGU7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2lu
ICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGluZGV4SW5CbG9jaysrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdp
biAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFeGl0QmFzZV9oCisjZGVmaW5lIERGR09T
UkV4aXRCYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERG
R19KSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2Zp
bGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQmFzaWNC
bG9jazsKK3N0cnVjdCBOb2RlOworCisvLyBQcm92aWRlcyBmb3IgdGhlIE9TUiBleGl0IHByb2Zp
bGluZyBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgY29tbW9uIGJldHdlZW4gdGhlIERGRworLy8gYW5k
IHRoZSBGVEwuCisKK3N0cnVjdCBPU1JFeGl0QmFzZSB7CisgICAgT1NSRXhpdEJhc2UoRXhpdEtp
bmQga2luZCwgQ29kZU9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAg
ICAgICwgbV9jb3VudCgwKQorICAgICAgICAsIG1fY29kZU9yaWdpbihvcmlnaW4pCisgICAgICAg
ICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVpbnQzMl90IG1fY291bnQ7CisgICAgCisgICAg
Q29kZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JF
eGl0UHJvZmlsZTsKKworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUo
Q29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisg
ICAgeworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3VudGFibGUobV9raW5k
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRk
aW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2ZpbGVkQ29kZUJsb2Nr
KTsKKyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZl
cnNpb24gaXMgcmVhbGx5IG5lZWRlZC4KKyAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZl
cnNpb24oCisgICAgICAgIEJhc2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQg
bm9kZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgICAgIE5vZGUqJiBuZXh0QkNO
b2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJB
ZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2Rl
QmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpE
RkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdEJh
c2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXRDb21waWxlcjY0LmNwcAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Myw3
ICs2NTMsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAg
Ly8gMTYpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50
byByZWdUMC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQp
LCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQ2NChB
c3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5m
bzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIAogICAgIC8vIDE3KSBBbmQgZmluaXNoLgog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyLmNwcAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVk
ZSAiREZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5oIgogI2lu
Y2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
UmVwYXRjaEJ1ZmZlci5oIgpAQCAtNTQsMjAgKzU1LDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChF
eGVjU3RhdGUqIGV4ZWMpCiAgICAgdWludDMyX3QgZXhpdEluZGV4ID0gZ2xvYmFsRGF0YS0+b3Ny
RXhpdEluZGV4OwogICAgIE9TUkV4aXQmIGV4aXQgPSBjb2RlQmxvY2stPmdldEpJVENvZGUoKS0+
ZGZnKCktPm9zckV4aXRbZXhpdEluZGV4XTsKICAgICAKLSAgICAvLyBNYWtlIHN1cmUgYWxsIGNv
ZGUgb24gb3VyIGlubGluZSBzdGFjayBpcyBKSVQgY29tcGlsZWQuIFRoaXMgaXMgbmVjZXNzYXJ5
IHNpbmNlCi0gICAgLy8gd2UgbWF5IG9wdCB0byBpbmxpbmUgYSBjb2RlIGJsb2NrIGV2ZW4gYmVm
b3JlIGl0IGhhZCBldmVyIGJlZW4gY29tcGlsZWQgYnkgdGhlCi0gICAgLy8gSklULCBidXQgb3Vy
IE9TUiBleGl0IGluZnJhc3RydWN0dXJlIGN1cnJlbnRseSBvbmx5IHdvcmtzIGlmIHRoZSB0YXJn
ZXQgb2YgdGhlCi0gICAgLy8gT1NSIGV4aXQgaXMgSklUIGNvZGUuIFRoaXMgY291bGQgYmUgY2hh
bmdlZCBzaW5jZSB0aGVyZSBpcyBub3RoaW5nIHBhcnRpY3VsYXJseQotICAgIC8vIGhhcmQgYWJv
dXQgZG9pbmcgYW4gT1NSIGV4aXQgaW50byB0aGUgaW50ZXJwcmV0ZXIsIGJ1dCBmb3Igbm93IHRo
aXMgc2VlbXMgdG8gbWFrZQotICAgIC8vIHNlbnNlIGluIHRoYXQgaWYgd2UncmUgT1NSIGV4aXRp
bmcgZnJvbSBpbmxpbmVkIGNvZGUgb2YgYSBERkcgY29kZSBibG9jaywgdGhlbgotICAgIC8vIHBy
b2JhYmx5IGl0J3MgYSBnb29kIHNpZ24gdGhhdCB0aGUgdGhpbmcgd2UncmUgZXhpdGluZyBpbnRv
IGlzIGhvdC4gRXZlbiBtb3JlCi0gICAgLy8gaW50ZXJlc3RpbmdseSwgc2luY2UgdGhlIGNvZGUg
d2FzIGlubGluZWQsIGl0IG1heSBuZXZlciBvdGhlcndpc2UgZ2V0IEpJVAotICAgIC8vIGNvbXBp
bGVkIHNpbmNlIHRoZSBhY3Qgb2YgaW5saW5pbmcgaXQgbWF5IGVuc3VyZSB0aGF0IGl0IG90aGVy
d2lzZSBuZXZlciBydW5zLgotICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5t
X2NvZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAgICAgICBzdGF0aWNfY2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJs
ZS5nZXQoKSkKLSAgICAgICAgICAgIC0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCkK
LSAgICAgICAgICAgIC0+aml0Q29tcGlsZShleGVjKTsKLSAgICB9CisgICAgcHJlcGFyZUNvZGVP
cmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICAKICAgICAvLyBD
b21wdXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgogICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+
IG9wZXJhbmRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIAotdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JF
eGl0JiBleGl0KQordm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKICAgICBqaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoMSksIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZleGl0Lm1f
Y291bnQpKTsKICAgICAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKEND
YWxsSGVscGVycyYgaml0LAogICAgIGRvbmVBZGp1c3RpbmcubGluaygmaml0KTsKIH0KIAotdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0
JiBleGl0KQordm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBj
b25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEFTU0VS
VChqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMo
Q0NhbGxIZWxwZXJzCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxz
ZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKIH0KIAotdm9pZCBh
ZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXQmIGV4
aXQpCit2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3Qg
T1NSRXhpdEJhc2UmIGV4aXQpCiB7CiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0z
MihleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAog
CiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQgaGFuZGxlRXhpdENvdW50
cyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0Jik7Ci12b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdCYpOwotdm9pZCBhZGp1c3RBbmRKdW1w
VG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdCYpOwordm9pZCBoYW5kbGVFeGl0
Q291bnRzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7Cit2b2lkIHJlaWZ5SW5s
aW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKK3ZvaWQg
YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdP
U1JFeGl0UHJlcGFyYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIHByZXBhcmVD
b2RlT3JpZ2luRm9yT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIENvZGVPcmlnaW4gY29kZU9yaWdp
bikKK3sKKyAgICBmb3IgKDsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4g
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIHN0YXRpY19j
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVj
dXRhYmxlLmdldCgpKQorICAgICAgICAgICAgLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3Ry
dWN0KQorICAgICAgICAgICAgLT5qaXRDb21waWxlKGV4ZWMpOworICAgIH0KK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFBy
ZXBhcmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkV4aXRQcmVw
YXJhdGlvbl9oCisjZGVmaW5lIERGR09TUkV4aXRQcmVwYXJhdGlvbl9oCisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVPcmlnaW4u
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBNYWtlIHN1cmUgYWxs
IGNvZGUgb24gb3VyIGlubGluZSBzdGFjayBpcyBKSVQgY29tcGlsZWQuIFRoaXMgaXMgbmVjZXNz
YXJ5IHNpbmNlCisvLyB3ZSBtYXkgb3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sgZXZlbiBiZWZv
cmUgaXQgaGFkIGV2ZXIgYmVlbiBjb21waWxlZCBieSB0aGUKKy8vIEpJVCwgYnV0IG91ciBPU1Ig
ZXhpdCBpbmZyYXN0cnVjdHVyZSBjdXJyZW50bHkgb25seSB3b3JrcyBpZiB0aGUgdGFyZ2V0IG9m
IHRoZQorLy8gT1NSIGV4aXQgaXMgSklUIGNvZGUuIFRoaXMgY291bGQgYmUgY2hhbmdlZCBzaW5j
ZSB0aGVyZSBpcyBub3RoaW5nIHBhcnRpY3VsYXJseQorLy8gaGFyZCBhYm91dCBkb2luZyBhbiBP
U1IgZXhpdCBpbnRvIHRoZSBpbnRlcnByZXRlciwgYnV0IGZvciBub3cgdGhpcyBzZWVtcyB0byBt
YWtlCisvLyBzZW5zZSBpbiB0aGF0IGlmIHdlJ3JlIE9TUiBleGl0aW5nIGZyb20gaW5saW5lZCBj
b2RlIG9mIGEgREZHIGNvZGUgYmxvY2ssIHRoZW4KKy8vIHByb2JhYmx5IGl0J3MgYSBnb29kIHNp
Z24gdGhhdCB0aGUgdGhpbmcgd2UncmUgZXhpdGluZyBpbnRvIGlzIGhvdC4gRXZlbiBtb3JlCisv
LyBpbnRlcmVzdGluZ2x5LCBzaW5jZSB0aGUgY29kZSB3YXMgaW5saW5lZCwgaXQgbWF5IG5ldmVy
IG90aGVyd2lzZSBnZXQgSklUCisvLyBjb21waWxlZCBzaW5jZSB0aGUgYWN0IG9mIGlubGluaW5n
IGl0IG1heSBlbnN1cmUgdGhhdCBpdCBvdGhlcndpc2UgbmV2ZXIgcnVucy4KK3ZvaWQgcHJlcGFy
ZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KEV4ZWNTdGF0ZSosIENvZGVPcmlnaW4pOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlm
IC8vIERGR09TUkV4aXRQcmVwYXJhdGlvbl9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzc3LDcgKzE3NzcsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjaGVja0Fy
Z3VtZW50VHlwZXMoCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgCiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2Fs
KCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSB2YXJpYWJsZUFjY2Vz
c0RhdGEtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlw
ZSA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKIAogICAg
ICAgICBKU1ZhbHVlU291cmNlIHZhbHVlU291cmNlID0gSlNWYWx1ZVNvdXJjZShKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAxNDgwNDcpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzMSw3ICsxMzEsNyBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNl
KEludDMySW5KU1N0YWNrKTsKLSAgICAgICAgaWYgKGlzQXJyYXlTcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSB8fCBpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKKyAgICAgICAgaWYgKGlzQ2Vs
bFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQogICAgICAgICAgICAgcmV0dXJuIFZhbHVlU291cmNl
KENlbGxJbkpTU3RhY2spOwogICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGlj
dGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQm9vbGVhbkluSlNTdGFjayk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVF
dmVudFN0cmVhbS5jcHAJKHJldmlzaW9uIDE0ODA0NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNCw3
ICsyMTQsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KAogICAgICAg
ICAgICAgCiAgICAgICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CiAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGlmIChub2RlICYmIG5vZGUtPm9wKCkgPT0gVUludDMyVG9OdW1iZXIpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlICYmIG5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyhub2RlLT5vcCgp
KSkgewogICAgICAgICAgICAgICAgIE1pbmlmaWVkSUQgaWQgPSBub2RlLT5jaGlsZDEoKTsKICAg
ICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudFJlY292ZXJ5KHZhbHVlUmVjb3Zlcmll
c1tpXSwgY29kZUJsb2NrLCBncmFwaC5hdChpZCkpKQogICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKQEAgLTI1Nyw2ICsyNTcsNyBAQCB2b2lkIFZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29u
c3RydWN0KAogICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlQXNJbnQzMklEID0gaWQ7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmVlZHNPU1JGb3J3YXJkUmV3aXJp
bmcobm9kZS0+b3AoKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExBYmJyZXZpYXRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTgwLDkgKzgwLDE0IEBAIHN0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0VHlwZShMVHlwZSBl
bGUKIH0KIAogZW51bSBWYXJpYWRpY2l0eSB7IE5vdFZhcmlhZGljLCBWYXJpYWRpYyB9Owotc3Rh
dGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUqIHBh
cmFtVHlwZXMsIHVuc2lnbmVkIHBhcmFtQ291bnQsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5KQor
c3RhdGljIGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgY29uc3Qg
TFR5cGUqIHBhcmFtVHlwZXMsIHVuc2lnbmVkIHBhcmFtQ291bnQsIFZhcmlhZGljaXR5IHZhcmlh
ZGljaXR5KQogewotICAgIHJldHVybiBMTFZNRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFt
VHlwZXMsIHBhcmFtQ291bnQsIHZhcmlhZGljaXR5ID09IFZhcmlhZGljKTsKKyAgICByZXR1cm4g
TExWTUZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBjb25zdF9jYXN0PExUeXBlKj4ocGFyYW1UeXBl
cyksIHBhcmFtQ291bnQsIHZhcmlhZGljaXR5ID09IFZhcmlhZGljKTsKK30KK3RlbXBsYXRlPHR5
cGVuYW1lIFZlY3RvclR5cGU+CitpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVy
blR5cGUsIGNvbnN0IFZlY3RvclR5cGUmIHZlY3RvciwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkg
PSBOb3RWYXJpYWRpYykKK3sKKyAgICByZXR1cm4gZnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHZl
Y3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpLCB2YXJpYWRpY2l0eSk7CiB9CiBzdGF0aWMgaW5s
aW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBWYXJpYWRpY2l0eSB2YXJp
YWRpY2l0eSA9IE5vdFZhcmlhZGljKQogewpAQCAtOTgsNiArMTAzLDggQEAgc3RhdGljIGlubGlu
ZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcgogICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0
dXJuVHlwZSwgcGFyYW1UeXBlcywgMiwgdmFyaWFkaWNpdHkpOwogfQogCitzdGF0aWMgaW5saW5l
IExUeXBlIHR5cGVPZihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIExMVk1UeXBlT2YodmFsdWUpOyB9
CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbWRLaW5kSUQoY29uc3QgY2hhciogc3RyaW5nKSB7
IHJldHVybiBMTFZNR2V0TURLaW5kSUQoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7IH0KIHN0YXRp
YyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZywgdW5zaWduZWQgbGVu
Z3RoKSB7IHJldHVybiBMTFZNTURTdHJpbmcoc3RyaW5nLCBsZW5ndGgpOyB9CiBzdGF0aWMgaW5s
aW5lIExWYWx1ZSBtZFN0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIG1kU3RyaW5n
KHN0cmluZywgc3RybGVuKHN0cmluZykpOyB9CkBAIC0xNTEsOSArMTU4LDE0IEBAIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkSW50Q2FzdChMQnVpbGQKIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1
aWxkSW50VG9QdHIoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7
IHJldHVybiBMTFZNQnVpbGRJbnRUb1B0cihidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFB0clRvSW50KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1
ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkUHRyVG9JbnQoYnVpbGRlciwg
dmFsdWUsIHR5cGUsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJQ21wKExCdWls
ZGVyIGJ1aWxkZXIsIExJbnRQcmVkaWNhdGUgY29uZCwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdo
dCkgeyByZXR1cm4gTExWTUJ1aWxkSUNtcChidWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCwgIiIp
OyB9Ci1zdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZh
bHVlIGZ1bmN0aW9uLCBMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51bUFyZ3MpCitzdGF0aWMgaW5s
aW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBj
b25zdCBMVmFsdWUqIGFyZ3MsIHVuc2lnbmVkIG51bUFyZ3MpCit7CisgICAgcmV0dXJuIExMVk1C
dWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGNvbnN0X2Nhc3Q8TFZhbHVlKj4oYXJncyksIG51
bUFyZ3MsICIiKTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFZlY3RvclR5cGU+CitpbmxpbmUgTFZh
bHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IFZl
Y3RvclR5cGUmIHZlY3RvcikKIHsKLSAgICByZXR1cm4gTExWTUJ1aWxkQ2FsbChidWlsZGVyLCBm
dW5jdGlvbiwgYXJncywgbnVtQXJncywgIiIpOworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIHZlY3Rvci5iZWdpbigpLCB2ZWN0b3Iuc2l6ZSgpKTsKIH0KIHN0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24p
CiB7CkBAIC0xNjgsNiArMTgwLDggQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExC
dWlsZGVyIAogICAgIExWYWx1ZSBhcmdzW10gPSB7IGFyZzEsIGFyZzIgfTsKICAgICByZXR1cm4g
YnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCAyKTsKIH0KK2VudW0gVGFpbENhbGxN
b2RlIHsgSXNOb3RUYWlsQ2FsbCwgSXNUYWlsQ2FsbCB9Oworc3RhdGljIGlubGluZSB2b2lkIHNl
dFRhaWxDYWxsKExWYWx1ZSBjYWxsLCBUYWlsQ2FsbE1vZGUgbW9kZSkgeyBMTFZNU2V0VGFpbENh
bGwoY2FsbCwgbW9kZSA9PSBJc1RhaWxDYWxsKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRFeHRyYWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIExMVk1CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGlu
ZGV4LCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7
IHJldHVybiBMTFZNQnVpbGRTZWxlY3QoYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFr
ZW4sICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRCcihMQnVpbGRlciBidWlsZGVy
LCBMQmFzaWNCbG9jayBkZXN0aW5hdGlvbikgeyByZXR1cm4gTExWTUJ1aWxkQnIoYnVpbGRlciwg
ZGVzdGluYXRpb24pOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1
bWVudEdldHRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDQXJndW1lbnRHZXR0ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTENBcmd1bWVudEdldHRlci5oIgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNp
bmcgbmFtZXNwYWNlIERGRzsKKwordm9pZCBDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0QW5kQm94
KFZhbHVlRm9ybWF0IGZvcm1hdCwgR1BSUmVnIGRlc3RpbmF0aW9uLCBHUFJSZWcgc2NyYXRjaCkK
K3sKKyAgICBpZiAoc2NyYXRjaCA9PSBJbnZhbGlkR1BSUmVnKSB7CisgICAgICAgIGlmIChkZXN0
aW5hdGlvbiA9PSBHUFJJbmZvOjpub25BcmdHUFIwKQorICAgICAgICAgICAgc2NyYXRjaCA9IEdQ
UkluZm86Om5vbkFyZ0dQUjE7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNjcmF0Y2ggPSBH
UFJJbmZvOjpub25BcmdHUFIwOworICAgIH0KKyAgICAKKyAgICBzd2l0Y2ggKGZvcm1hdCkgewor
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjogeworICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0
aW9uKTsKKyAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIs
IGRlc3RpbmF0aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAg
Y2FzZSBWYWx1ZUZvcm1hdFVJbnQzMjogeworICAgICAgICBsb2FkTmV4dDMyKGRlc3RpbmF0aW9u
KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgaXNJbnQgPSBtX2ppdC5icmFuY2gzMigK
KyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsCisgICAgICAg
ICAgICBkZXN0aW5hdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSk7CisgICAg
ICAgICAgICAKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZVRvNjQoRlBSSW5mbzo6ZnBSZWdUMCwg
c2NyYXRjaCk7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGRlc3RpbmF0aW9u
LCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZw
UmVnVDAsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRj
aCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgICAgIAorICAgICAgICBpc0lu
dC5saW5rKCZtX2ppdCk7CisgICAgICAgIG1faml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICAKKyAgICAgICAgZG9uZS5saW5r
KCZtX2ppdCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2Ug
VmFsdWVGb3JtYXRCb29sZWFuOiB7CisgICAgICAgIGxvYWROZXh0OChkZXN0aW5hdGlvbik7Cisg
ICAgICAgIG1faml0Lm9yMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihWYWx1ZUZhbHNl
KSwgZGVzdGluYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAg
ICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1ZTogeworICAgICAgICBsb2FkTmV4dDY0KGRlc3RpbmF0
aW9uKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1
ZUZvcm1hdERvdWJsZTogeworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpm
cFJlZ1QwLCBzY3JhdGNoKTsKKyAgICAgICAgbG9hZE5leHREb3VibGUoRlBSSW5mbzo6ZnBSZWdU
MCk7CisgICAgICAgIG1faml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBkZXN0aW5hdGlv
bik7CisgICAgICAgIG1faml0Lm1vdmU2NFRvRG91YmxlKHNjcmF0Y2gsIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdl
dHRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3Vt
ZW50R2V0dGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENBcmd1bWVudEdldHRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMQ0Fy
Z3VtZW50R2V0dGVyX2gKKyNkZWZpbmUgRlRMQ0FyZ3VtZW50R2V0dGVyX2gKKworI2luY2x1ZGUg
PHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdB
c3NlbWJseUhlbHBlcnMuaCIKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIFRoaXMgY3VycmVudGx5IG9ubHkgdW5kZXJz
dGFuZHMgaG93IHRvIGdldCBhcmd1bWVudHMgb24gWDg2LTY0IGNkZWNsLiBUaGlzIGlzIGFsc28K
Ky8vIG5vdCBwYXJ0aWN1bGFybHkgZWZmaWNpZW50LiBJdCB3aWxsIGdlbmVyYXRlIHNvbWUgcmVk
dW5kYW50IG1vdmVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZWdpc3RlcktpbmQ+Citib29sIGlz
QXJndW1lbnRSZWdpc3Rlcih0eXBlbmFtZSBSZWdpc3RlcktpbmQ6OlJlZ2lzdGVyVHlwZSByZWcp
Cit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IFJlZ2lzdGVyS2luZDo6bnVtYmVyT2ZB
cmd1bWVudFJlZ2lzdGVyczsgKytpKSB7CisgICAgICAgIGlmIChSZWdpc3RlcktpbmQ6OnRvQXJn
dW1lbnRSZWdpc3RlcihpKSA9PSByZWcpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitjbGFzcyBDQXJndW1lbnRHZXR0ZXIgeworcHVibGlj
OgorICAgIC8vIFBlZWsgb2Zmc2V0IGlzIHRoZSBudW1iZXIgb2YgdGhpbmdzIG9uIHRoZSBzdGFj
ayBiZWxvdyB0aGUgZmlyc3QgYXJndW1lbnQuCisgICAgLy8gSXQgd2lsbCBiZSAxIGlmIHlvdSBo
YXZlbid0IHB1c2hlZCBvciBwb3BwZWQgYWZ0ZXIgdGhlIGNhbGw7IGkuZS4gdGhlIG9ubHkKKyAg
ICAvLyB0aGluZyBpcyB0aGUgcmV0dXJuIGFkZHJlc3MuCisgICAgQ0FyZ3VtZW50R2V0dGVyKERG
Rzo6QXNzZW1ibHlIZWxwZXJzJiBqaXQsIGludCBwZWVrT2Zmc2V0ID0gMSkKKyAgICAgICAgOiBt
X2ppdChqaXQpCisgICAgICAgICwgbV9wZWVrT2Zmc2V0KHBlZWtPZmZzZXQpCisgICAgICAgICwg
bV9ncHJBcmd1bWVudEluZGV4KDApCisgICAgICAgICwgbV9mcHJBcmd1bWVudEluZGV4KDApCisg
ICAgICAgICwgbV9zdGFja0FyZ3VtZW50SW5kZXgoMCkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZvaWQgbG9hZE5leHQ4KERGRzo6R1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKCFpc0FyZ3VtZW50UmVnaXN0ZXI8REZHOjpHUFJJbmZvPihkZXN0aW5hdGlvbikpOwor
ICAgICAgICBpZiAobV9ncHJBcmd1bWVudEluZGV4IDwgREZHOjpHUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKERGRzo6R1BSSW5mbzo6
dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZ3ByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24pOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5s
b2FkOChuZXh0QWRkcmVzcygpLCBkZXN0aW5hdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQg
bG9hZE5leHQzMihERkc6OkdQUlJlZyBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VS
VCghaXNBcmd1bWVudFJlZ2lzdGVyPERGRzo6R1BSSW5mbz4oZGVzdGluYXRpb24pKTsKKyAgICAg
ICAgaWYgKG1fZ3ByQXJndW1lbnRJbmRleCA8IERGRzo6R1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVu
dFJlZ2lzdGVycykgeworICAgICAgICAgICAgbV9qaXQubW92ZShERkc6OkdQUkluZm86OnRvQXJn
dW1lbnRSZWdpc3RlcihtX2dwckFyZ3VtZW50SW5kZXgrKyksIGRlc3RpbmF0aW9uKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgbV9qaXQubG9hZDMy
KG5leHRBZGRyZXNzKCksIGRlc3RpbmF0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2Fk
TmV4dDY0KERGRzo6R1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFp
c0FyZ3VtZW50UmVnaXN0ZXI8REZHOjpHUFJJbmZvPihkZXN0aW5hdGlvbikpOworICAgICAgICBp
ZiAobV9ncHJBcmd1bWVudEluZGV4IDwgREZHOjpHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVn
aXN0ZXJzKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKERGRzo6R1BSSW5mbzo6dG9Bcmd1bWVu
dFJlZ2lzdGVyKG1fZ3ByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkNjQobmV4
dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0
UHRyKERGRzo6R1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgbG9hZE5leHQ2NChk
ZXN0aW5hdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZE5leHREb3VibGUoREZHOjpG
UFJSZWcgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoCisgICAgICAgICAgICAh
aXNBcmd1bWVudFJlZ2lzdGVyPERGRzo6RlBSSW5mbz4oZGVzdGluYXRpb24pCisgICAgICAgICAg
ICB8fCBkZXN0aW5hdGlvbiA9PSBERkc6OkZQUkluZm86OmFyZ3VtZW50RlBSMCk7CisgICAgICAg
IAorICAgICAgICBpZiAobV9mcHJBcmd1bWVudEluZGV4IDwgREZHOjpGUFJJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKERGRzo6
RlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZnByQXJndW1lbnRJbmRleCsrKSwgZGVzdGlu
YXRpb24pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBtX2ppdC5sb2FkRG91YmxlKG5leHRBZGRyZXNzKCksIGRlc3RpbmF0aW9uKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBsb2FkTmV4dEFuZEJveCgKKyAgICAgICAgVmFsdWVGb3JtYXQgZm9ybWF0
LCBERkc6OkdQUlJlZyBkZXN0aW5hdGlvbiwgREZHOjpHUFJSZWcgc2NyYXRjaCA9IEludmFsaWRH
UFJSZWcpOworCitwcml2YXRlOgorICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIG5leHRBZGRy
ZXNzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcygKKyAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwKKyAgICAgICAg
ICAgIChtX3BlZWtPZmZzZXQgKyBtX3N0YWNrQXJndW1lbnRJbmRleCsrKSAqIHNpemVvZih2b2lk
KikpOworICAgIH0KKyAgICAgICAgICAgIAorICAgIERGRzo6QXNzZW1ibHlIZWxwZXJzJiBtX2pp
dDsKKyAgICB1bnNpZ25lZCBtX3BlZWtPZmZzZXQ7CisgICAgdW5zaWduZWQgbV9ncHJBcmd1bWVu
dEluZGV4OworICAgIHVuc2lnbmVkIG1fZnByQXJndW1lbnRJbmRleDsKKyAgICB1bnNpZ25lZCBt
X3N0YWNrQXJndW1lbnRJbmRleDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMQ0FyZ3VtZW50R2V0dGVy
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFy
Z3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGVExFeGl0QXJndW1lbnQuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdEFyZ3VtZW50OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJhcmciLCBhcmd1bWVudCgp
LCAiIGFzICIsIGZvcm1hdCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdEFyZ3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0QXJndW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTEV4aXRBcmd1bWVudF9oCisjZGVmaW5lIEZUTEV4aXRBcmd1bWVudF9oCisKKyNpbmNsdWRl
IDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiRlRM
VmFsdWVGb3JtYXQuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRp
b24geworICAgIFZhbHVlRm9ybWF0IGZvcm1hdDsKKyAgICB1bnNpZ25lZCBhcmd1bWVudDsKK307
CisKK2NsYXNzIEV4aXRBcmd1bWVudCB7CitwdWJsaWM6CisgICAgRXhpdEFyZ3VtZW50KCkKKyAg
ICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24uZm9ybWF0ID0gSW52YWxpZFZhbHVlRm9ybWF0
OworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQoVmFsdWVGb3JtYXQgZm9ybWF0LCB1bnNp
Z25lZCBhcmd1bWVudCkKKyAgICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24uZm9ybWF0ID0g
Zm9ybWF0OworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmFyZ3VtZW50ID0gYXJndW1lbnQ7Cisg
ICAgfQorICAgIAorICAgIGV4cGxpY2l0IEV4aXRBcmd1bWVudChFeGl0QXJndW1lbnRSZXByZXNl
bnRhdGlvbiByZXByZXNlbnRhdGlvbikKKyAgICB7CisgICAgICAgIG1fcmVwcmVzZW50YXRpb24g
PSByZXByZXNlbnRhdGlvbjsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9PSBJbnZhbGlkVmFsdWVGb3JtYXQ7
IH0KKyAgICAKKyAgICBWYWx1ZUZvcm1hdCBmb3JtYXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uZm9ybWF0Owor
ICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBhcmd1bWVudCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoKnRoaXMpOworICAgICAgICByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5hcmd1bWVu
dDsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50IHdpdGhGb3JtYXQoVmFsdWVGb3JtYXQg
Zm9ybWF0KQorICAgIHsKKyAgICAgICAgcmV0dXJuIEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3Vt
ZW50KCkpOworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiByZXBy
ZXNlbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVwcmVzZW50YXRpb247IH0KKyAgICAKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhp
dEFyZ3VtZW50UmVwcmVzZW50YXRpb24gbV9yZXByZXNlbnRhdGlvbjsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYg
Ly8gRlRMRXhpdEFyZ3VtZW50X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRBcmd1bWVudEZvck9wZXJh
bmQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9leGl0
QXJndW1lbnQsICIgZm9yIHIiLCBtX29wZXJhbmQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudEZv
ck9wZXJhbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZF9oCisjZGVmaW5lIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmRfaAorCisjaW5j
bHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkZUTEV4aXRBcmd1bWVudC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K2NsYXNzIEV4aXRBcmd1bWVudEZvck9wZXJhbmQgeworcHVibGljOgorICAgIEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQoKQorICAgICAgICA6IG1fb3BlcmFuZCgtMSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIEV4aXRBcmd1bWVudEZvck9wZXJhbmQoRXhpdEFyZ3VtZW50IGV4aXRBcmd1bWVudCwg
aW50IG9wZXJhbmQpCisgICAgICAgIDogbV9leGl0QXJndW1lbnQoZXhpdEFyZ3VtZW50KQorICAg
ICAgICAsIG1fb3BlcmFuZChvcGVyYW5kKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhbV9leGl0QXJndW1lbnQ7IH0KKyAgICAKKyAgICBj
b25zdCBFeGl0QXJndW1lbnQmIGV4aXRBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhpdEFy
Z3VtZW50OyB9CisgICAgaW50IG9wZXJhbmQoKSBjb25zdCB7IHJldHVybiBtX29wZXJhbmQ7IH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisgICAgRXhpdEFyZ3VtZW50IG1fZXhpdEFyZ3VtZW50OworICAgIGludCBtX29wZXJhbmQ7Cit9
OworCitpbmxpbmUgYm9vbCBsZXNzZXJBcmd1bWVudEluZGV4KAorICAgIGNvbnN0IEV4aXRBcmd1
bWVudEZvck9wZXJhbmQmIGEsIGNvbnN0IEV4aXRBcmd1bWVudEZvck9wZXJhbmQmIGIpCit7Cisg
ICAgcmV0dXJuIGEuZXhpdEFyZ3VtZW50KCkuYXJndW1lbnQoKSA8IGIuZXhpdEFyZ3VtZW50KCku
YXJndW1lbnQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRM
aXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRB
cmd1bWVudExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdEFyZ3Vt
ZW50TGlzdF9oCisjZGVmaW5lIEZUTEV4aXRBcmd1bWVudExpc3RfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEFiYnJl
dmlhdGlvbnMuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordHlwZWRlZiBWZWN0b3I8TFZhbHVlLCAxNj4gRXhpdEFyZ3VtZW50
TGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZU
TF9KSVQpCisKKyNlbmRpZiAvLyBGVExFeGl0QXJndW1lbnRMaXN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2Vu
ZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQor
CisjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgorI2luY2x1ZGUgIkZUTFN0
YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6REZHOworCitFeGl0VGh1bmtHZW5lcmF0b3I6OkV4aXRUaHVua0dlbmVyYXRvcihT
dGF0ZSYgc3RhdGUpCisgICAgOiBDQ2FsbEhlbHBlcnMoJnN0YXRlLmdyYXBoLm1fZ2xvYmFsRGF0
YSwgc3RhdGUuZ3JhcGgubV9jb2RlQmxvY2spCit7Cit9CisKK0V4aXRUaHVua0dlbmVyYXRvcjo6
fkV4aXRUaHVua0dlbmVyYXRvcigpCit7Cit9CisKK3ZvaWQgRXhpdFRodW5rR2VuZXJhdG9yOjpl
bWl0VGh1bmsodW5zaWduZWQgaW5kZXgsIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8pCit7
CisgICAgaW5mby5tX3RodW5rTGFiZWwgPSBsYWJlbCgpOworICAgIG1vdmUoVHJ1c3RlZEltbTMy
KGluZGV4KSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgaW5mby5tX3RodW5rSnVtcCA9IHBh
dGNoYWJsZUp1bXAoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
RXhpdFRodW5rR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEZUTEV4aXRUaHVua0dlbmVyYXRvcl9oCisjZGVmaW5lIEZUTEV4aXRUaHVu
a0dlbmVyYXRvcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiREZHQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgU3RhdGU7CitzdHJ1Y3QgT1NSRXhpdENvbXBpbGF0
aW9uSW5mbzsKKworY2xhc3MgRXhpdFRodW5rR2VuZXJhdG9yIDogcHVibGljIERGRzo6Q0NhbGxI
ZWxwZXJzIHsKK3B1YmxpYzoKKyAgICBFeGl0VGh1bmtHZW5lcmF0b3IoU3RhdGUmIHN0YXRlKTsK
KyAgICB+RXhpdFRodW5rR2VuZXJhdG9yKCk7CisgICAgCisgICAgdm9pZCBlbWl0VGh1bmsodW5z
aWduZWQgaW5kZXgsIE9TUkV4aXRDb21waWxhdGlvbkluZm8mKTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8g
RlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFsdWUuaCIKKworI2lmIEVOQUJMRShGVExfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3ZvaWQgRXhpdFZhbHVlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICBjYXNlIEludmFsaWRFeGl0VmFsdWU6CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICBvdXQucHJp
bnQoIkRlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlQXJndW1lbnQ6
CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnQoIiwgZXhpdEFyZ3VtZW50KCksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICBvdXQu
cHJpbnQoIkNvbnN0YW50KCIsIGNvbnN0YW50KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2si
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoK
KyAgICAgICAgb3V0LnByaW50KCJJbkpTU3RhY2tBc0ludDMyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICBvdXQucHJpbnQo
IkluSlNTdGFja0FzRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExFeGl0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBGVExFeGl0VmFsdWVfaAorI2RlZmluZSBGVExFeGl0VmFsdWVfaAorCisjaW5jbHVkZSA8d3Rm
L1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTEV4aXRB
cmd1bWVudC5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBUaGlzIGlz
IGxpa2UgVmFsdWVSZWNvdmVyeSwgYnV0IHJlc3BlY3RzIHRoZSB3YXkgdGhhdCB0aGUgRlRMIGRv
ZXMgT1NSCisvLyBleGl0OiB0aGUgbGl2ZSBub24tY29uc3RhbnQgbm9uLWZsdXNoZWQgdmFsdWVz
IGFyZSBwYXNzZWQgYXMgYXJndW1lbnRzCisvLyB0byBhIG5vcmV0dXJuIHRhaWwgY2FsbC4gRXhp
dFZhbHVlIGlzIGhlbmNlIG1vc3RseSByZXNwb25zaWJsZSBmb3IKKy8vIHRlbGxpbmcgdXMgdGhl
IG1hcHBpbmcgYmV0d2VlbiBvcGVyYW5kcyBpbiBieXRlY29kZSBhbmQgdGhlIGFyZ3VtZW50cyB0
bworLy8gdGhlIGNhbGwuCisKK2VudW0gRXhpdFZhbHVlS2luZCB7CisgICAgSW52YWxpZEV4aXRW
YWx1ZSwKKyAgICBFeGl0VmFsdWVEZWFkLAorICAgIEV4aXRWYWx1ZUFyZ3VtZW50LAorICAgIEV4
aXRWYWx1ZUNvbnN0YW50LAorICAgIEV4aXRWYWx1ZUluSlNTdGFjaywKKyAgICBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDMyLAorICAgIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlCit9OworCitj
bGFzcyBFeGl0VmFsdWUgeworcHVibGljOgorICAgIEV4aXRWYWx1ZSgpCisgICAgICAgIDogbV9r
aW5kKEludmFsaWRFeGl0VmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBJbnZhbGlkRXhpdFZhbHVlOyB9CisgICAg
CisgICAgc3RhdGljIEV4aXRWYWx1ZSBkZWFkKCkKKyAgICB7CisgICAgICAgIEV4aXRWYWx1ZSBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVEZWFkOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGluSlNTdGFj
aygpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gRXhpdFZhbHVlSW5KU1N0YWNrOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KyAgICAKKyAgICBzdGF0aWMgRXhpdFZhbHVlIGluSlNTdGFja0FzSW50MzIoKQorICAgIHsKKyAg
ICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1
ZUluSlNTdGFja0FzSW50MzI7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAor
ICAgIHN0YXRpYyBFeGl0VmFsdWUgaW5KU1N0YWNrQXNEb3VibGUoKQorICAgIHsKKyAgICAgICAg
RXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUluSlNT
dGFja0FzRG91YmxlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBz
dGF0aWMgRXhpdFZhbHVlIGNvbnN0YW50KEpTVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBF
eGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlQ29uc3Rh
bnQ7CisgICAgICAgIHJlc3VsdC51LmNvbnN0YW50ID0gSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1
ZSBleGl0QXJndW1lbnQoY29uc3QgRXhpdEFyZ3VtZW50JiBhcmd1bWVudCkKKyAgICB7CisgICAg
ICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVB
cmd1bWVudDsKKyAgICAgICAgcmVzdWx0LnUuYXJndW1lbnQgPSBhcmd1bWVudC5yZXByZXNlbnRh
dGlvbigpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBFeGl0VmFs
dWVLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICAKKyAgICBib29sIGlz
RGVhZCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVEZWFkOyB9CisgICAgYm9v
bCBpc0luSlNTdGFja1NvbWVob3coKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIGNhc2UgRXhp
dFZhbHVlSW5KU1N0YWNrQXNJbnQzMjoKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tB
c0RvdWJsZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgaXNDb25z
dGFudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVDb25zdGFudDsgfQorICAg
IGJvb2wgaXNBcmd1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBFeGl0VmFsdWVBcmd1
bWVudDsgfQorICAgIAorICAgIEV4aXRBcmd1bWVudCBleGl0QXJndW1lbnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzQXJndW1lbnQoKSk7CisgICAgICAgIHJldHVybiBFeGl0QXJn
dW1lbnQodS5hcmd1bWVudCk7CisgICAgfQorICAgIAorICAgIEpTVmFsdWUgY29uc3RhbnQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQ29uc3RhbnQoKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjpkZWNvZGUodS5jb25zdGFudCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBFeGl0VmFsdWVLaW5k
IG1fa2luZDsKKyAgICB1bmlvbiB7CisgICAgICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9u
IGFyZ3VtZW50OworICAgICAgICBFbmNvZGVkSlNWYWx1ZSBjb25zdGFudDsKKyAgICB9IHU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKKworI2VuZGlmIC8vIEZUTEV4aXRWYWx1ZV9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEZvcm1hdHRlZFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkZUTEFi
YnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJGVExWYWx1ZUZvcm1hdC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKQEAgLTQxLDE4ICs0Miw2IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKIC8vIHVzZSB0aGlzIGluIHNpdHVhdGlvbnMgd2hlcmUgdGhlcmUg
aXMgbm8gZ29vZCB3YXkgdG8gc2F5IHdoYXQgbm9kZSB0aGUgdmFsdWUgY2FtZQogLy8gZnJvbS4K
IAotLy8gTm90ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWlsYXIgdG8gRGF0YUZvcm1hdCBp
biBvdGhlciBwYXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0Ci0vLyB1bmxpa2UgRGF0YUZvcm1hdCBh
bmQgbGlrZSBWYWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gVUludDMyIGFu
ZCBJbnQzMi4KLQotZW51bSBWYWx1ZUZvcm1hdCB7Ci0gICAgSW52YWxpZFZhbHVlRm9ybWF0LAot
ICAgIFZhbHVlRm9ybWF0SW50MzIsCi0gICAgVmFsdWVGb3JtYXRVSW50MzIsCi0gICAgVmFsdWVG
b3JtYXRCb29sZWFuLAotICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwKLSAgICBWYWx1ZUZvcm1hdERv
dWJsZQotfTsKLQogY2xhc3MgRm9ybWF0dGVkVmFsdWUgewogcHVibGljOgogICAgIEZvcm1hdHRl
ZFZhbHVlKCkKQEAgLTgxLDYgKzcwLDEzIEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIG1fdmFsdWU7
CiB9OwogCitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIG5vVmFsdWUoKSB7IHJldHVybiBG
b3JtYXR0ZWRWYWx1ZSgpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIGludDMyVmFs
dWUoTFZhbHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEludDMy
LCB2YWx1ZSk7IH0KK3N0YXRpYyBpbmxpbmUgRm9ybWF0dGVkVmFsdWUgdUludDMyVmFsdWUoTFZh
bHVlIHZhbHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdFVJbnQzMiwgdmFs
dWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIGJvb2xlYW5WYWx1ZShMVmFsdWUg
dmFsdWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0Qm9vbGVhbiwgdmFsdWUp
OyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIGpzVmFsdWVWYWx1ZShMVmFsdWUgdmFs
dWUpIHsgcmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0SlNWYWx1ZSwgdmFsdWUpOyB9
CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIGRvdWJsZVZhbHVlKExWYWx1ZSB2YWx1ZSkg
eyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXREb3VibGUsIHZhbHVlKTsgfQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkocmV2aXNpb24gMTQ4
MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNiArNDIsMTEgQEAgSklUQ29kZTo6fkpJVENvZGUoKQogICAgICAgICBM
TFZNRGlzcG9zZUV4ZWN1dGlvbkVuZ2luZShtX2VuZ2luZSk7CiB9CiAKK3ZvaWQgSklUQ29kZTo6
aW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29kZVJlZiBleGl0VGh1bmtzKQoreworICAgIG1fZXhpdFRo
dW5rcyA9IGV4aXRUaHVua3M7Cit9CisKIHZvaWQgSklUQ29kZTo6aW5pdGlhbGl6ZUNvZGUoTExW
TUV4ZWN1dGlvbkVuZ2luZVJlZiBlbmdpbmUsIENvZGVSZWYgZW50cnlwb2ludCkKIHsKICAgICBt
X2VuZ2luZSA9IGVuZ2luZTsKQEAgLTk3LDYgKzEwMiwxMSBAQCBib29sIEpJVENvZGU6OmNvbnRh
aW5zKHZvaWQqKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAorSklUQ29kZTo6Q29kZVB0ciBKSVRD
b2RlOjpleGl0VGh1bmtzKCkKK3sKKyAgICByZXR1cm4gbV9leGl0VGh1bmtzLmNvZGUoKTsKK30K
KwogSklUQ29kZSogSklUQ29kZTo6ZnRsKCkKIHsKICAgICByZXR1cm4gdGhpczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxNDgwNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsNiArMzIsNyBAQAogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkZU
TExMVk1IZWFkZXJzLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgogI2luY2x1ZGUgIkpJVENv
ZGUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDgsMTIgKzQ5LDE2
IEBAIHB1YmxpYzoKICAgICBzaXplX3Qgc2l6ZSgpOwogICAgIGJvb2wgY29udGFpbnModm9pZCop
OwogICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZUV4aXRUaHVua3MoQ29kZVJlZik7CiAgICAgdm9p
ZCBpbml0aWFsaXplQ29kZShMTFZNRXhlY3V0aW9uRW5naW5lUmVmLCBDb2RlUmVmIGVudHJ5cG9p
bnQpOwogICAgIAorICAgIENvZGVQdHIgZXhpdFRodW5rcygpOworICAgIAogICAgIEpJVENvZGUq
IGZ0bCgpOwogICAgIERGRzo6Q29tbW9uRGF0YSogZGZnQ29tbW9uKCk7CiAgICAgCiAgICAgREZH
OjpDb21tb25EYXRhIGNvbW1vbjsKKyAgICBTZWdtZW50ZWRWZWN0b3I8T1NSRXhpdCwgOD4gb3Ny
RXhpdDsKICAgICAKIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHVzZSBvdXIg
b3duIEpJVCBtZW1vcnkgYWxsb2NhdG9yLCBhbmQgd2Ugc2hvdWxkbid0IGhhdmUgdG8KQEAgLTYx
LDYgKzY2LDcgQEAgcHJpdmF0ZToKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTEzNjE5CiAgICAgTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiBtX2VuZ2luZTsK
ICAgICBDb2RlUmVmIG1fZW50cnlwb2ludDsKKyAgICBDb2RlUmVmIG1fZXhpdFRodW5rczsKIH07
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNDgwNDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsMTAgKzI4LDE1IEBACiAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAorI2luY2x1
ZGUgIkNvZGVCbG9ja1dpdGhKSVRUeXBlLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RTdGF0ZS5o
IgogI2luY2x1ZGUgIkZUTEFic3RyYWN0SGVhcFJlcG9zaXRvcnkuaCIKKyNpbmNsdWRlICJGVExF
eGl0VGh1bmtHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkZUTE91dHB1dC5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkZU
TFZhbHVlU291cmNlLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJh
dGlvbnMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDEsNyArNDYs
NyBAQCB1c2luZyBuYW1lc3BhY2UgREZHOwogLy8gVXNpbmcgdGhpcyBpbnN0ZWFkIG9mIHR5cGVD
aGVjaygpIGhlbHBzIHRvIHJlZHVjZSB0aGUgbG9hZCBvbiBMTFZNLCBieSBjcmVhdGluZwogLy8g
c2lnbmlmaWNhbnRseSBsZXNzIGRlYWQgY29kZS4KICNkZWZpbmUgRlRMX1RZUEVfQ0hFQ0sobG93
VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKSBkbyB7
IFwKLSAgICAgICAgTFZhbHVlIF9mdGNfbG93VmFsdWUgPSAobG93VmFsdWUpOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgX2Z0Y19sb3dWYWx1
ZSA9IChsb3dWYWx1ZSk7ICAgICAgICAgICAgICAgICAgICAgIFwKICAgICAgICAgRWRnZSBfZnRj
X2hpZ2hWYWx1ZSA9IChoaWdoVmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
ICAgICAgICAgU3BlY3VsYXRlZFR5cGUgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2ggPSAodHlwZXNQ
YXNzZWRUaHJvdWdoKTsgIFwKICAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNoZWNrKF9m
dGNfaGlnaFZhbHVlLCBfZnRjX3R5cGVzUGFzc2VkVGhyb3VnaCkpIFwKQEAgLTU3LDYgKzYyLDkg
QEAgcHVibGljOgogICAgICAgICAsIG1fbG9jYWxzQm9vbGVhbihPcGVyYW5kc0xpa2UsIHN0YXRl
LmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQpCiAgICAgICAgICwgbV9sb2NhbHMz
MihPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tzWzBdLT52YXJpYWJsZXNBdEhlYWQp
CiAgICAgICAgICwgbV9sb2NhbHM2NChPcGVyYW5kc0xpa2UsIHN0YXRlLmdyYXBoLm1fYmxvY2tz
WzBdLT52YXJpYWJsZXNBdEhlYWQpCisgICAgICAgICwgbV92YWx1ZVNvdXJjZXMoT3BlcmFuZHNM
aWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAs
IG1fbGFzdFNldE9wZXJhbmQoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICAg
ICAgLCBtX2V4aXRUaHVua0dlbmVyYXRvcihzdGF0ZSkKICAgICAgICAgLCBtX3N0YXRlKHN0YXRl
LmdyYXBoKQogICAgIHsKICAgICB9CkBAIC04MCwxNCArODgsMTQgQEAgcHVibGljOgogICAgICAg
ICAgICAgbV9sb2NhbHM2NFtpbmRleF0gPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1f
b3V0LmludDY0KTsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgbV9pbml0aWFsaXphdGlv
biA9IGFwcGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5mdW5jdGlvbik7CisgICAgICAgIG1fb3V0
Lmp1bXAobV9pbml0aWFsaXphdGlvbik7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1faW5pdGlh
bGl6YXRpb24pOworICAgICAgICAKICAgICAgICAgbV9jYWxsRnJhbWUgPSBtX291dC5wYXJhbSgw
KTsKICAgICAgICAgbV90YWdUeXBlTnVtYmVyID0gbV9vdXQuY29uc3RJbnQ2NChUYWdUeXBlTnVt
YmVyKTsKICAgICAgICAgbV90YWdNYXNrID0gbV9vdXQuY29uc3RJbnQ2NChUYWdNYXNrKTsKICAg
ICAgICAgCi0gICAgICAgIG1fYWJvcnRGdW5jdGlvbiA9IGNvbnN0SW50VG9QdHIoCi0gICAgICAg
ICAgICBtX291dC5jb25zdEludFB0cihhYm9ydCksCi0gICAgICAgICAgICBwb2ludGVyVHlwZShm
dW5jdGlvblR5cGUobV9vdXQudm9pZFR5cGUpKSk7Ci0gICAgICAgIAogICAgICAgICBmb3IgKEJs
b2NrSW5kZXggYmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNp
emUoKTsgKytibG9ja0luZGV4KSB7CiAgICAgICAgICAgICBtX2hpZ2hCbG9jayA9IG1fZ3JhcGgu
bV9ibG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CiAgICAgICAgICAgICBpZiAoIW1faGlnaEJsb2Nr
KQpAQCAtOTgsMTQgKzEwNiwxNyBAQCBwdWJsaWM6CiAgICAgICAgIAogICAgICAgICBjbG9zZU92
ZXJGbHVzaGVkTG9jYWxPcHMoKTsKIAotICAgICAgICBtX291dC5hcHBlbmRUbyhtX3Byb2xvZ3Vl
LCBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkpOworICAgICAgICBtX291
dC5hcHBlbmRUbyhtX2luaXRpYWxpemF0aW9uLCBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nr
c1swXS5nZXQoKSkpOwogCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKICAg
ICAgICAgCi0gICAgICAgIG1fb3V0Lmp1bXAobV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3Nb
MF0uZ2V0KCkpKTsKKyAgICAgICAgLy8gTGVhdmUgdGhlIGluaXRpYWxpemF0aW9uIGJsb2NrIGhh
bmdpbmcsIHNpbmNlIHdlIHdpbGwgYWRkIHRvIGl0IGxhdGVyLgogICAgICAgICAKICAgICAgICAg
Zm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAgICAgIGNvbXBpbGVCbG9jayhibG9j
a0luZGV4KTsKKyAgICAgICAgCisgICAgICAgIC8vIEFuZCBub3cgY29tcGxldGUgdGhlIGluaXRp
YWxpemF0aW9uIGJsb2NrLgorICAgICAgICBsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxp
emF0aW9uQmxvY2soKTsKIAogICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgp
KQogICAgICAgICAgICAgbV9mdGxTdGF0ZS5kdW1wU3RhdGUoImFmdGVyIGxvd2VyaW5nIik7CkBA
IC0xNTEsOCArMTYyLDkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIHRyYW5zZmVyQW5kQ2hl
Y2tBcmd1bWVudHMoKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFNldCB1cCB0aGUgT1NSIHN0
b3J5IGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTM2MjMKKyAgICAgICAgLy8gV2hpbGUgY2hlY2tpbmcgYXJndW1lbnRzLCBldmVyeXRo
aW5nIGlzIGluIHRoZSBzdGFjay4KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNv
dXJjZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgIAogICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1fZ3JhcGgubV9jb2RlQmxvY2stPm51bVBhcmFtZXRlcnMoKTsgKytpKSB7CiAgICAg
ICAgICAgICBOb2RlKiBub2RlID0gbV9ncmFwaC5tX2FyZ3VtZW50c1tpXTsKQEAgLTE3MCwyMSAr
MTgyLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94
SWZQb3NzaWJsZSgpKSB7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIXZhcmlhYmxl
LT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7
CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5h
cmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAg
ICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RJbnQz
Mihqc1ZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5
cGUsIGpzVmFsdWVWYWx1ZShqc1ZhbHVlKSwgbm9kZSwgaXNOb3RJbnQzMihqc1ZhbHVlKSk7CiAg
ICAgICAgICAgICAgICAgICAgIG1fb3V0LnNldCh1bmJveEludDMyKGpzVmFsdWUpLCBtX2xvY2Fs
czMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewotICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlLCBub2RlLCBpc05vdENlbGwo
anNWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBl
LCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90Q2VsbChqc1ZhbHVlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIG1fb3V0LnNldChqc1ZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFy
aWFibGUtPmxvY2FsKCkpKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkgewotICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBl
LCBqc1ZhbHVlLCBub2RlLCBpc05vdEJvb2xlYW4oanNWYWx1ZSkpOworICAgICAgICAgICAgICAg
ICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUoanNWYWx1ZSksIG5v
ZGUsIGlzTm90Qm9vbGVhbihqc1ZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnNl
dCh1bmJveEJvb2xlYW4oanNWYWx1ZSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
ICAgIH0KQEAgLTIxNiwxOSArMjI4LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIG1ha2UgSVIg
ZHVtcHMgZWFzaWVyIHRvIHJlYWQuCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Jsb2NrLCBt
X25leHRMb3dCbG9jayk7CiAgICAgICAgIAotICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRy
YWNrIHRoZSBPU1Igc2l0dWF0aW9uIGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgaW5pdGlhbGl6ZU9TUkV4aXRT
dGF0ZUZvckJsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBtX2ludDMyVmFsdWVzLmNsZWFyKCk7
CiAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5jbGVhcigpOwogICAgICAgICBtX2Jvb2xlYW5WYWx1
ZXMuY2xlYXIoKTsKICAgICAgICAgbV9zdG9yYWdlVmFsdWVzLmNsZWFyKCk7CisgICAgICAgIG1f
dGltZVRvTGl2ZS5jbGVhcigpOwogICAgICAgICAKICAgICAgICAgbV9zdGF0ZS5yZXNldCgpOwog
ICAgICAgICBtX3N0YXRlLmJlZ2luQmFzaWNCbG9jayhtX2hpZ2hCbG9jayk7CiAgICAgICAgIAot
ICAgICAgICBmb3IgKHVuc2lnbmVkIG5vZGVJbmRleCA9IDA7IG5vZGVJbmRleCA8IG1faGlnaEJs
b2NrLT5zaXplKCk7ICsrbm9kZUluZGV4KQotICAgICAgICAgICAgY29tcGlsZU5vZGUobm9kZUlu
ZGV4KTsKKyAgICAgICAgZm9yIChtX25vZGVJbmRleCA9IDA7IG1fbm9kZUluZGV4IDwgbV9oaWdo
QmxvY2stPnNpemUoKTsgKyttX25vZGVJbmRleCkKKyAgICAgICAgICAgIGNvbXBpbGVOb2RlKG1f
bm9kZUluZGV4KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTm9kZSh1bnNpZ25lZCBu
b2RlSW5kZXgpCkBAIC0yNDAsOSArMjUyLDYgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IGJvb2wgc2hvdWxkRXhlY3V0ZUVmZmVjdHMgPSBtX3N0YXRlLnN0YXJ0RXhlY3V0aW5nKG1fbm9k
ZSk7CiAgICAgICAgIAotICAgICAgICBpZiAoIW1fbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkKLSAg
ICAgICAgICAgIHJldHVybjsgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgbWFnaWMgaGVyZS4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICAKICAg
ICAgICAgbV9kaXJlY3Rpb24gPSAobV9ub2RlLT5mbGFncygpICYgTm9kZUV4aXRzRm9yd2FyZCkg
PyBGb3J3YXJkU3BlY3VsYXRpb24gOiBCYWNrd2FyZFNwZWN1bGF0aW9uOwogICAgICAgICAKICAg
ICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKQEAgLTI1OCw2ICsyNjcsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgIGNvbXBpbGVTZXRMb2NhbCgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTW92SGludDoKKyAgICAgICAgICAg
IGNvbXBpbGVNb3ZIaW50KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBab21i
aWVIaW50OgorICAgICAgICAgICAgY29tcGlsZVpvbWJpZUhpbnQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIE1vdkhpbnRBbmRDaGVjazoKICAgICAgICAgICAgIGNvbXBpbGVN
b3ZIaW50QW5kQ2hlY2soKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzUyLDYgKzM2NywxMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgCisgICAg
ICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3JhcGgsIG1fbm9kZSwgdXNlKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChtX25vZGUtPmhhc1Jlc3VsdCgpKQorICAgICAgICAgICAgbV90aW1l
VG9MaXZlLmFkZChtX25vZGUsIG1fbm9kZS0+YWRqdXN0ZWRSZWZDb3VudCgpKTsKKyAgICAgICAg
CiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0cykKICAgICAgICAgICAgIG1fc3RhdGUu
ZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKICAgICB9CkBAIC0zNjgsOCArMzg4LDEyIEBAIHBy
aXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0TG9jYWwoKQogICAgIHsKKyAgICAgICAg
Ly8gR2V0TG9jYWwgaXMgb25lIG9mIHRoZSBmZXcgbm9kZXMgdGhhdCBtYXkgYmUgbGVmdCBiZWhp
bmQsIHdpdGggIXNob3VsZEdlbmVyYXRlKCkuCisgICAgICAgIGlmICghbV9ub2RlLT5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAKICAgICAgICAgVmFyaWFi
bGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0g
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigp
OworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50
QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0
ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKTsKICAgICAgICAgCiAgICAg
ICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7CkBAIC00MjAsMTMgKzQ0NCwxMiBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZVNldExvY2FsKCkKICAgICB7CisgICAgICAg
IG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vz
c0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVBy
ZWRpY3Rpb24oKTsKICAgICAgICAgYm9vbCBuZWVkc0ZsdXNoaW5nID0gbV9mbHVzaGVkTG9jYWxP
cHMuY29udGFpbnMobV9ub2RlKTsKICAgICAgICAgCi0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUg
dGhlIE1vdkhpbnQgZm9yIE9TUi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICAKICAgICAgICAgaWYgKHZhcmlhYmxlLT5z
aG91bGRVbmJveElmUG9zc2libGUoKSkgewogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91
bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1l
bnQgZG91YmxlcyBpbiBGVEwuCkBAIC00MzgsMjEgKzQ2MSwyNyBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgewogICAgICAgICAgICAg
ICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICAg
ICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlhYmxlLT5sb2Nh
bCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgICAgICAg
ICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQuc3RvcmUz
Mih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1t2YXJpYWJsZS0+bG9jYWwoKV0gPSBWYWx1ZVNvdXJjZShJbnQz
MkluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0NlbGxTcGVjdWxhdGlvbihwcmVkaWN0
aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0NlbGwobV9ub2RlLT5j
aGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVlLCBtX2xvY2FsczY0Lm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVz
aGluZykKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAg
ICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgp
KSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgp
XSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9v
bGVhblNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0
KGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZh
cmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisg
ICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAg
bV9vdXQuc3RvcmU2NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzRm9yKHZh
cmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW3Zh
cmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICB9CkBAIC00NjAsMTggKzQ4OSwzMiBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUg
PSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFyaWFibGUtPmlz
Q2FwdHVyZWQoKSkgewogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zv
cih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbdmFyaWFi
bGUtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBtX291dC5zZXQodmFsdWUsIG1f
bG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwotICAgICAgICBpZiAobmVlZHNG
bHVzaGluZykKKyAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgIG1fb3V0
LnN0b3JlNjQodmFsdWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAg
ICAgIG1fdmFsdWVTb3VyY2VzW3ZhcmlhYmxlLT5sb2NhbCgpXSA9IFZhbHVlU291cmNlKFZhbHVl
SW5KU1N0YWNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVNb3ZI
aW50KCkKKyAgICB7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgY29tcGlsZVpvbWJpZUhpbnQoKQorICAgIHsKKyAgICAgICAgVmFyaWFibGVB
Y2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
bV9sYXN0U2V0T3BlcmFuZCA9IGRhdGEtPmxvY2FsKCk7CisgICAgICAgIG1fdmFsdWVTb3VyY2Vz
W2RhdGEtPmxvY2FsKCldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKICAgICB9CiAgICAg
CiAgICAgdm9pZCBjb21waWxlTW92SGludEFuZENoZWNrKCkKICAgICB7Ci0gICAgICAgIC8vIEZJ
WE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBvYnNlcnZlTW92SGlu
dChtX25vZGUpOwogICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgfQog
ICAgIApAQCAtNTAwLDcgKzU0Myw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZsb3cz
MihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKKyAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVy
Zmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7CiAgICAg
ICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1
bHQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBAIC01MjQsNyArNTY3LDcg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IG1fb3V0LnN1YldpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAg
ICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3Vs
dCwgMSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1f
b3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMu
YWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KQEAgLTU0Nyw3ICs1OTAsNyBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IG1fb3V0Lm11bChsZWZ0LCByaWdodCk7CiAgICAgICAgICAgICBlbHNl
IHsKICAgICAgICAgICAgICAgICBMVmFsdWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5tdWxXaXRo
T3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCAwLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFj
dFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9v
dXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtNTU2LDggKzU5OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgTEJh
c2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRv
KHNsb3dDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdh
dGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0LmludDMyWmVybykpOwot
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NU
aGFuKHJpZ2h0LCBtX291dC5pbnQzMlplcm8pKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
TmVnYXRpdmVaZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKGxlZnQsIG1fb3V0Lmlu
dDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFs
dWUoKSwgMCwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDMyWmVybykpOwogICAgICAg
ICAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKICAgICAgICAgICAgIH0KQEAgLTU4
NSw3ICs2MjgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGhhdmUg
YSBuZWdhdGUtd2l0aC1vdmVyZmxvdyBpbnRyaW5zaWMuIEhvcGVmdWxseSB0aGlzCiAgICAgICAg
ICAgICAgICAgLy8gZG9lcyB0aGUgdHJpY2ssIHRob3VnaC4KICAgICAgICAgICAgICAgICBMVmFs
dWUgb3ZlcmZsb3dSZXN1bHQgPSBtX291dC5zdWJXaXRoT3ZlcmZsb3czMihtX291dC5pbnQzMlpl
cm8sIHZhbHVlKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1f
b3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZs
b3dSZXN1bHQsIDEpKTsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFs
dWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC02
NTYsNyArNjk5LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSB2YWx1ZSA9
IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBzcGVjdWxhdGVGb3J3YXJkKAot
ICAgICAgICAgICAgT3ZlcmZsb3csIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5p
bnQzMlplcm8pLAorICAgICAgICAgICAgT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQubGVz
c1RoYW4odmFsdWUsIG1fb3V0LmludDMyWmVybyksCiAgICAgICAgICAgICBGb3JtYXR0ZWRWYWx1
ZShWYWx1ZUZvcm1hdFVJbnQzMiwgdmFsdWUpKTsKICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQo
bV9ub2RlLCB2YWx1ZSk7CiAgICAgfQpAQCAtNjc1LDcgKzcxOCw3IEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5zaXplKCkgPT0gMSkgewog
ICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBjZWxsLCAw
LAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAsCiAgICAg
ICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlLCB3ZWFrUG9pbnRlcihtX25vZGUt
PnN0cnVjdHVyZVNldCgpWzBdKSkpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBA
IC02OTIsNyArNzM1LDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
c3BlY3VsYXRlKAotICAgICAgICAgICAgZXhpdEtpbmQsIGNlbGwsIDAsCisgICAgICAgICAgICBl
eGl0S2luZCwganNWYWx1ZVZhbHVlKGNlbGwpLCAwLAogICAgICAgICAgICAgbV9vdXQubm90RXF1
YWwoc3RydWN0dXJlLCB3ZWFrUG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZVNldCgpLmxhc3QoKSkp
KTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwpAQCAtNzU1LDcgKzc5OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJyYXk6OkNv
bnRpZ3VvdXM6IHsKICAgICAgICAgICAgIGlmIChtX25vZGUtPmFycmF5TW9kZSgpLmlzSW5Cb3Vu
ZHMoKSkgewogICAgICAgICAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgICAgICAgICAg
T3V0T2ZCb3VuZHMsIDAsIDAsCisgICAgICAgICAgICAgICAgICAgIE91dE9mQm91bmRzLCBub1Zh
bHVlKCksIDAsCiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LmFib3ZlT3JFcXVhbCgKICAgICAg
ICAgICAgICAgICAgICAgICAgIGluZGV4LCBtX291dC5sb2FkMzIoc3RvcmFnZSwgbV9oZWFwcy5C
dXR0ZXJmbHlfcHVibGljTGVuZ3RoKSkpOwogICAgICAgICAgICAgICAgIApAQCAtNzY0LDcgKzgw
Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICBtX2hlYXBzLmluZGV4ZWRJ
bnQzMlByb3BlcnRpZXMgOiBtX2hlYXBzLmluZGV4ZWRDb250aWd1b3VzUHJvcGVydGllcywKICAg
ICAgICAgICAgICAgICAgICAgc3RvcmFnZSwgbV9vdXQuemVyb0V4dChpbmRleCwgbV9vdXQuaW50
UHRyKSwKICAgICAgICAgICAgICAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKG1fbm9kZS0+Y2hpbGQy
KCkpLm1fdmFsdWUpKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTG9hZEZyb21Ib2xlLCAw
LCAwLCBtX291dC5pc1plcm82NChyZXN1bHQpKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUo
TG9hZEZyb21Ib2xlLCBub1ZhbHVlKCksIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwogICAg
ICAgICAgICAgICAgIG1fanNWYWx1ZVZhbHVlcy5hZGQobV9ub2RlLCByZXN1bHQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQpAQCAtODY1LDYwICs5MDgsNjkgQEAgcHJp
dmF0ZToKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUJhY2t3YXJk
KEV4aXRLaW5kLCBMVmFsdWUsIE5vZGUqLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lk
IHNwZWN1bGF0ZUJhY2t3YXJkKAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1
ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAg
ICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAg
Ci0gICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBmYWlsQ2FzZSwgY29udGludWF0
aW9uKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWls
Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgZXhp
dC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEx
MzYyMwotICAgICAgICBtX291dC5jYWxsKG1fYWJvcnRGdW5jdGlvbik7Ci0gICAgICAgIG1fb3V0
LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOworICAgICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFs
dWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbiwgQmFja3dhcmRTcGVjdWxhdGlvbiwgRm9ybWF0
dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgc3BlY3VsYXRlRm9yd2FyZChFeGl0
S2luZCBraW5kLCBMVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxD
b25kaXRpb24sIGNvbnN0IEZvcm1hdHRlZFZhbHVlJikKKyAgICB2b2lkIHNwZWN1bGF0ZUZvcndh
cmQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2Rl
KiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAorICAgICAgICBjb25zdCBGb3JtYXR0
ZWRWYWx1ZSYgcmVjb3ZlcnkpCiAgICAgewotICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChraW5k
LCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLgotICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGFw
cGVuZE9TUkV4aXQoCisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWls
Q29uZGl0aW9uLCBGb3J3YXJkU3BlY3VsYXRpb24sIHJlY292ZXJ5KTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBzcGVjdWxhdGUoRXhpdEtpbmQga2luZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBo
aWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgc3BlY3VsYXRlKAorICAg
ICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZh
bHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIHNwZWN1bGF0ZUJhY2t3
YXJkKGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5nIHRoZSBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBt
X2RpcmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGFwcGVuZE9TUkV4aXQo
CisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBt
X2RpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgdGVy
bWluYXRlKEV4aXRLaW5kIGtpbmQpCiAgICAgewotICAgICAgICBzcGVjdWxhdGUoa2luZCwgMCwg
MCwgbV9vdXQuYm9vbGVhblRydWUpOworICAgICAgICBzcGVjdWxhdGUoa2luZCwgbm9WYWx1ZSgp
LCAwLCBtX291dC5ib29sZWFuVHJ1ZSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgYmFja3dhcmRU
eXBlQ2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIGJhY2t3
YXJkVHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdo
VmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVl
IGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAgICBpZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hl
Y2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gpKQotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVjayhoaWdoVmFsdWUudXNlS2luZCgpKSk7Ci0g
ICAgICAgIHNwZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9k
ZSgpLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgbV9zdGF0ZS5mb3JOb2RlKGhpZ2hWYWx1ZSku
ZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CisgICAgICAgIGFwcGVuZFR5cGVDaGVjaygKKyAg
ICAgICAgICAgIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENv
bmRpdGlvbiwgQmFja3dhcmRTcGVjdWxhdGlvbiwKKyAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVl
KCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soTFZhbHVlIGxvd1Zh
bHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBM
VmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIGZvcndhcmRUeXBlQ2hlY2soCisgICAgICAg
IEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUg
dHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7
Ci0gICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKGxvd1ZhbHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFz
c2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
cmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZC4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBlbmRUeXBlQ2hl
Y2soCisgICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gs
IGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVjdWxhdGlvbiwKKyAgICAgICAgICAgIEZvcm1hdHRl
ZFZhbHVlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHR5cGVDaGVjayhMVmFsdWUgbG93VmFs
dWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgdHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFz
c2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAg
ICBiYWNrd2FyZFR5cGVDaGVjayhsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gsIGZhaWxDb25kaXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5n
IG9mIE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09IEZvcndhcmREaXJlY3Rp
b24uCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MTM2MjMKKyAgICAgICAgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICAgICAgbG93VmFsdWUsIGhp
Z2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBtX2RpcmVjdGlvbiwK
KyAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKCkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGFw
cGVuZFR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGln
aFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExWYWx1
ZSBmYWlsQ29uZGl0aW9uLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRl
ZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRzVHlwZUNo
ZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQoKSkpOwor
ICAgICAgICBhcHBlbmRPU1JFeGl0KEJhZFR5cGUsIGxvd1ZhbHVlLCBoaWdoVmFsdWUubm9kZSgp
LCBmYWlsQ29uZGl0aW9uLCBkaXJlY3Rpb24sIHJlY292ZXJ5KTsKKyAgICAgICAgbV9zdGF0ZS5m
b3JOb2RlKGhpZ2hWYWx1ZSkuZmlsdGVyKHR5cGVzUGFzc2VkVGhyb3VnaCk7CiAgICAgfQogICAg
IAogICAgIExWYWx1ZSBsb3dJbnQzMihFZGdlIGVkZ2UsIE9wZXJhbmRTcGVjdWxhdGlvbk1vZGUg
bW9kZSA9IEF1dG9tYXRpY09wZXJhbmRTcGVjdWxhdGlvbikKQEAgLTkyOSw3ICs5ODEsOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIGlm
IChMVmFsdWUgYm94ZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkg
ewotICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soYm94ZWRSZXN1bHQsIGVkZ2UsIFNwZWNJbnQz
MiwgaXNOb3RJbnQzMihib3hlZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0lu
dDMyLCBpc05vdEludDMyKGJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0
ID0gdW5ib3hJbnQzMihib3hlZFJlc3VsdCk7CiAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFk
ZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC05
NDUsNyArOTk4LDggQEAgcHJpdmF0ZToKICAgICAgICAgQVNTRVJUX1VOVVNFRChtb2RlLCBtb2Rl
ID09IE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbiB8fCBpc0NlbGwoZWRnZS51c2VLaW5kKCkpKTsK
ICAgICAgICAgCiAgICAgICAgIGlmIChMVmFsdWUgdW5jaGVja2VkUmVzdWx0ID0gbV9qc1ZhbHVl
VmFsdWVzLmdldChlZGdlLm5vZGUoKSkpIHsKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKHVu
Y2hlY2tlZFJlc3VsdCwgZWRnZSwgU3BlY0NlbGwsIGlzTm90Q2VsbCh1bmNoZWNrZWRSZXN1bHQp
KTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVW
YWx1ZSh1bmNoZWNrZWRSZXN1bHQpLCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tl
ZFJlc3VsdCkpOwogICAgICAgICAgICAgcmV0dXJuIHVuY2hlY2tlZFJlc3VsdDsKICAgICAgICAg
fQogICAgICAgICAKQEAgLTk3MSw3ICsxMDI1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQg
PSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgRlRMX1RZ
UEVfQ0hFQ0sodW5ib3hlZFJlc3VsdCwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1
bmJveGVkUmVzdWx0KSk7CisgICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAg
ICAgICBqc1ZhbHVlVmFsdWUodW5ib3hlZFJlc3VsdCksIGVkZ2UsIFNwZWNCb29sZWFuLCBpc05v
dEJvb2xlYW4odW5ib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHVu
Ym94Qm9vbGVhbih1bmJveGVkUmVzdWx0KTsKICAgICAgICAgICAgIG1fYm9vbGVhblZhbHVlcy5h
ZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTA5NCw3ICsxMTQ5LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNwZWN1bGF0ZU9iamVjdChFZGdl
IGVkZ2UsIExWYWx1ZSBjZWxsKQogICAgIHsKICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAg
ICAgICAgICBjZWxsLCBlZGdlLCBTcGVjT2JqZWN0LAorICAgICAgICAgICAganNWYWx1ZVZhbHVl
KGNlbGwpLCBlZGdlLCBTcGVjT2JqZWN0LAogICAgICAgICAgICAgbV9vdXQuZXF1YWwoCiAgICAg
ICAgICAgICAgICAgbV9vdXQubG9hZFB0cihjZWxsLCBtX2hlYXBzLkpTQ2VsbF9zdHJ1Y3R1cmUp
LAogICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGdsb2JhbERhdGEoKS5zdHJpbmdT
dHJ1Y3R1cmUuZ2V0KCkpKSk7CkBAIC0xMTA1LDYgKzExNjAsMzU3IEBAIHByaXZhdGU6CiAgICAg
ICAgIHNwZWN1bGF0ZU9iamVjdChlZGdlLCBsb3dDZWxsKGVkZ2UpKTsKICAgICB9CiAgICAgCisg
ICAgYm9vbCBpc0xpdmUoTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEhhc2hNYXA8Tm9kZSos
IHVuc2lnbmVkPjo6aXRlcmF0b3IgaXRlciA9IG1fdGltZVRvTGl2ZS5maW5kKG5vZGUpOworICAg
ICAgICBBU1NFUlQoaXRlciAhPSBtX3RpbWVUb0xpdmUuZW5kKCkpOworICAgICAgICByZXR1cm4g
ISFpdGVyLT52YWx1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCB1c2UoRWRnZSBlZGdlKQorICAg
IHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90
aW1lVG9MaXZlLmZpbmQoZWRnZS5ub2RlKCkpOworICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3Rp
bWVUb0xpdmUuZW5kKCkpOworICAgICAgICBBU1NFUlQoaXRlci0+dmFsdWUpOworICAgICAgICBp
dGVyLT52YWx1ZS0tOworICAgIH0KKyAgICAKKyAgICAvLyBXcmFwcGVyIHVzZWQgb25seSBmb3Ig
REZHX05PREVfRE9fVE9fQ0hJTERSRU4KKyAgICB2b2lkIHVzZShOb2RlKiwgRWRnZSBlZGdlKQor
ICAgIHsKKyAgICAgICAgdXNlKGVkZ2UpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGluaXRpYWxp
emVPU1JFeGl0U3RhdGVGb3JCbG9jaygpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX3ZhbHVlU291cmNlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSBtX2hpZ2hCbG9jay0+dmFyaWFibGVzQXRIZWFkW2ldOworICAgICAgICAgICAgaWYgKCFub2Rl
KSB7CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShTb3Vy
Y2VJc0RlYWQpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbm9k
ZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+aXNBcmd1bWVudHNBbGlhcygpKSB7CisgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShBcmd1bWVudHNTb3Vy
Y2UpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIW5vZGUtPnNob3VsZEdlbmVyYXRlKCkpIHsKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhub2RlKSkgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgdmFsdWUgd2lsbCBoYXZlIGJlZW4gZmx1c2hlZCB0byB0aGUgSlNT
dGFjayBpbiBzb21lIGZvcm0gb3IKKyAgICAgICAgICAgICAgICAvLyBhbm90aGVyLgorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBv
c3NpYmxlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VE
b3VibGVGb3JtYXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNb
aV0gPSBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoSW50MzJJbkpTU3RhY2spOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUlu
SlNTdGFjayk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVW5ib3hJZlBvc3NpYmxl
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1h
dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3Vy
Y2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoaXNJbnQz
MlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoSW50MzJJbkxvY2Fscyk7CisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShCb29sZWFuSW5M
b2NhbHMpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2Vz
W2ldID0gVmFsdWVTb3VyY2UoVmFsdWVJbkxvY2Fscyk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgdm9pZCBhcHBlbmRPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwK
KyAgICAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1ZSBy
ZWNvdmVyeSkKKyAgICB7CisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBl
bmQoCisgICAgICAgICAgICBPU1JFeGl0KAorICAgICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVl
LmZvcm1hdCgpLCBtX2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZh
bHVlKSwKKyAgICAgICAgICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4sIG1fbGFzdFNldE9wZXJh
bmQsIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBtX2Z0bFN0YXRlLm9z
ckV4aXQuYXBwZW5kKE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIAorICAgICAg
ICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKKyAg
ICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhpdC5s
YXN0KCk7CisKKyAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBtX291dC5uZXdCbG9jaygp
OworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOwor
ICAgICAgICAKKyAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZhaWxDYXNlLCBj
b250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1
ZSk7CisgICAgICAgIGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9jYShtX291dC5tX2J1
aWxkZXIsIG1fb3V0LmludFB0cik7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAK
KyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobV9jYWxsRnJhbWUpOworICAgICAgICBpZiAoISFsb3dWYWx1ZSkKKyAgICAgICAgICAg
IGFyZ3VtZW50cy5hcHBlbmQobG93VmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgVmFsdWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgeworICAgICAgICAgICAg
Y2FzZSBWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0g
RXhpdFZhbHVlOjppbkpTU3RhY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgSW50MzJJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tp
XSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNJbnQzMigpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhp
dC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKKyAgICAgICAg
ICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3Vt
ZW50cywgaSwgVmFsdWVGb3JtYXRKU1ZhbHVlLCBtX291dC5nZXQobV9sb2NhbHM2NFtpXSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbnQzMkluTG9jYWxzOgor
ICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAgZXhp
dCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEludDMyLCBtX291dC5nZXQobV9sb2NhbHMzMltp
XSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCb29sZWFuSW5M
b2NhbHM6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAg
ICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0Qm9vbGVhbiwgbV9vdXQuZ2V0KG1f
bG9jYWxzQm9vbGVhbltpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBEb3VibGVJbkxvY2FsczoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50
IGRvdWJsZXMgaW4gRlRMLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjQKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBcmd1bWVudHNTb3VyY2U6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBQ
aGFudG9tQXJndW1lbnRzLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM5ODYKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBTb3VyY2VJc0RlYWQ6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRW
YWx1ZTo6ZGVhZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBI
YXZlTm9kZToKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JOb2RlKGV4aXQsIGFy
Z3VtZW50cywgaSwgc291cmNlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yd2FyZFNwZWN1bGF0aW9uKQor
ICAgICAgICAgICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJkKG1faGlnaEJsb2NrLCBtX25vZGUsIG1f
bm9kZUluZGV4LCByZWNvdmVyeSwgYXJndW1lbnRzKTsKKyAgICAgICAgCisgICAgICAgIC8vIFNv
LCB0aGUgcmVhbGx5IGxhbWUgdGhpbmcgaGVyZSBpcyB0aGF0IHdlIGhhdmUgdG8gYnVpbGQgYW4g
TExWTSBmdW5jdGlvbiB0eXBlLgorICAgICAgICAvLyBCb29vLgorICAgICAgICBWZWN0b3I8TFR5
cGUsIDE2PiBhcmd1bWVudFR5cGVzOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXJndW1lbnRzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRUeXBlcy5hcHBlbmQo
dHlwZU9mKGFyZ3VtZW50c1tpXSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuY2FsbCgKKyAg
ICAgICAgICAgIG1fb3V0LmludFRvUHRyKAorICAgICAgICAgICAgICAgIG1fb3V0LmdldChpbmZv
Lm1fdGh1bmtBZGRyZXNzKSwKKyAgICAgICAgICAgICAgICBwb2ludGVyVHlwZShmdW5jdGlvblR5
cGUobV9vdXQudm9pZFR5cGUsIGFyZ3VtZW50VHlwZXMpKSksCisgICAgICAgICAgICBhcmd1bWVu
dHMpOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAKKyAgICAgICAgbV9v
dXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmhhc1Jlc3VsdCgpKTsKKworICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRB
cmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IAorICAgICAgICBpZiAoIWlzTGl2ZShub2RlKSkgeworICAgICAgICAgICAgYm9vbCBmb3VuZCA9
IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmVlZHNPU1JCYWNrd2FyZFJl
d2lyaW5nKG5vZGUtPm9wKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNoaWxk
MSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1
bWVudChleGl0LCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBmb3Vu
ZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICgh
Zm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBpbnQzMlRvRG91YmxlID0gMDsKKyAgICAg
ICAgICAgICAgICBOb2RlKiB2YWx1ZVRvSW50MzIgPSAwOworICAgICAgICAgICAgICAgIE5vZGUq
IHVpbnQzMlRvTnVtYmVyID0gMDsKKyAgICAgICAgICAgICAgICBOb2RlKiBkb3VibGVBc0ludDMy
ID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1
bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4oKTsKKyAgICAgICAg
ICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVuZCA9IG1fdGltZVRv
TGl2ZS5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9
IGl0ZXItPmtleTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxkMSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjYW5kaWRhdGUtPm9wKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAgICAgICAgICAg
ICAgaW50MzJUb0RvdWJsZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlVG9JbnQzMiA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVyOgor
ICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5kaWRhdGU7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBEb3Vi
bGVBc0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5k
aWRhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmVlZHNPU1JGb3J3
YXJkUmV3aXJpbmcoY2FuZGlkYXRlLT5vcCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZG91YmxlQXNJbnQzMikKKyAgICAgICAgICAg
ICAgICAgICAgbm9kZSA9IGRvdWJsZUFzSW50MzI7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAo
aW50MzJUb0RvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGludDMyVG9Eb3VibGU7
CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMyKQorICAgICAgICAgICAgICAg
ICAgICBub2RlID0gdmFsdWVUb0ludDMyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVpbnQz
MlRvTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gdWludDMyVG9OdW1iZXI7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzTGl2ZShub2RlKSkKKyAgICAg
ICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVl
c1tpbmRleF0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChpc0xpdmUo
bm9kZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2ludDMyVmFs
dWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFyZ3Vt
ZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0gbV9i
b29sZWFuVmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4
aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSBy
ZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICBhZGRFeGl0
QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVlLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IGRvdWJsZXMgaW4gdGhlIEZUTC4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNAorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBib29sIHRyeVRvU2V0Q29u
c3RhbnRFeGl0QXJndW1lbnQoT1NSRXhpdCYgZXhpdCwgdW5zaWduZWQgaW5kZXgsIE5vZGUqIG5v
ZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBK
U0NvbnN0YW50OgorICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICAgICAgZXhp
dC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmNvbnN0YW50KG1fZ3JhcGgudmFsdWVPZkpT
Q29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
UGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhhbnRv
bUFyZ3VtZW50cy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMTM5ODYKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFkZEV4
aXRBcmd1bWVudCgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYgYXJn
dW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0LAorICAgICAgICBMVmFs
dWUgdmFsdWUpCisgICAgeworICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9IEV4aXRWYWx1
ZTo6ZXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXplKCkpKTsK
KyAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQg
bGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrKCkKKyAgICB7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0VGh1bmsgPQorICAgICAgICAgICAgZ2xv
YmFsRGF0YSgpLmdldENUSVN0dWIob3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcik7Cisg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHRhcmdldCA9IENvZGVMb2NhdGlvbkxhYmVsKG9zckV4
aXRUaHVuay5jb2RlKCkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0
aWFsaXphdGlvbik7CisgICAgICAgIAorICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoCisg
ICAgICAgICAgICBnbG9iYWxEYXRhKCksICZtX2V4aXRUaHVua0dlbmVyYXRvciwgbV9mdGxTdGF0
ZS5ncmFwaC5tX2NvZGVCbG9jaywKKyAgICAgICAgICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2Nl
ZWQpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkg
PT0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0LnNpemUoKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9mdGxTdGF0
ZS5vc3JFeGl0W2ldOworICAgICAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0
Q29kZS0+b3NyRXhpdFtpXTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGluZm8ubV90aHVua0p1bXAsIHRhcmdldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG1fb3V0LnNldCgKKyAgICAgICAgICAgICAgICBtX291dC5jb25zdEludFB0cigKKyAgICAgICAg
ICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKS5leGVj
dXRhYmxlQWRkcmVzcygpKSwKKyAgICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBs
aW5rQnVmZmVyLm9mZnNldE9mKGluZm8ubV90aHVua0p1bXApOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmluaXRpYWxpemVFeGl0VGh1bmtzKAorICAg
ICAgICAgICAgRklOQUxJWkVfREZHX0NPREUoCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlciwK
KyAgICAgICAgICAgICAgICAoIkZUTCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29k
ZUJsb2NrV2l0aEpJVFR5cGUobV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jayxKSVRDb2RlOjpG
VExKSVQpKS5kYXRhKCkpKSk7CisKKyAgICAgICAgbV9vdXQuanVtcChtX2Jsb2Nrcy5nZXQobV9n
cmFwaC5tX2Jsb2Nrc1swXS5nZXQoKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG9ic2VydmVN
b3ZIaW50KE5vZGUqIG5vZGUpCisgICAgeworICAgICAgICBBU1NFUlQobm9kZS0+Y29udGFpbnNN
b3ZIaW50KCkpOworICAgICAgICBBU1NFUlQobm9kZS0+b3AoKSAhPSBab21iaWVIaW50KTsKKyAg
ICAgICAgCisgICAgICAgIGludCBvcGVyYW5kID0gbm9kZS0+bG9jYWwoKTsKKyAgICAgICAgCisg
ICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBvcGVyYW5kOworICAgICAgICBtX3ZhbHVlU291cmNl
c1tvcGVyYW5kXSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQor
ICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAg
ICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgK
QEAgLTExNTEsMTIgKzE1NTcsMTIgQEAgcHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAg
CiAgICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKKyAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxp
emF0aW9uOwogICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIExCYXNpY0Jsb2NrPiBtX2Jsb2NrczsK
ICAgICAKICAgICBMVmFsdWUgbV9jYWxsRnJhbWU7CiAgICAgTFZhbHVlIG1fdGFnVHlwZU51bWJl
cjsKICAgICBMVmFsdWUgbV90YWdNYXNrOwotICAgIExWYWx1ZSBtX2Fib3J0RnVuY3Rpb247CiAg
ICAgCiAgICAgSGFzaFNldDxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcHM7CiAgICAgVmVjdG9yPE5v
ZGUqPiBtX2ZsdXNoZWRMb2NhbE9wV29ya2xpc3Q7CkBAIC0xMTY1LDE1ICsxNTcxLDIxIEBAIHBy
aXZhdGU6CiAgICAgSGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2pzVmFsdWVWYWx1ZXM7CiAgICAg
SGFzaE1hcDxOb2RlKiwgTFZhbHVlPiBtX2Jvb2xlYW5WYWx1ZXM7CiAgICAgSGFzaE1hcDxOb2Rl
KiwgTFZhbHVlPiBtX3N0b3JhZ2VWYWx1ZXM7CisgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+
IG1fdGltZVRvTGl2ZTsKICAgICAKICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzQm9vbGVh
bjsKICAgICBPcGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzMzI7CiAgICAgT3BlcmFuZHM8TFZhbHVl
PiBtX2xvY2FsczY0OwogICAgIAorICAgIE9wZXJhbmRzPFZhbHVlU291cmNlPiBtX3ZhbHVlU291
cmNlczsKKyAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKKyAgICBFeGl0VGh1bmtHZW5lcmF0b3Ig
bV9leGl0VGh1bmtHZW5lcmF0b3I7CisgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBtX3N0YXRlOwog
ICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOwogICAgIEJhc2ljQmxvY2sqIG1fbmV4dEhpZ2hC
bG9jazsKICAgICBMQmFzaWNCbG9jayBtX25leHRMb3dCbG9jazsKKyAgICB1bnNpZ25lZCBtX25v
ZGVJbmRleDsKICAgICBOb2RlKiBtX25vZGU7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9k
aXJlY3Rpb247CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRlRMT1NSRXhpdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudC5oIgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVu
dExpc3QuaCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisjaW5jbHVkZSAiT3BlcmF0aW9ucy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBE
Rkc7CisKK09TUkV4aXQ6Ok9TUkV4aXQoCisgICAgRXhpdEtpbmQgZXhpdEtpbmQsIFZhbHVlRm9y
bWF0IHByb2ZpbGVWYWx1ZUZvcm1hdCwKKyAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxl
IHZhbHVlUHJvZmlsZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAorICAgIGludCBsYXN0U2V0T3Bl
cmFuZCwgdW5zaWduZWQgbnVtYmVyT2ZBcmd1bWVudHMsIHVuc2lnbmVkIG51bWJlck9mTG9jYWxz
KQorICAgIDogT1NSRXhpdEJhc2UoZXhpdEtpbmQsIGNvZGVPcmlnaW4pCisgICAgLCBtX3Byb2Zp
bGVWYWx1ZUZvcm1hdChwcm9maWxlVmFsdWVGb3JtYXQpCisgICAgLCBtX3ZhbHVlUHJvZmlsZSh2
YWx1ZVByb2ZpbGUpCisgICAgLCBtX3BhdGNoYWJsZUNvZGVPZmZzZXQoMCkKKyAgICAsIG1fbGFz
dFNldE9wZXJhbmQobGFzdFNldE9wZXJhbmQpCisgICAgLCBtX3ZhbHVlcyhudW1iZXJPZkFyZ3Vt
ZW50cywgbnVtYmVyT2ZMb2NhbHMpCit7Cit9CisKK0NvZGVMb2NhdGlvbkp1bXAgT1NSRXhpdDo6
Y29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxvY2sqIGZ0bENvZGVCbG9jaykgY29uc3QKK3sK
KyAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcCgKKyAgICAgICAgcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4oCisgICAgICAgICAgICBmdGxDb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZnRsKCktPmV4
aXRUaHVua3MoKS5kYXRhTG9jYXRpb24oKSkgKworICAgICAgICBtX3BhdGNoYWJsZUNvZGVPZmZz
ZXQpOworfQorCit2b2lkIE9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQoCisgICAgQmFzaWNCbG9j
ayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2RlLCB1bnNpZ25lZCBub2RlSW5kZXgsCisgICAgY29u
c3QgRm9ybWF0dGVkVmFsdWUgJnZhbHVlLCBFeGl0QXJndW1lbnRMaXN0JiBhcmd1bWVudHMpCit7
CisgICAgTm9kZSogbm9kZTsKKyAgICBOb2RlKiBsYXN0TW92SGludDsKKyAgICBpZiAoIWRvU2Vh
cmNoRm9yRm9yd2FyZENvbnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEh
dmFsdWUsIG5vZGUsIGxhc3RNb3ZIaW50KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJU
KG5vZGUtPmNvZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOworICAgIAorICAg
IG1fY29kZU9yaWdpbiA9IG5vZGUtPmNvZGVPcmlnaW47CisgICAgCisgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGludCBvdmVycmlkZGVuT3BlcmFuZCA9IGxhc3RN
b3ZIaW50LT5sb2NhbCgpOworICAgIG1fbGFzdFNldE9wZXJhbmQgPSBvdmVycmlkZGVuT3BlcmFu
ZDsKKyAgICAKKyAgICAvLyBJcyB0aGUgdmFsdWUgZm9yIHRoaXMgb3BlcmFuZCBiZWluZyBwYXNz
ZWQgYXMgYW4gYXJndW1lbnQgdG8gdGhlIGV4aXQsIG9yIGlzCisgICAgLy8gaXQgc29tZXRoaW5n
IGVsc2U/IElmIGl0J3MgYW4gYXJndW1lbnQgYWxyZWFkeSwgdGhlbiByZXBsYWNlIHRoYXQgYXJn
dW1lbnQ7CisgICAgLy8gb3RoZXJ3aXNlIGFkZCBhbm90aGVyIGFyZ3VtZW50LgorICAgIGlmICht
X3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0uaXNBcmd1bWVudCgpKSB7CisgICAgICAgIEV4aXRB
cmd1bWVudCBleGl0QXJndW1lbnQgPSBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0uZXhpdEFy
Z3VtZW50KCk7CisgICAgICAgIGFyZ3VtZW50c1tleGl0QXJndW1lbnQuYXJndW1lbnQoKV0gPSB2
YWx1ZS52YWx1ZSgpOworICAgICAgICBtX3ZhbHVlc1tvdmVycmlkZGVuT3BlcmFuZF0gPSBFeGl0
VmFsdWU6OmV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgIGV4aXRBcmd1bWVudC53aXRoRm9ybWF0
KHZhbHVlLmZvcm1hdCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgdW5z
aWduZWQgYXJndW1lbnQgPSBhcmd1bWVudHMuc2l6ZSgpOworICAgIGFyZ3VtZW50cy5hcHBlbmQo
dmFsdWUudmFsdWUoKSk7CisgICAgbV92YWx1ZXNbbV9sYXN0U2V0T3BlcmFuZF0gPSBFeGl0VmFs
dWU6OmV4aXRBcmd1bWVudCgKKyAgICAgICAgRXhpdEFyZ3VtZW50KHZhbHVlLmZvcm1hdCgpLCBh
cmd1bWVudCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBF
TkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JF
eGl0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTE9TUkV4aXRfaAorI2RlZmluZSBG
VExPU1JFeGl0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZU
TF9KSVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2Zp
bGUuaCIKKyNpbmNsdWRlICJERkdPU1JFeGl0QmFzZS5oIgorI2luY2x1ZGUgIkZUTEFiYnJldmlh
dGlvbnMuaCIKKyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnRMaXN0LmgiCisjaW5jbHVkZSAiRlRM
RXhpdFZhbHVlLmgiCisjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKKyNpbmNsdWRlICJN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmgiCisjaW5jbHVkZSAiT3BlcmFuZHMuaCIKKyNp
bmNsdWRlICJWYWx1ZVByb2ZpbGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCisvLyBUcmFja3Mgb25lIE9TUiBleGl0IHNpdGUgd2l0aGluIHRoZSBGVEwgSklULiBPU1Ig
ZXhpdCBpbiBGVEwgd29ya3MgYnkgZGVjb25zdHJ1Y3RpbmcKKy8vIHRoZSBjcmF6eSB0aGF0IGlz
IE9TUiBkb3duIHRvIHNpbXBsZSBTU0EgQ0ZHIHByaW1pdGl2ZXMgdGhhdCBhbnkgY29tcGlsZXIg
YmFja2VuZAorLy8gKGluY2x1ZGluZyBvZiBjb3Vyc2UgTExWTSkgY2FuIGdyb2sgYW5kIGRvIG1l
YW5pbmdmdWwgdGhpbmdzIHRvLiBFeGNlcHQgZm9yCisvLyB3YXRjaHBvaW50LWJhc2VkIGV4aXRz
LCB3aGljaCBoYXZlbid0IHlldCBiZWVuIGltcGxlbWVudGVkIChzZWUgd2Via2l0Lm9yZy9iLzEx
MzY0NyksCisvLyBhbiBleGl0IGlzIGp1c3QgYSBjb25kaXRpb25hbCBicmFuY2ggaW4gdGhlIGVt
aXR0ZWQgY29kZSB3aGVyZSBvbmUgZGVzdGluYXRpb24gaXMgdGhlCisvLyBjb250aW51YXRpb24g
YW5kIHRoZSBvdGhlciBpcyBhIGJhc2ljIGJsb2NrIHRoYXQgcGVyZm9ybXMgYSBuby1yZXR1cm4g
dGFpbC1jYWxsIHRvIGFuCisvLyBleGl0IHRodW5rLiBUaGlzIHRodW5rIHRha2VzIGFzIGl0cyBh
cmd1bWVudHMgdGhlIGxpdmUgbm9uLWNvbnN0YW50CisvLyBub3QtYWxyZWFkeS1hY2NvdW50ZWQt
Zm9yIGJ5dGVjb2RlIHN0YXRlLiBUbyBhcHByZWNpYXRlIGhvdyB0aGlzIHdvcmtzIGNvbnNpZGVy
IHRoZQorLy8gZm9sbG93aW5nIEphdmFTY3JpcHQgcHJvZ3JhbSwgYW5kIGl0cyBsb3dlcmluZyBk
b3duIHRvIExMVk0gSVIgaW5jbHVkaW5nIHRoZSByZWxldmFudAorLy8gZXhpdHM6CisvLworLy8g
ZnVuY3Rpb24gZm9vKG8pIHsKKy8vICAgICB2YXIgYSA9IG8uYTsgLy8gcHJlZGljdGVkIGludAor
Ly8gICAgIHZhciBiID0gby5iOworLy8gICAgIHZhciBjID0gby5jOyAvLyBOQiB0aGlzIGlzIGRl
YWQKKy8vICAgICBhID0gYSB8IDU7IC8vIG91ciBleGFtcGxlIE9TUiBleGl0OiBuZWVkIHRvIGNo
ZWNrIGlmIGEgaXMgYW4gaW50CisvLyAgICAgcmV0dXJuIGEgKyBiOworLy8gfQorLy8KKy8vIEp1
c3QgY29uc2lkZXIgdGhlICJhIHwgNSIuIEluIHRoZSBERkcgSVIsIHRoaXMgbG9va3MgbGlrZToK
Ky8vCisvLyBCaXRPcihDaGVjazpJbnQzMjpAYSwgSW50MzI6NSkKKy8vCisvLyBXaGVyZSBAYSBp
cyB0aGUgbm9kZSBmb3IgdGhlIEdldExvY2FsIG5vZGUgdGhhdCBnZXRzIHRoZSB2YWx1ZSBvZiB0
aGUgJ2EnIHZhcmlhYmxlLgorLy8gQ29uY2VwdHVhbGx5LCB0aGlzIG5vZGUgY2FuIGJlIGZ1cnRo
ZXIgYnJva2VuIGRvd24gdG8gdGhlIGZvbGxvd2luZyAobm90ZSB0aGF0IHRoaXMKKy8vIHBhcnRp
Y3VsYXIgbG93ZXJpbmcgbmV2ZXIgYWN0dWFsbHkgaGFwcGVucyAtIHdlIHNraXAgdGhpcyBzdGVw
IGFuZCBnbyBzdHJhaWdodCB0bworLy8gTExWTSBJUiAtIGJ1dCBpdCdzIHN0aWxsIHVzZWZ1bCB0
byBzZWUgdGhpcyk6CisvLworLy8gZXhpdElmKEBhIGlzIG5vdCBpbnQzMik7CisvLyBjb250aW51
YXRpb247CisvLworLy8gV2hlcmUgJ2V4aXRJZigpJyBpcyBhIGZ1bmN0aW9uIHRoYXQgd2lsbCBl
eGl0IGlmIHRoZSBhcmd1bWVudCBpcyB0cnVlLCBhbmQKKy8vICdjb250aW51YXRpb24nIGlzIHRo
ZSBzdHVmZiB0aGF0IHdlIHdpbGwgZG8gYWZ0ZXIgdGhlIGV4aXRJZigpIGNoZWNrLiAoTm90ZSB0
aGF0CisvLyBGVEwgcmVmZXJzIHRvICdleGl0SWYoKScgYXMgJ3NwZWN1bGF0ZSgpJywgd2hpY2gg
aXMgaW4gbGluZSB3aXRoIERGRyB0ZXJtaW5vbG9neS4pCisvLyBUaGlzIHRoZW4gZ2V0cyBicm9r
ZW4gZG93biB0byB0aGUgZm9sbG93aW5nIExMVk0gSVIsIGFzc3VtaW5nIHRoYXQgJTAgaXMgdGhl
IExMVk0KKy8vIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gdmFyaWFibGUgJ2EnLCBhbmQgJTEgaXMg
dGhlIExMVk0gdmFsdWUgZm9yIHZhcmlhYmxlICdiJzoKKy8vCisvLyAgICUyID0gLi4uIC8vIHRo
ZSBwcmVkaWN0YXRlIGNvcnJlc3BvbmRpbmcgdG8gJ0BhIGlzIG5vdCBpbnQzMicKKy8vICAgYnIg
aTEgJTIsIGxhYmVsICUzLCBsYWJlbCAlNAorLy8gOyA8bGFiZWw+OjMKKy8vICAgY2FsbCB2b2lk
IGV4aXRUaHVuazEoJTAsICUxKSAvLyBwYXNzICdhJyBhbmQgJ2InLCBzaW5jZSB0aGV5J3JlIGJv
dGggbGl2ZS1pbi1ieXRlY29kZQorLy8gICB1bnJlYWNoYWJsZQorLy8gOyA8bGFiZWw+OjQKKy8v
ICAgLi4uIC8vIGNvZGUgZm9yIHRoZSBjb250aW51YXRpb24KKy8vCisvLyBXaGVyZSAnZXhpdFRo
dW5rMScgaXMgdGhlIElSIHRvIGdldCB0aGUgZXhpdCB0aHVuayBmb3IgKnRoaXMqIE9TUiBleGl0
LiBFYWNoIE9TUgorLy8gZXhpdCB3aWxsIGFwcGVhciB0byBMTFZNIHRvIGhhdmUgYSBkaXN0aW5j
dCBleGl0IHRodW5rLgorLy8KKy8vIE5vdGUgdGhhdCB0aGlzIGRpZG4ndCBoYXZlIHRvIHBhc3Mg
JzUnLCAnbycsIG9yICdjJyB0byB0aGUgZXhpdCB0aHVuay4gNSBpcyBhCisvLyBjb25zdGFudCBh
bmQgdGhlIERGRyBhbHJlYWR5IGtub3dzIHRoYXQsIGFuZCBjYW4gYWxyZWFkeSB0ZWxsIHRoZSBP
U1IgZXhpdCBtYWNoaW5lcnkKKy8vIHdoYXQgdGhhdCBjb250YW50IGlzIGFuZCB3aGljaCBieXRl
Y29kZSB2YXJpYWJsZXMgKGlmIGFueSkgaXQgbmVlZHMgdG8gYmUgZHJvcHBlZAorLy8gaW50by4g
VGhpcyBpcyBjb252ZXllZCB0byB0aGUgZXhpdCBzdGF0aWNhbGx5LCB2aWEgdGhlIE9TUkV4aXQg
ZGF0YSBzdHJ1Y3R1cmUgYmVsb3cuCisvLyBTZWUgdGhlIGNvZGUgZm9yIEV4aXRWYWx1ZSBmb3Ig
ZGV0YWlscy4gJ28nIGlzIGFuIGFyZ3VtZW50LCBhbmQgYXJndW1lbnRzIGFyZSBhbHdheXMKKy8v
ICJmbHVzaGVkIiAtIGlmIHlvdSBuZXZlciBhc3NpZ24gdGhlbSB0aGVuIHRoZWlyIHZhbHVlcyBh
cmUgc3RpbGwgaW4gdGhlIGFyZ3VtZW50CisvLyBzdGFjayBzbG90cywgYW5kIGlmIHlvdSBkbyBh
c3NpZ24gdGhlbSB0aGVuIHdlIGVhZ2VybHkgc3RvcmUgdGhlbSBpbnRvIHRob3NlIHNsb3RzLgor
Ly8gJ2MnIGlzIGRlYWQgaW4gYnl0ZWNvZGUsIGFuZCB0aGUgREZHIGtub3dzIHRoaXM7IHdlIHN0
YXRpY2FsbHkgdGVsbCB0aGUgZXhpdCB0aHVuaworLy8gdGhhdCBpdCdzIGRlYWQgYW5kIGRvbid0
IGhhdmUgdG8gcGFzcyBhbnl0aGluZy4gVGhlIGV4aXQgdGh1bmsgd2lsbCAiaW5pdGlhbGl6ZSIg
aXRzCisvLyB2YWx1ZSB0byBVbmRlZmluZWQuCisvLworLy8gVGhpcyBhcHByb2FjaCB0byBPU1Ig
ZXhpdCBoYXMgYSBudW1iZXIgb2YgdmlydHVlczoKKy8vCisvLyAtIEl0IGlzIGFuIGVudGlyZWx5
IHVuc3VycHJpc2luZyByZXByZXNlbnRhdGlvbiBmb3IgYSBjb21waWxlciB0aGF0IGFscmVhZHkg
Z3Jva3MKKy8vICAgQ0ZHLWxpa2UgSVJzIGZvciBDLWxpa2UgbGFuZ3VhZ2VzLiBBbGwgZXhpc3Rp
bmcgYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucyBqdXN0CisvLyAgIHdvcmsuCisvLworLy8g
LSBJdCBsZW5kcyBpdHNlbGYgbmF0dXJhbGx5IHRvIG1vZGVybiBhcHByb2FjaGVzIHRvIGNvZGUg
bW90aW9uLiBGb3IgZXhhbXBsZSwgeW91CisvLyAgIGNvdWxkIHNpbmsgb3BlcmF0aW9ucyBmcm9t
IGFib3ZlIHRoZSBleGl0IHRvIGJlbG93IGl0LCBpZiB5b3UganVzdCBkdXBsaWNhdGUgdGhlCisv
LyAgIG9wZXJhdGlvbiBpbnRvIHRoZSBPU1IgZXhpdCBibG9jay4gVGhpcyBpcyBib3RoIGxlZ2Fs
IGFuZCBkZXNpcmFibGUuIEl0IHdvcmtzCisvLyAgIGJlY2F1c2UgdGhlIGJhY2tlbmQgc2VlcyB0
aGUgT1NSIGV4aXQgYmxvY2sgYXMgYmVpbmcgbm8gZGlmZmVyZW50IHRoYW4gYW55IG90aGVyLAor
Ly8gICBhbmQgTExWTSBhbHJlYWR5IHN1cHBvcnRzIHNpbmtpbmcgaWYgaXQgc2VlcyB0aGF0IGEg
dmFsdWUgaXMgb25seSBwYXJ0aWFsbHkgdXNlZC4KKy8vICAgSGVuY2UgdGhlcmUgZXhpc3RzIGEg
dmFsdWUgdGhhdCBkb21pbmF0ZXMgdGhlIGV4aXQgYnV0IGlzIG9ubHkgdXNlZCBieSB0aGUgZXhp
dAorLy8gICB0aHVuayBhbmQgbm90IGJ5IHRoZSBjb250aW51YXRpb24sIHNpbmtpbmcgb3VnaHQg
dG8ga2ljayBpbiBmb3IgdGhhdCB2YWx1ZS4KKy8vICAgSG9pc3Rpbmcgb3BlcmF0aW9ucyBmcm9t
IGJlbG93IGl0IHRvIGFib3ZlIGl0IGlzIGFsc28gcG9zc2libGUsIGZvciBzaW1pbGFyCisvLyAg
IHJlYXNvbnMuCisvLworLy8gLSBUaGUgbm8tcmV0dXJuIHRhaWwtY2FsbCB0byB0aGUgT1NSIGV4
aXQgdGh1bmsgY2FuIGJlIHN1YmplY3RlZCB0byBzcGVjaWFsaXplZAorLy8gICBjb2RlLXNpemUg
cmVkdWN0aW9uIG9wdGltaXphdGlvbnMsIHRob3VnaCB0aGlzIGlzIG9wdGlvbmFsLiBGb3IgZXhh
bXBsZSwgaW5zdGVhZAorLy8gICBvZiBhY3R1YWxseSBlbWl0dGluZyBhIGNhbGwgYWxvbmcgd2l0
aCBhbGwgdGhhdCBnb2VzIHdpdGggaXQgKGxpa2UgcGxhY2luZyB0aGUKKy8vICAgYXJndW1lbnRz
IGludG8gYXJndW1lbnQgcG9zaXRpb24pLCB0aGUgYmFja2VuZCBjb3VsZCBjaG9vc2UgdG8gc2lt
cGx5IGluZm9ybSB1cworLy8gICB3aGVyZSBpdCBoYWQgcGxhY2VkIHRoZSBhcmd1bWVudHMgYW5k
IGV4cGVjdCB0aGUgY2FsbGVlIChpLmUuIHRoZSBleGl0IHRodW5rKSB0bworLy8gICBmaWd1cmUg
aXQgb3V0IGZyb20gdGhlcmUuIEl0IGNvdWxkIGFsc28gdGVsbCB1cyB3aGF0IHdlIG5lZWQgdG8g
ZG8gdG8gcG9wIHN0YWNrLAorLy8gICBhbHRob3VnaCBhZ2FpbiwgaXQgZG9lc24ndCBoYXZlIHRv
OyBpdCBjb3VsZCBqdXN0IGVtaXQgdGhhdCBjb2RlIG5vcm1hbGx5LiBUaG91Z2gKKy8vICAgd2Ug
ZG9uJ3Qgc3VwcG9ydCB0aGlzIHlldCwgd2UgY291bGQ7IHRoZSBvbmx5IHRoaW5nIHRoYXQgd291
bGQgY2hhbmdlIG9uIG91ciBlbmQKKy8vICAgaXMgdGhhdCB3ZSdkIG5lZWQgZmVlZGJhY2sgZnJv
bSB0aGUgYmFja2VuZCBhYm91dCB0aGUgbG9jYXRpb24gb2YgdGhlIGFyZ3VtZW50cworLy8gICBh
bmQgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdGhpbmdzIHRoYXQgbmVlZCB0byBiZSBkb25lIHRvIHBv
cCBzdGFjay4gVGhpcyB3b3VsZAorLy8gICBpbnZvbHZlIHN3aXRjaGluZyB0aGUgbV92YWx1ZXMg
YXJyYXkgdG8gdXNlIHNvbWV0aGluZyBtb3JlIGFraW4gdG8gVmFsdWVSZWNvdmVyeQorLy8gICBy
YXRoZXIgdGhhbiB0aGUgY3VycmVudCBFeGl0VmFsdWUsIGFsYmVpdCBwb3NzaWJseSB3aXRoIHNv
bWUgaGFja3MgdG8gYmV0dGVyCisvLyAgIHVuZGVyc3RhbmQgdGhlIGtpbmRzIG9mIHBsYWNlcyB3
aGVyZSB0aGUgTExWTSBiYWNrZW5kIHdvdWxkIHB1dCB2YWx1ZXMuCisvLworLy8gLSBJdCBjb3Vs
ZCBiZSBleHRlbmRlZCB0byBhbGxvdyB0aGUgYmFja2VuZCB0byBkbyBpdHMgb3duIGV4aXQgaG9p
c3RpbmcsIGJ5IHVzaW5nCisvLyAgIGludHJpbnNpY3MgKG9yIG1ldGEtZGF0YSwgb3Igc29tZXRo
aW5nKSB0byBpbmZvcm0gdGhlIGJhY2tlbmQgdGhhdCBpdCdzIHNhZmUgdG8KKy8vICAgbWFrZSB0
aGUgcHJlZGljYXRlIHBhc3NlZCB0byAnZXhpdElmKCknIG1vcmUgdHJ1dGh5LgorLy8KKy8vIC0g
SXQgY291bGQgYmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCB3YXRjaHBvaW50cyAoc2VlIHdlYmtpdC5v
cmcvYi8xMTM2NDcpIGJ5IG1ha2luZworLy8gICB0aGUgcHJlZGljYXRlIHBhc3NlZCB0byAnZXhp
dElmKCknIGJlIGFuIGludHJpbnNpYyB0aGF0IHRoZSBiYWNrZW5kIGtub3dzIHRvIGJlCisvLyAg
IHRydWUgYXQgY29tcGlsZS10aW1lLiBUaGUgYmFja2VuZCBjb3VsZCB0aGVuIHR1cm4gdGhlIGNv
bmRpdGlvbmFsIGJyYW5jaCBpbnRvIGEKKy8vICAgcmVwbGFjZWFibGUganVtcCwgbXVjaCBsaWtl
IHRoZSBERkcgZG9lcy4KKworc3RydWN0IE9TUkV4aXQgOiBwdWJsaWMgREZHOjpPU1JFeGl0QmFz
ZSB7CisgICAgT1NSRXhpdCgKKyAgICAgICAgRXhpdEtpbmQsIFZhbHVlRm9ybWF0IHByb2ZpbGVW
YWx1ZUZvcm1hdCwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwKKyAgICAgICAgQ29kZU9y
aWdpbiwgaW50IGxhc3RTZXRPcGVyYW5kLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywKKyAg
ICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpOworICAgIAorICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBtX2NvZGU7CisgICAgCisgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBl
eGl0IGNhbGwgbWF5IGJlIGEgdmFsdWUgd2Ugd2lzaCB0byBwcm9maWxlLgorICAgIC8vIElmIHRo
YXQncyB0aGUgY2FzZSwgdGhlIGZvcm1hdCB3aWxsIGJlIG5vdCBJbnZhbGlkIGFuZCB3ZSdsbCBo
YXZlIGEKKyAgICAvLyBtZXRob2Qgb2YgZ2V0dGluZyBhIHZhbHVlIHByb2ZpbGUuIE5vdGUgdGhh
dCBhbGwgb2YgdGhlIEV4aXRBcmd1bWVudCdzCisgICAgLy8gYXJlIGFscmVhZHkgYXdhcmUgb2Yg
dGhpcyBwb3NzaWJsZSBvZmYtYnktb25lLCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvCisgICAgLy8g
Y29ycmVjdCB0aGVtLgorICAgIFZhbHVlRm9ybWF0IG1fcHJvZmlsZVZhbHVlRm9ybWF0OworICAg
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgbV92YWx1ZVByb2ZpbGU7CisgICAgCisgICAg
Ly8gT2Zmc2V0IHdpdGhpbiB0aGUgZXhpdCBzdHVicyBvZiB0aGUgc3R1YiBmb3IgdGhpcyBleGl0
LgorICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKKyAgICAKKyAgICBpbnQgbV9s
YXN0U2V0T3BlcmFuZDsKKyAgICAKKyAgICBPcGVyYW5kczxFeGl0VmFsdWU+IG1fdmFsdWVzOwor
ICAgIAorICAgIENvZGVMb2NhdGlvbkp1bXAgY29kZUxvY2F0aW9uRm9yUmVwYXRjaChDb2RlQmxv
Y2sqIGZ0bENvZGVCbG9jaykgY29uc3Q7CisgICAgCisgICAgdm9pZCBjb252ZXJ0VG9Gb3J3YXJk
KAorICAgICAgICBERkc6OkJhc2ljQmxvY2sqLCBERkc6Ok5vZGUqIGN1cnJlbnROb2RlLCB1bnNp
Z25lZCBub2RlSW5kZXgsCisgICAgICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiwgRXhpdEFyZ3Vt
ZW50TGlzdCYgYXJndW1lbnRzKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKwor
I2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT1NSRXhpdF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBp
bGF0aW9uSW5mby5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorI2RlZmluZSBGVExPU1JFeGl0Q29tcGlsYXRp
b25JbmZvX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitzdHJ1Y3QgT1NS
RXhpdENvbXBpbGF0aW9uSW5mbyB7CisgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbygpCisgICAg
ICAgIDogbV90aHVua0FkZHJlc3MoMCkKKyAgICB7CisgICAgfQorICAgIAorICAgIE1hY3JvQXNz
ZW1ibGVyOjpMYWJlbCBtX3RodW5rTGFiZWw7CisgICAgTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJs
ZUp1bXAgbV90aHVua0p1bXA7CisgICAgTFZhbHVlIG1fdGh1bmtBZGRyZXNzOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNl
bmRpZiAvLyBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMT1NS
RXhpdENvbXBpbGVyLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5o
IgorI2luY2x1ZGUgIkZUTENBcmd1bWVudEdldHRlci5oIgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1
bWVudEZvck9wZXJhbmQuaCIKKyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRM
T1NSRXhpdC5oIgorI2luY2x1ZGUgIlJlcGF0Y2hCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZHOworCitzdGF0aWMgdm9pZCBj
b21waWxlU3R1YigKKyAgICB1bnNpZ25lZCBleGl0SUQsIE9TUkV4aXQmIGV4aXQsIEpTR2xvYmFs
RGF0YSogZ2xvYmFsRGF0YSwgQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdChnbG9iYWxEYXRhLCBjb2RlQmxvY2spOworICAgIAorICAgIC8vIFRoaXMgaXMgYWN0
dWFsbHkgZmFpcmx5IGVhc3ksIGV2ZW4gdGhvdWdoIGl0IGlzIGhvcnJpYmx5IGdyb3NzLiBXZSBr
bm93IHRoYXQKKyAgICAvLyBMTFZNIHdvdWxkIGhhdmUgcGFzc2VzIHVzIGFsbCBvZiB0aGUgc3Rh
dGUgdmlhIGFyZ3VtZW50cy4gV2Uga25vdyBob3cgdG8gZ2V0CisgICAgLy8gdGhlIGFyZ3VtZW50
cy4gQW5kLCB3ZSBrbm93IGhvdyB0byBwb3Agc3RhY2sgYmFjayB0byB0aGUgSklUIHN0YWNrIGZy
YW1lLCBzb3J0CisgICAgLy8gb2Y6IHdlIGtub3cgdGhhdCBpdCdzIHR3byBmcmFtZXMgYmVuZWF0
aCB1cy4gVGhpcyBpcyB0ZXJyaWJsZSBhbmQgSSBmZWVsCisgICAgLy8gYXNoYW1lZCBvZiBpdCwg
YnV0IGl0IHdpbGwgd29yayBmb3Igbm93LgorICAgIAorICAgIENBcmd1bWVudEdldHRlciBhcmd1
bWVudHMoaml0KTsKKyAgICAKKyAgICAvLyBGaXJzdCByZWNvdmVyIG91ciBjYWxsIGZyYW1lIGFu
ZCB0YWcgdGhpbmdpZXMuCisgICAgYXJndW1lbnRzLmxvYWROZXh0UHRyKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKTsKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0
KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgIGpp
dC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnTWFzayksIEdQUkluZm86OnRh
Z01hc2tSZWdpc3Rlcik7CisgICAgCisgICAgLy8gRG8gc29tZSB2YWx1ZSBwcm9maWxpbmcuCisg
ICAgaWYgKGV4aXQubV9wcm9maWxlVmFsdWVGb3JtYXQgIT0gSW52YWxpZFZhbHVlRm9ybWF0KSB7
CisgICAgICAgIGFyZ3VtZW50cy5sb2FkTmV4dEFuZEJveChleGl0Lm1fcHJvZmlsZVZhbHVlRm9y
bWF0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAgCisgICAgICAgIGlmIChleGl0Lm1f
a2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9PSBCYWRJbmRleGluZ1R5cGUpIHsKKyAg
ICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhp
dFByb2ZpbGU7CisgICAgICAgICAgICBpZiAoQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGUgPSBq
aXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbiktPmdldEFycmF5UHJvZmlsZShjb2Rl
T3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAgICAgICAgICAgaml0LmxvYWRQdHIoTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6bm9uQXJnR1BSMCwgSlNDZWxsOjpzdHJ1Y3R1
cmVPZmZzZXQoKSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAgICAgICAgICAgICAgIGppdC5z
dG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIxLCBhcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RT
ZWVuU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAgIGppdC5sb2FkOChNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIxLCBTdHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9m
ZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgICAgICAgICAgICAgaml0Lm1vdmUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwgR1BSSW5mbzo6bm9uQXJnR1BSMik7Cisg
ICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUkluZm86Om5vbkFyZ0dQUjEsIEdQUkluZm86
Om5vbkFyZ0dQUjIpOworICAgICAgICAgICAgICAgIGppdC5vcjMyKEdQUkluZm86Om5vbkFyZ0dQ
UjIsIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJlc3MoYXJyYXlQcm9maWxlLT5hZGRyZXNz
T2ZBcnJheU1vZGVzKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgaWYgKCEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkKKyAgICAgICAgICAgIGppdC5zdG9yZTY0
KEdQUkluZm86Om5vbkFyZ0dQUjAsIGV4aXQubV92YWx1ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNr
ZXQoMCkpOworICAgIH0KKyAgICAKKyAgICAvLyBTdGFydCBieSBkdW1waW5nIGFsbCBhcmd1bWVu
dCBleGl0IHZhbHVlcyB0byB0aGUgc3RhY2suCisgICAgCisgICAgVmVjdG9yPEV4aXRBcmd1bWVu
dEZvck9wZXJhbmQsIDE2PiBzb3J0ZWRBcmd1bWVudHM7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
ZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgRXhpdFZhbHVlIHZhbHVlID0g
ZXhpdC5tX3ZhbHVlc1tpXTsKKyAgICAgICAgaW50IG9wZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9w
ZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAgICAgIGlmICghdmFsdWUuaXNBcmd1bWVu
dCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIAorICAgICAgICBzb3J0ZWRBcmd1
bWVudHMuYXBwZW5kKEV4aXRBcmd1bWVudEZvck9wZXJhbmQodmFsdWUuZXhpdEFyZ3VtZW50KCks
IG9wZXJhbmQpKTsKKyAgICB9CisgICAgc3RkOjpzb3J0KHNvcnRlZEFyZ3VtZW50cy5iZWdpbigp
LCBzb3J0ZWRBcmd1bWVudHMuZW5kKCksIGxlc3NlckFyZ3VtZW50SW5kZXgpOworICAgIAorICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3J0ZWRBcmd1bWVudHMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCBhcmd1bWVudCA9IHNvcnRlZEFyZ3VtZW50
c1tpXTsKKyAgICAgICAgCisgICAgICAgIGFyZ3VtZW50cy5sb2FkTmV4dEFuZEJveChhcmd1bWVu
dC5leGl0QXJndW1lbnQoKS5mb3JtYXQoKSwgR1BSSW5mbzo6bm9uQXJnR1BSMCk7CisgICAgICAg
IGppdC5zdG9yZTY0KEdQUkluZm86Om5vbkFyZ0dQUjAsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVz
c0Zvcihhcmd1bWVudC5vcGVyYW5kKCkpKTsKKyAgICB9CisgICAgCisgICAgLy8gQm94IGFueXRo
aW5nIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2ssIG9yIHRoYXQgaXMgYSBjb25zdGFudC4K
KyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBleGl0Lm1fdmFsdWVzLnNpemUoKTsgaS0tOykg
eworICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0Lm1fdmFsdWVzW2ldOworICAgICAgICBp
bnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFuZEZvckluZGV4KGkpOworICAgICAgICAK
KyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcyA9IEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcihvcGVyYW5kKTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAodmFsdWUu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgICAgIGppdC5z
dG9yZTY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5k
ZWZpbmVkKCkpKSwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
eGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZhbHVlLmNvbnN0YW50KCkpKSwgYWRkcmVz
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0lu
dDMyOgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAgICAgICAgICAgICAgICBhZGRyZXNzLndp
dGhPZmZzZXQoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5w
YXlsb2FkKSksCisgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAg
aml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7
CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcyk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToK
KyAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKGFkZHJlc3MsIEZQUkluZm86OmZwUmVnVDApOwor
ICAgICAgICAgICAgaml0LmJveERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdU
MCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjpyZWdUMCwgYWRkcmVzcyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVBcmd1bWVudDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIGhhbmRsZUV4aXRDb3VudHMoaml0LCBleGl0KTsKKyAgICByZWlmeUlubGluZWRD
YWxsRnJhbWVzKGppdCwgZXhpdCk7CisgICAgCisgICAgLy8gQWRqdXN0IHRoZSBDIHN0YWNrLiBU
aGUgZnJhbWUgcG9pbnRlciBzaG91bGQgYXQgdGhpcyBwb2ludCBzdGlsbCBob2xkIHRoZSBwb2lu
dGVyCisgICAgLy8gdG8gdGhlIGZyYW1lIG9mIHRoZSBMTFZNLWdlbmVyYXRlZCBjb2RlLgorICAg
IAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucG9wKE1hY3JvQXNz
ZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnBvcChHUFJJbmZvOjpub25B
cmdHUFIwKTsgLy8gaWdub3JlIHRoZSByZXN1bHQuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0
U2V0T3BlcmFuZCAhPSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7CisgICAgICAg
IGppdC5sb2FkNjQoCisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoZXhp
dC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAg
IH0KKyAgICAKKyAgICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoaml0LCBleGl0KTsKKyAgICAKKyAg
ICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBjb2RlQmxvY2spOwor
ICAgIGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKKyAgICAgICAgc2hvdWxkU2hvd0Rp
c2Fzc2VtYmx5KCksCisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkZUTCBPU1IgZXhp
dCAjJXUgKGJjIyV1LCAlcykgZnJvbSAlcyIsCisgICAgICAgICAgICBleGl0SUQsIGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4
aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSkpOworfQorCitleHRlcm4g
IkMiIHZvaWQqIGNvbXBpbGVGVExPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgZXhp
dElEKQoreworICAgIFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJGVEwgT1NSIEV4aXQg
Q29tcGlsYXRpb24iKTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNv
ZGVCbG9jaygpOworICAgIAorICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgIEFTU0VSVChjb2Rl
QmxvY2stPmdldEpJVFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpOworICAgIAorICAgIEpTR2xv
YmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgT1NS
RXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5mdGwoKS0+b3NyRXhpdFtleGl0
SURdOworICAgIAorICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1f
Y29kZU9yaWdpbik7CisgICAgCisgICAgY29tcGlsZVN0dWIoZXhpdElELCBleGl0LCBnbG9iYWxE
YXRhLCBjb2RlQmxvY2spOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihj
b2RlQmxvY2spOworICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICBleGl0LmNvZGVM
b2NhdGlvbkZvclJlcGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2Nv
ZGUuY29kZSgpKSk7CisgICAgCisgICAgcmV0dXJuIGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRh
YmxlQWRkcmVzcygpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9TUkV4aXRDb21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMT1NSRXhpdENvbXBpbGVyX2gKKyNkZWZpbmUgRlRMT1NSRXhpdENvbXBpbGVyX2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNs
dWRlICJERkdPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
KworLy8gVGFrZXMgdGhlIGNhbGwgZnJhbWUgYW5kIHRoZSBpbmRleCBvZiB0aGUgZXhpdCwgYW5k
IHJldHVybnMgdGhlIGFkZHJlc3MgdG8KKy8vIGp1bXAgdG8uCitleHRlcm4gIkMiIHsKK3ZvaWQq
IERGR19PUEVSQVRJT04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgZXhp
dElEKSBXVEZfSU5URVJOQUw7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT1NSRXhpdENvbXBpbGVyX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNDgw
NDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMzUsMTkgKzEzNSwyMCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHplcm9FeHQoTFZh
bHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBidWlsZFpFeHQobV9idWlsZGVyLCB2YWx1
ZSwgdHlwZSk7IH0KICAgICBMVmFsdWUgaW50Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUp
IHsgcmV0dXJuIGJ1aWxkSW50Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExW
YWx1ZSBjYXN0VG9JbnQzMihMVmFsdWUgdmFsdWUpIHsgcmV0dXJuIGludENhc3QodmFsdWUsIGlu
dDMyKTsgfQorICAgIExWYWx1ZSBpbnRUb1B0cihMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsg
cmV0dXJuIGJ1aWxkSW50VG9QdHIobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KICAgICAKICAg
ICBMVmFsdWUgZ2V0KExWYWx1ZSByZWZlcmVuY2UpIHsgcmV0dXJuIGJ1aWxkTG9hZChtX2J1aWxk
ZXIsIHJlZmVyZW5jZSk7IH0KICAgICBMVmFsdWUgc2V0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHJl
ZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRTdG9yZShtX2J1aWxkZXIsIHZhbHVlLCByZWZlcmVuY2Up
OyB9CiAgICAgCiAgICAgTFZhbHVlIGxvYWQoVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJl
ZlR5cGUpCiAgICAgewotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gZ2V0KGJ1aWxkSW50VG9QdHIo
bV9idWlsZGVyLCBwb2ludGVyLnZhbHVlKCksIHJlZlR5cGUpKTsKKyAgICAgICAgTFZhbHVlIHJl
c3VsdCA9IGdldChpbnRUb1B0cihwb2ludGVyLnZhbHVlKCksIHJlZlR5cGUpKTsKICAgICAgICAg
cG9pbnRlci5oZWFwKCkuZGVjb3JhdGVJbnN0cnVjdGlvbihyZXN1bHQsICptX2hlYXBzKTsKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgdm9pZCBzdG9yZShMVmFsdWUgdmFsdWUs
IFR5cGVkUG9pbnRlciBwb2ludGVyLCBMVHlwZSByZWZUeXBlKQogICAgIHsKLSAgICAgICAgTFZh
bHVlIHJlc3VsdCA9IHNldCh2YWx1ZSwgYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHBvaW50ZXIu
dmFsdWUoKSwgcmVmVHlwZSkpOworICAgICAgICBMVmFsdWUgcmVzdWx0ID0gc2V0KHZhbHVlLCBp
bnRUb1B0cihwb2ludGVyLnZhbHVlKCksIHJlZlR5cGUpKTsKICAgICAgICAgcG9pbnRlci5oZWFw
KCkuZGVjb3JhdGVJbnN0cnVjdGlvbihyZXN1bHQsICptX2hlYXBzKTsKICAgICB9CiAgICAgCkBA
IC0yNDQsMTAgKzI0NSwxOCBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIHNlbGVjdChMVmFsdWUgdmFs
dWUsIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVybiBidWlsZFNlbGVjdCht
X2J1aWxkZXIsIHZhbHVlLCB0YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgTFZhbHVlIGV4dHJhY3RW
YWx1ZShMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gYnVpbGRFeHRyYWN0
VmFsdWUobV9idWlsZGVyLCBhZ2dWYWwsIGluZGV4KTsgfQogICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZlY3RvclR5cGU+CisgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uLCBjb25z
dCBWZWN0b3JUeXBlJiB2ZWN0b3IpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0
aW9uLCB2ZWN0b3IpOyB9CiAgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVy
biBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFs
dWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBm
dW5jdGlvbiwgYXJnMSk7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1
ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rp
b24sIGFyZzEsIGFyZzIpOyB9CiAgICAgCisgICAgTFZhbHVlIGNvbnZlcnRUb1RhaWxDYWxsKExW
YWx1ZSBjYWxsKQorICAgIHsKKyAgICAgICAgc2V0VGFpbENhbGwoY2FsbCwgSXNUYWlsQ2FsbCk7
CisgICAgICAgIHJldHVybiBjYWxsOworICAgIH0KKyAgICAKICAgICB2b2lkIGp1bXAoTEJhc2lj
QmxvY2sgZGVzdGluYXRpb24pIHsgYnVpbGRCcihtX2J1aWxkZXIsIGRlc3RpbmF0aW9uKTsgfQog
ICAgIHZvaWQgYnJhbmNoKExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBMQmFz
aWNCbG9jayBub3RUYWtlbikgeyBidWlsZENvbmRCcihtX2J1aWxkZXIsIGNvbmRpdGlvbiwgdGFr
ZW4sIG5vdFRha2VuKTsgfQogICAgIHZvaWQgcmV0KExWYWx1ZSB2YWx1ZSkgeyBidWlsZFJldCht
X2J1aWxkZXIsIHZhbHVlKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
aAkocmV2aXNpb24gMTQ4MDQ3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiREZHR3JhcGgu
aCIKICNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMSklUQ29kZS5o
IgorI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKICNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewpAQCAtNDks
NiArNTAsNyBAQCBwdWJsaWM6CiAgICAgTE1vZHVsZSBtb2R1bGU7CiAgICAgTFZhbHVlIGZ1bmN0
aW9uOwogICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOworICAgIFZlY3RvcjxPU1JFeGl0Q29t
cGlsYXRpb25JbmZvPiBvc3JFeGl0OwogICAgIAogICAgIHZvaWQgZHVtcFN0YXRlKGNvbnN0IGNo
YXIqIHdoZW4pOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RlRMVGh1bmtzLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0dQUklu
Zm8uaCIKKyNpbmNsdWRlICJERkdGUFJJbmZvLmgiCisjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBp
bGVyLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNl
IERGRzsKKworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5l
cmF0b3IoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQoreworICAgIE1hY3JvQXNzZW1ibGVyIGpp
dDsKKyAgICAKKyAgICBzaXplX3Qgc2NyYXRjaFNpemUgPSBzaXplb2YoRW5jb2RlZEpTVmFsdWUp
ICogKEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBGUFJJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICBTY3JhdGNoQnVmZmVyKiBzY3JhdGNoQnVmZmVyID0g
Z2xvYmFsRGF0YS0+c2NyYXRjaEJ1ZmZlckZvclNpemUoc2NyYXRjaFNpemUpOworICAgIEVuY29k
ZWRKU1ZhbHVlKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxFbmNvZGVkSlNWYWx1ZSo+KHNjcmF0Y2hC
dWZmZXItPmRhdGFCdWZmZXIoKSk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0LnN0
b3JlNjQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpLCBidWZmZXIgKyBpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
czsgKytpKSB7CisgICAgICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KGJ1ZmZlciArIEdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBpKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMSk7CisgICAgICAgIGppdC5zdG9yZURvdWJsZShGUFJJbmZvOjp0b0FyZ3Vt
ZW50UmVnaXN0ZXIoaSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAgIH0KKyAgICAKKyAgICAv
LyBUZWxsIEdDIG1hcmsgcGhhc2UgaG93IG11Y2ggb2YgdGhlIHNjcmF0Y2ggYnVmZmVyIGlzIGFj
dGl2ZSBkdXJpbmcgY2FsbC4KKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIEdQUkluZm86Om5vbkFyZ0dQ
UjEpOworICAgIGppdC5zdG9yZVB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzY3Jh
dGNoU2l6ZSksIEdQUkluZm86Om5vbkFyZ0dQUjEpOworCisgICAgLy8gYXJndW1lbnQgMCBpcyBh
bHJlYWR5IHRoZSBjYWxsIGZyYW1lLgorICAgIGppdC5tb3ZlKEdQUkluZm86Om5vbkFyZ0dQUjAs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgZnVuY3Rp
b25DYWxsID0gaml0LmNhbGwoKTsKKyAgICAKKyAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0cihzY3JhdGNoQnVmZmVyLT5hY3RpdmVMZW5ndGhQdHIoKSksIEdQUkluZm86
Om5vblByZXNlcnZlZE5vblJldHVybkdQUik7CisgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyKDApLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIp
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1iZXJPZkFy
Z3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVy
cyArIGkpLCBHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIpOworICAgICAgICBqaXQu
bG9hZERvdWJsZShHUFJJbmZvOjpub25QcmVzZXJ2ZWROb25SZXR1cm5HUFIsIEZQUkluZm86OnRv
QXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5s
b2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKKyAgICAK
KyAgICBqaXQuanVtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgCisgICAgTGlua0J1
ZmZlciBwYXRjaEJ1ZmZlcigqZ2xvYmFsRGF0YSwgJmppdCwgR0xPQkFMX1RIVU5LX0lEKTsKKyAg
ICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29tcGlsZUZUTE9TUkV4aXQpOworICAg
IHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBPU1IgZXhpdCBnZW5lcmF0
aW9uIHRodW5rIikpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExU
aHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5r
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMVGh1bmtzX2gKKyNkZWZpbmUgRlRM
VGh1bmtzX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTR2xvYmFsRGF0YTsKKworbmFtZXNwYWNlIEZUTCB7CisKK01hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0
YSopOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKworI2VuZGlmIC8vIEZUTFRIdW5rc19oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0LmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6
OkZUTDsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbHVlRm9ybWF0
IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgSW52YWxpZFZhbHVl
Rm9ybWF0OgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVGb3JtYXRJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdFVJbnQzMjoKKyAgICAgICAgb3V0
LnByaW50KCJVSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXRC
b29sZWFuOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVGb3JtYXRKU1ZhbHVlOgorICAgICAgICBvdXQucHJpbnQoIkpTVmFsdWUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVGb3JtYXREb3VibGU6CisgICAgICAg
IG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZUZvcm1hdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMVmFsdWVGb3JtYXRfaAorI2RlZmluZSBGVExWYWx1ZUZvcm1hdF9oCisKKyNpbmNsdWRlIDx3
dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gTm90
ZSB0aGF0IHRoaXMgaXMgYXdrd2FyZGx5IHNpbWlsYXIgdG8gRGF0YUZvcm1hdCBpbiBvdGhlciBw
YXJ0cyBvZiBKU0MsIGV4Y2VwdCB0aGF0CisvLyB1bmxpa2UgRGF0YUZvcm1hdCBhbmQgbGlrZSBW
YWx1ZVJlY292ZXJ5LCBpdCBkaXN0aW5ndWlzaGVzIGJldHdlZW4gVUludDMyIGFuZCBJbnQzMi4K
KworZW51bSBWYWx1ZUZvcm1hdCB7CisgICAgSW52YWxpZFZhbHVlRm9ybWF0LAorICAgIFZhbHVl
Rm9ybWF0SW50MzIsCisgICAgVmFsdWVGb3JtYXRVSW50MzIsCisgICAgVmFsdWVGb3JtYXRCb29s
ZWFuLAorICAgIFZhbHVlRm9ybWF0SlNWYWx1ZSwKKyAgICBWYWx1ZUZvcm1hdERvdWJsZQorfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpGVEw6OlZhbHVlRm9ybWF0KTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8v
IEZUTFZhbHVlRm9ybWF0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExW
YWx1ZVNvdXJjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFZhbHVlU291cmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJGVExWYWx1ZVNvdXJjZS5oIgorCisjaWYgRU5BQkxFKEZUTF9K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBWYWx1ZVNvdXJj
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgY2FzZSBTb3VyY2VOb3RTZXQ6CisgICAgICAgIG91dC5wcmludCgiU291cmNlTm90U2V0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5KU1N0YWNrOgorICAgICAgICBv
dXQucHJpbnQoIlZhbHVlSW5KU1N0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
dDMySW5KU1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIkludDMySW5KU1N0YWNrIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50
KCJEb3VibGVJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVJbkxv
Y2FsczoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluTG9jYWxzIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEludDMySW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiSW50MzJJbkxv
Y2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6CisgICAg
ICAgIG91dC5wcmludCgiQm9vbGVhbkluTG9jYWxzIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIERvdWJsZUluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZUluTG9jYWxzIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKKyAgICAgICAgb3V0
LnByaW50KCJBcmd1bWVudHNTb3VyY2UiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU291
cmNlSXNEZWFkOgorICAgICAgICBvdXQucHJpbnQoIlNvdXJjZUlzRGVhZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBIYXZlTm9kZToKKyAgICAgICAgb3V0LnByaW50KCJOb2RlKCIsIG5v
ZGUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNl
bmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExWYWx1ZVNvdXJjZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVmFsdWVTb3VyY2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRM
VmFsdWVTb3VyY2VfaAorI2RlZmluZSBGVExWYWx1ZVNvdXJjZV9oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitlbnVtIFZhbHVlU291
cmNlS2luZCB7CisgICAgU291cmNlTm90U2V0LAorICAgIFZhbHVlSW5KU1N0YWNrLAorICAgIElu
dDMySW5KU1N0YWNrLAorICAgIERvdWJsZUluSlNTdGFjaywKKyAgICBWYWx1ZUluTG9jYWxzLAor
ICAgIEludDMySW5Mb2NhbHMsCisgICAgQm9vbGVhbkluTG9jYWxzLAorICAgIERvdWJsZUluTG9j
YWxzLAorICAgIEFyZ3VtZW50c1NvdXJjZSwKKyAgICBTb3VyY2VJc0RlYWQsCisgICAgSGF2ZU5v
ZGUKK307CisKK2NsYXNzIFZhbHVlU291cmNlIHsKK3B1YmxpYzoKKyAgICBWYWx1ZVNvdXJjZSgp
CisgICAgICAgIDogbV92YWx1ZShTb3VyY2VOb3RTZXQpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBleHBsaWNpdCBWYWx1ZVNvdXJjZShWYWx1ZVNvdXJjZUtpbmQga2luZCkKKyAgICAgICAgOiBt
X3ZhbHVlKGtpbmQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBWYWx1ZVNvdXJj
ZShERkc6Ok5vZGUqIG5vZGUpCisgICAgICAgIDogbV92YWx1ZShiaXR3aXNlX2Nhc3Q8dWludHB0
cl90Pihub2RlKSkKKyAgICB7CisgICAgfQorICAgIAorICAgIFZhbHVlU291cmNlS2luZCBraW5k
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlIDwgc3RhdGljX2Nhc3Q8dWludHB0
cl90PihIYXZlTm9kZSkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVTb3Vy
Y2VLaW5kPihtX3ZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEhhdmVOb2RlOworICAgIH0KKyAgICAK
KyAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBTb3VyY2VOb3RT
ZXQ7IH0KKyAgICAKKyAgICBERkc6Ok5vZGUqIG5vZGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBIYXZlTm9kZSk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
REZHOjpOb2RlKj4obV92YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVpbnRwdHJfdCBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
KyNlbmRpZiAvLyBGVExWYWx1ZVNvdXJjZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197914</attachid>
            <date>2013-04-12 17:35:00 -0700</date>
            <delta_ts>2013-04-12 23:33:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>192857</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MzIzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1OSBA
QAorMjAxMy0wNC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGltcGxlbWVudHMgT1NS
IGV4aXQsIGFuZCBoaWxhcmlvdXNseSwgaXQgYWN0dWFsbHkgd29ya3MuIFRoZSBpZGVhIGlzIHRv
IGhhdmUKKyAgICAgICAgTExWTSBjYWxsIGEgbm8tcmV0dXJuIGZ1bmN0aW9uIG9uIHRoZSBvZmYt
cmFtcCwgcGFzc2luZyBpdCBldmVyeXRoaW5nIHdlIGtub3cgYWJvdXQKKyAgICAgICAgYnl0ZWNv
ZGUgc3RhdGUgdGhhdCBpc24ndCBhbHJlYWR5IGZsdXNoZWQgdG8gdGhlIGNhbGwgZnJhbWUuIE91
ciBvd24gSklUIHRha2VzIGNhcmUKKyAgICAgICAgb2YgdGhlIHJlc3QuCisgICAgICAgIAorICAg
ICAgICBUaGUgZGV0YWlscyBhcmUgZGVzY3JpYmVkIGluIEZUTE9TUkV4aXQuaC4KKworICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzOjp3aXRoT2Zmc2V0
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5r
QnVmZmVyOjpvZmZzZXRPZik6CisgICAgICAgIChMaW5rQnVmZmVyKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvUmVw
YXRjaEJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpSZXBhdGNoQnVmZmVyOjpSZXBhdGNoQnVmZmVy
KToKKyAgICAgICAgKEpTQzo6UmVwYXRjaEJ1ZmZlcjo6flJlcGF0Y2hCdWZmZXIpOgorICAgICAg
ICAoUmVwYXRjaEJ1ZmZlcik6CisgICAgICAgICogYnl0ZWNvZGUvT3BlcmFuZHMuaDoKKyAgICAg
ICAgKE9wZXJhbmRzKToKKyAgICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6Ojo6ZHVtcCk6Cisg
ICAgICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFi
c3RyYWN0U3RhdGU6OmluaXRpYWxpemUpOgorICAgICAgICAqIGRmZy9ERkdHUFJJbmZvLmg6Cisg
ICAgICAgIChERkcpOgorICAgICAgICAoR1BSSW5mbyk6CisgICAgICAgICogZGZnL0RGR01pbmlm
aWVkTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6OmJlbG9uZ3NJbk1pbmlmaWVkR3JhcGgpOgor
ICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAgICAoSlNDOjpERkc6Om5lZWRzT1NS
QmFja3dhcmRSZXdpcmluZyk6CisgICAgICAgIChERkcpOgorICAgICAgICAoSlNDOjpERkc6Om5l
ZWRzT1NSRm9yd2FyZFJld2lyaW5nKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdC5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgIChERkcpOgorICAg
ICAgICAoSlNDOjpERkc6Ok9TUkV4aXQ6OmNvbnZlcnRUb0ZvcndhcmQpOgorICAgICAgICAqIGRm
Zy9ERkdPU1JFeGl0Lmg6CisgICAgICAgIChPU1JFeGl0KToKKyAgICAgICAgKiBkZmcvREZHT1NS
RXhpdEJhc2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6
T1NSRXhpdEJhc2U6OmNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyk6CisgICAg
ICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6OmRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNpb24p
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0QmFzZS5oOiBBZGRlZC4KKyAgICAgICAgKERGRyk6
CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdEJhc2U6Ok9TUkV4aXRCYXNlKToKKyAgICAgICAg
KE9TUkV4aXRCYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6Y29uc2lkZXJB
ZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGls
ZXIuY3BwOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6T1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdCk6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6aGFuZGxl
RXhpdENvdW50cyk6CisgICAgICAgIChKU0M6OkRGRzo6cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyk6
CisgICAgICAgIChKU0M6OkRGRzo6YWRqdXN0QW5kSnVtcFRvVGFyZ2V0KToKKyAgICAgICAgKiBk
ZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmg6CisgICAgICAgIChERkcpOgorICAgICAgICAq
IGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKERGRyk6Cisg
ICAgICAgIChKU0M6OkRGRzo6cHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KToKKyAgICAgICAg
KiBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWx1
ZVNvdXJjZS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlv
bik6CisgICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAgICAgICAo
SlNDOjpERkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBm
dGwvRlRMQWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6OmZ1bmN0aW9uVHlwZSk6
CisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OnR5cGVPZik6CisgICAgICAgIChK
U0M6OkZUTDo6YnVpbGRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpzZXRUYWlsQ2FsbCk6Cisg
ICAgICAgICogZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHA6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0QW5kQm94KToK
KyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg6IEFkZGVkLgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKEpTQzo6RlRMOjppc0FyZ3VtZW50UmVnaXN0ZXIpOgorICAgICAgICAoQ0Fy
Z3VtZW50R2V0dGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OkNBcmd1
bWVudEdldHRlcik6CisgICAgICAgIChKU0M6OkZUTDo6Q0FyZ3VtZW50R2V0dGVyOjpsb2FkTmV4
dDgpOgorICAgICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6bG9hZE5leHQzMik6Cisg
ICAgICAgIChKU0M6OkZUTDo6Q0FyZ3VtZW50R2V0dGVyOjpsb2FkTmV4dDY0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0UHRyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0RG91YmxlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpDQXJndW1lbnRHZXR0ZXI6Om5leHRBZGRyZXNzKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGls
ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTEV4
aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0QXJndW1lbnQuaDog
QWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRp
b24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJn
dW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdEFyZ3VtZW50Ojpv
cGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6Zm9ybWF0KToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0QXJndW1lbnQ6OndpdGhGb3JtYXQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRB
cmd1bWVudDo6cmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGZ0bC9GVExFeGl0QXJndW1lbnRG
b3JPcGVyYW5kLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6
OkV4aXRBcmd1bWVudEZvck9wZXJhbmQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExFeGl0QXJn
dW1lbnRGb3JPcGVyYW5kLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEV4aXRB
cmd1bWVudEZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudEZvck9w
ZXJhbmQ6OkV4aXRBcmd1bWVudEZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRB
cmd1bWVudEZvck9wZXJhbmQ6Om9wZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZDo6ZXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0
QXJndW1lbnRGb3JPcGVyYW5kOjpvcGVyYW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpsZXNzZXJB
cmd1bWVudEluZGV4KToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFyZ3VtZW50TGlzdC5oOiBBZGRl
ZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5j
cHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtH
ZW5lcmF0b3I6OkV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFRo
dW5rR2VuZXJhdG9yOjp+RXhpdFRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpF
eGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVuayk6CisgICAgICAgICogZnRsL0ZUTEV4aXRUaHVu
a0dlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChFeGl0VGh1bmtH
ZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExFeGl0VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpkdW1wKToKKyAgICAgICAg
KiBmdGwvRlRMRXhpdFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEV4
aXRWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjpFeGl0VmFsdWUpOgorICAg
ICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRM
OjpFeGl0VmFsdWU6OmRlYWQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aW5KU1N0
YWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFja0FzSW50MzIpOgor
ICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUpOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6Y29uc3RhbnQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNEZWFkKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0VmFsdWU6OmlzSW5KU1N0YWNrU29tZWhvdyk6CisgICAgICAgIChKU0M6OkZU
TDo6RXhpdFZhbHVlOjppc0NvbnN0YW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6
OmlzQXJndW1lbnQpOgorICAgICAgICAqIGZ0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oOgorICAgICAg
ICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpub1ZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRM
OjppbnQzMlZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjp1SW50MzJWYWx1ZSk6CisgICAgICAg
IChKU0M6OkZUTDo6Ym9vbGVhblZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpqc1ZhbHVlVmFs
dWUpOgorICAgICAgICAoSlNDOjpGVEw6OmRvdWJsZVZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRM
SklUQ29kZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6SklUQ29kZTo6aW5pdGlhbGl6ZUV4aXRU
aHVua3MpOgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpKSVRDb2RlOjpleGl0
VGh1bmtzKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5oOgorICAgICAgICAoSklUQ29kZSk6
CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEZUTCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Okxvd2VyREZHVG9MTFZNKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjp0cmFuc2ZlckFuZENoZWNrQXJndW1lbnRzKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2Vy
REZHVG9MTFZNOjpjb21waWxlR2V0TG9jYWwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlU2V0TG9jYWwpOgorICAgICAgICAoTG93ZXJERkdUb0xMVk0pOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTW92SGludCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVab21iaWVIaW50KToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhpbnRBbmRDaGVjayk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBZGQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhTdWIpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhNdWwpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhOZWdhdGUpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlVUludDMyVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQ2hlY2tTdHJ1Y3R1cmUpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlR2V0QnlWYWwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZUZvcndhcmQpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjp0ZXJtaW5hdGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpi
YWNrd2FyZFR5cGVDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmZv
cndhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0eXBl
Q2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjphcHBlbmRUeXBlQ2hl
Y2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dJbnQzMik6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd0NlbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpsb3dCb29sZWFuKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6c3BlY3VsYXRlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6aXNMaXZlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dXNl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6aW5pdGlhbGl6ZU9TUkV4aXRT
dGF0ZUZvckJsb2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBwZW5k
T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1
bWVudEZvck5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjp0cnlUb1Nl
dENvbnN0YW50RXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6YWRkRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6
bGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Om9ic2VydmVNb3ZIaW50KToKKyAgICAgICAgKiBmdGwv
RlRMT1NSRXhpdC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRM
OjpPU1JFeGl0OjpPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojpjb2RlTG9j
YXRpb25Gb3JSZXBhdGNoKToKKyAgICAgICAgKEpTQzo6RlRMOjpPU1JFeGl0Ojpjb252ZXJ0VG9G
b3J3YXJkKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdC5oOiBBZGRlZC4KKyAgICAgICAgKEZU
TCk6CisgICAgICAgIChPU1JFeGl0KToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGF0
aW9uSW5mby5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6T1NS
RXhpdENvbXBpbGF0aW9uSW5mbzo6T1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgIChP
U1JFeGl0Q29tcGlsYXRpb25JbmZvKToKKyAgICAgICAgKiBmdGwvRlRMT1NSRXhpdENvbXBpbGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVT
dHViKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb21waWxlRlRMT1NSRXhpdCk6CisgICAgICAgICog
ZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAg
ICogZnRsL0ZUTE91dHB1dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6aW50VG9QdHIp
OgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6bG9hZCk6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0OjpzdG9yZSk6CisgICAgICAgIChPdXRwdXQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91
dHB1dDo6Y2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpjb252ZXJ0VG9UYWlsQ2Fs
bCk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgIChTdGF0ZSk6CisgICAgICAg
ICogZnRsL0ZUTFRodW5rcy5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKiBmdGwv
RlRMVGh1bmtzLmg6IEFkZGVkLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEZUTCk6CisgICAg
ICAgICogZnRsL0ZUTFZhbHVlRm9ybWF0LmNwcDogQWRkZWQuCisgICAgICAgIChXVEYpOgorICAg
ICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQu
aDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoV1RGKToKKyAgICAgICAgKiBmdGwv
RlRMVmFsdWVTb3VyY2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6
OkZUTDo6VmFsdWVTb3VyY2U6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExWYWx1ZVNvdXJjZS5o
OiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChWYWx1ZVNvdXJjZSk6CisgICAgICAg
IChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6OlZhbHVlU291cmNlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpWYWx1ZVNvdXJjZTo6a2luZCk6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6Om9w
ZXJhdG9yISk6CisgICAgICAgIChKU0M6OkZUTDo6VmFsdWVTb3VyY2U6Om5vZGUpOgorCiAyMDEz
LTA0LTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgZm91cnRo
VGllcjogc3dpdGNoIHRvIHVzaW5nIE1DSklUIGFuZCBkaXNhYmxlIGZyYW1lIHBvaW50ZXIgZWxp
bWluYXRpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxNDgz
MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksMzIgQEAKIAkJMEYyMUMy
N0MxNEJFNzI3NjAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjdBMTRCRTcyNzMwMEFEQzY0QiAv
KiBFeGVjdXRpb25IYXJuZXNzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0QxNEJFNzI3QTAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXph
dGlvbktpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyMUMyN0Yx
NEJFQUE4MjAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjFDMjdFMTRCRUFBODAwMEFEQzY0QiAv
KiBCeXRlY29kZUNvbnZlbnRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCRDExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1bWVu
dEdldHRlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjIzNUJCQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcCAqLzsg
fTsKKwkJMEYyMzVCRDIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1bWVudEdldHRlci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQkMxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTENBcmd1bWVudEdldHRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjM1QkQzMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0QXJndW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5j
cHAgKi87IH07CisJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkJF
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJENTE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAgKi87IH07CisJCTBGMjM1QkQ2MTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGMjM1QkQ3MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1l
bnRMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50TGlzdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjM1QkQ4MTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzIxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi87IH07CisJCTBGMjM1QkQ5MTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0
VGh1bmtHZW5lcmF0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OworCQkwRjIzNUJEQTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkM0MTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICovOyB9OworCQkwRjIzNUJEQjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFZh
bHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
MEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTE9TUkV4aXQuY3BwICovOyB9OworCQkwRjIzNUJERDE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEYyMzVCQzcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJERTE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzgxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJERjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhp
dENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjM1QkM5MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwICov
OyB9OworCQkwRjIzNUJFMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDQTE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCRTExNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjIzNUJDQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCAqLzsgfTsK
KwkJMEYyMzVCRTIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0MxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDRDE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuY3BwICovOyB9OworCQkwRjIzNUJFNDE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVGb3JtYXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExW
YWx1ZUZvcm1hdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CisJCTBGMjM1QkU1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDRjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwICovOyB9OworCQkwRjIzNUJFNjE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkQwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZVNvdXJjZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CisJCTBGMjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJFNzE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovOyB9OworCQkwRjIzNUJFQzE3MTc4RTcz
MDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU4MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
QmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRTkxNzE3
OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgKi87IH07CisJCTBGMjM1
QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkVBMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjI0MkRBNzEzRjNCMUU4MDA3QURENEMgLyogV2Vh
a1JlZmVyZW5jZUhhcnZlc3Rlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyNDJEQTUxM0YzQjFCQjAwN0FERDRDIC8qIFdlYWtSZWZlcmVuY2VIYXJ2
ZXN0ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkwRjI1NkMzNjE2MjdCMEFEMDA3RjI3ODMgLyogREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1Bh
dGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93
UGF0aEdlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJEQzEyMTUx
QzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLzsgfTsKQEAgLTEwMjIsNiArMTA0
OCwzMiBAQAogCQkwRjIxQzI3OTE0QkU3MjczMDBBREM2NEIgLyogQ29kZVNwZWNpYWxpemF0aW9u
S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjFDMjdBMTRCRTcyNzMw
MEFEQzY0QiAvKiBFeGVjdXRpb25IYXJuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IEV4ZWN1dGlvbkhhcm5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyMUMyN0UxNEJFQUE4MDAwQURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQnl0ZWNvZGVDb252ZW50aW9ucy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJCQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0Fy
Z3VtZW50R2V0dGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TENBcmd1bWVudEdldHRlci5jcHA7IHBhdGggPSBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQkMxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTENBcmd1bWVudEdldHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExDQXJndW1lbnRHZXR0ZXIuaDsgcGF0aCA9IGZ0bC9GVExDQXJndW1lbnRHZXR0ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TEV4aXRBcmd1bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBG
VExFeGl0QXJndW1lbnQuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkJFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExF
eGl0QXJndW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdEFy
Z3VtZW50Lmg7IHBhdGggPSBmdGwvRlRMRXhpdEFyZ3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRG
b3JPcGVyYW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4
aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRBcmd1bWVudEZvck9w
ZXJhbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDMDE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmg7IHBhdGggPSBmdGwv
RlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50TGlzdC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGl0QXJndW1lbnRMaXN0Lmg7IHBhdGgg
PSBmdGwvRlRMRXhpdEFyZ3VtZW50TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjIzNUJDMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZUTEV4aXRUaHVua0dlbmVyYXRv
ci5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVu
a0dlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGl0VGh1
bmtHZW5lcmF0b3IuaDsgcGF0aCA9IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExFeGl0
VmFsdWUuY3BwOyBwYXRoID0gZnRsL0ZUTEV4aXRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFZhbHVlLmg7IHBhdGggPSBm
dGwvRlRMRXhpdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkM2
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEZUTE9TUkV4aXQuY3BwOyBwYXRoID0gZnRsL0ZUTE9TUkV4aXQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDNzE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JF
eGl0Lmg7IHBhdGggPSBmdGwvRlRMT1NSRXhpdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjIzNUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5m
by5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExPU1JFeGl0Q29tcGlsYXRp
b25JbmZvLmg7IHBhdGggPSBmdGwvRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDOTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NS
RXhpdENvbXBpbGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEZU
TE9TUkV4aXRDb21waWxlci5jcHA7IHBhdGggPSBmdGwvRlRMT1NSRXhpdENvbXBpbGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTE9TUkV4aXRDb21waWxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExPU1JFeGl0Q29tcGlsZXIuaDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQ0IxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TFRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExUaHVu
a3MuY3BwOyBwYXRoID0gZnRsL0ZUTFRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGMjM1QkNDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVGh1bmtzLmg7IHBhdGggPSBmdGwvRlRMVGh1bmtz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExWYWx1ZUZvcm1hdC5jcHA7IHBhdGggPSBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDRTE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMVmFsdWVGb3JtYXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFs
dWVGb3JtYXQuaDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZvcm1hdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjIzNUJDRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2Uu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMVmFsdWVTb3VyY2Uu
Y3BwOyBwYXRoID0gZnRsL0ZUTFZhbHVlU291cmNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFZhbHVlU291cmNlLmg7IHBhdGggPSBm
dGwvRlRMVmFsdWVTb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVC
RTcxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR09TUkV4aXRCYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdP
U1JFeGl0QmFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkU4MTcx
NzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdPU1JFeGl0QmFzZS5oOyBwYXRoID0gZGZnL0RGR09TUkV4aXRCYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkU5MTcxNzhFNzMwMDY5MEM3RiAv
KiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJFQTE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRQcmVwYXJhdGlvbi5oOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRQcmVwYXJhdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjI0
MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMjU2QzM0MTYyN0IwQUEwMDdGMjc4MyAvKiBERkdD
YWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oOyBw
YXRoID0gZGZnL0RGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0Zp
eHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMjAyNSwxNyArMjA3NywyOCBAQAogCQkwRkVBMDlGQzE3MDUxMzdG
MDBCQjcyMkMgLyogZnRsICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJicmV2aWF0aW9ucy5oICov
LAogCQkJCTBGRUEwQTE3MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuY3BwICov
LAogCQkJCTBGRUEwQTE4MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXAuaCAqLywK
IAkJCQkwRkVBMEExOTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJzdHJhY3RIZWFwUmVwb3NpdG9y
eS5jcHAgKi8sCiAJCQkJMEZFQTBBMUExNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVh
cFJlcG9zaXRvcnkuaCAqLywKLQkJCQkwRkVBMDlGRDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQWJi
cmV2aWF0aW9ucy5oICovLAogCQkJCTBGRUEwOUZFMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBh
YmlsaXRpZXMuY3BwICovLAogCQkJCTBGRUEwOUZGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDYXBh
YmlsaXRpZXMuaCAqLywKKwkJCQkwRjIzNUJCQjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3Vt
ZW50R2V0dGVyLmNwcCAqLywKKwkJCQkwRjIzNUJCQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0Fy
Z3VtZW50R2V0dGVyLmggKi8sCiAJCQkJMEZFQTBBMjUxNzA5NjIzQjAwQkI3MjJDIC8qIEZUTENv
bW1vblZhbHVlcy5jcHAgKi8sCiAJCQkJMEZFQTBBMjExNzA5NjA2OTAwQkI3MjJDIC8qIEZUTENv
bW1vblZhbHVlcy5oICovLAogCQkJCTBGRUEwQTAwMTcwNTEzREIwMEJCNzIyQyAvKiBGVExDb21w
aWxlLmNwcCAqLywKIAkJCQkwRkVBMEEwMTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMQ29tcGlsZS5o
ICovLAorCQkJCTBGMjM1QkJEMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3Bw
ICovLAorCQkJCTBGMjM1QkJFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuaCAq
LywKKwkJCQkwRjIzNUJCRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5jcHAgKi8sCisJCQkJMEYyMzVCQzAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1
bWVudEZvck9wZXJhbmQuaCAqLywKKwkJCQkwRjIzNUJDMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
RXhpdEFyZ3VtZW50TGlzdC5oICovLAorCQkJCTBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwICovLAorCQkJCTBGMjM1QkMzMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0b3IuaCAqLywKKwkJCQkwRjIzNUJDNDE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMRXhpdFZhbHVlLmNwcCAqLywKKwkJCQkwRjIzNUJDNTE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMRXhpdFZhbHVlLmggKi8sCiAJCQkJMEZFQTBBMkIxNzBCNjYxOTAwQkI3MjJDIC8q
IEZUTEZvcm1hdHRlZFZhbHVlLmggKi8sCiAJCQkJMEZFQTBBMjYxNzA5NjIzQjAwQkI3MjJDIC8q
IEZUTEludHJpbnNpY1JlcG9zaXRvcnkuY3BwICovLAogCQkJCTBGRUEwQTIyMTcwOTYwNjkwMEJC
NzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggKi8sCkBAIC0yMDQ0LDExICsyMTA3LDIy
IEBACiAJCQkJMEZFQTBBMTMxNzA2MzYzNjAwQkI3MjJDIC8qIEZUTExMVk1IZWFkZXJzLmggKi8s
CiAJCQkJMEZFQTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCAq
LywKIAkJCQkwRkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCAq
LywKKwkJCQkwRjIzNUJDNjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi8sCisJ
CQkJMEYyMzVCQzcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuaCAqLywKKwkJCQkwRjIz
NUJDODE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovLAor
CQkJCTBGMjM1QkM5MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwICov
LAorCQkJCTBGMjM1QkNBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCAq
LywKIAkJCQkwRkVBMEEyOTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCAqLywKIAkJ
CQkwRkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCiAJCQkJMEZFQTBB
MTUxNzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCAqLywKIAkJCQkwRkVBMEEwNzE3MDUx
M0RCMDBCQjcyMkMgLyogRlRMU3RhdGUuaCAqLywKKwkJCQkwRjIzNUJDQjE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMVGh1bmtzLmNwcCAqLywKKwkJCQkwRjIzNUJDQzE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMVGh1bmtzLmggKi8sCiAJCQkJMEZFQTBBMUIxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5cGVk
UG9pbnRlci5oICovLAorCQkJCTBGMjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZv
cm1hdC5jcHAgKi8sCisJCQkJMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9y
bWF0LmggKi8sCisJCQkJMEYyMzVCQ0YxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNl
LmNwcCAqLywKKwkJCQkwRjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2Uu
aCAqLywKIAkJCSk7CiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
QEAgLTI3OTgsNiArMjg3Miw4IEBACiAJCQkJMEZEODJFNTMxNDFEQUVERTAwMTc5Qzk0IC8qIERG
R09TUkVudHJ5LmggKi8sCiAJCQkJMEZDMDk3OEUxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4
aXQuY3BwICovLAogCQkJCTBGQzA5NzY4MTQ2OEE2RUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0Lmgg
Ki8sCisJCQkJMEYyMzVCRTcxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNwcCAq
LywKKwkJCQkwRjIzNUJFODE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCAqLywK
IAkJCQk2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5m
by5oICovLAogCQkJCTBGQzA5NzhGMTQ2QTZGNjMwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGls
ZXIuY3BwICovLAogCQkJCTBGQzA5NzZGMTQ2OTNBRUYwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29t
cGlsZXIuaCAqLywKQEAgLTI4MDcsNiArMjg4Myw4IEBACiAJCQkJMEY3MDI1QTgxNzE0QjBGODAw
MzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oICovLAogCQkJCTBGRUZDOUE3MTY4
MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCAqLywKIAkJCQkw
RkVGQzlBODE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5oICov
LAorCQkJCTBGMjM1QkU5MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24u
Y3BwICovLAorCQkJCTBGMjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFy
YXRpb24uaCAqLywKIAkJCQkwRkZGQzk0RjE0RUY5MDk1MDBDNzI1MzIgLyogREZHUGhhc2UuY3Bw
ICovLAogCQkJCTBGRkZDOTUwMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQaGFzZS5oICovLAogCQkJ
CTBGQkUwRjZEMTZDMURCMDEwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2Uu
Y3BwICovLApAQCAtMzE4Myw2ICszMjYxLDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3
N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZC
NjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1QkQyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJn
dW1lbnRHZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkx
MCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEy
NDE3MDk2MDY5MDBCQjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQTBBMzIxNzBENDBCRjAwQkI3MjJDIC8qIERGR0NvbW1vbkRhdGEuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzIwNyw2ICszMjg2LDcgQEAKIAkJCQlCQ0JFMkNBRTE0RTk4NUFBMDAw
NTkzQUQgLyogR0NBc3NlcnRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMDE1QThE
Q0UyMDA4RjM2M0UgLyogR0NBd2FyZUpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlDMjIzOUQxQjE2MjYyQkREMDA1QUM1RkQgLyogR0NUaHJlYWQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGMjM1QkUyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUMyMTEyMkUyMTVERDlBQjMwMDc5MEUzQSAvKiBHQ1RocmVhZFNoYXJlZERhdGEuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGOTMzMkEwMTRDQTdEQ0QwMDg1RjNDNiAvKiBHZXRCeUlkU3Rh
dHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzNDEzNEZGMEE2MDBBRkFEQjUgLyogSGFu
ZGxlLmggaW4gSGVhZGVycyAqLywKQEAgLTMyMzcsNiArMzMxNyw3IEBACiAJCQkJQkMxOEM0MTQw
RTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQxNTBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmVQcmVmaXguaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MjlEOTMwMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGMjM1QkQ0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2Q0NFRkRFMEY0MTNGODkwMEZEN0Y5RSAvKiBKSVRDb2RlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjA3NzZCRjE0RkYwMDJCMDAxMDIzMzIgLyogSklUQ29tcGls
YXRpb25FZmZvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQUY3RUZFMTY1QkE5MUYwMDBDODQ1
NSAvKiBKSVREaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzI1MSw2ICszMzMyLDcg
QEAKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxNjBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBY3RpdmF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NDA0ODAxMzEwMjFBMUQ5MDA4RTdGMDEgLyogSlNBUElW
YWx1ZVdyYXBwZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1QkU0MTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTcwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE4MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MEQxN0Q3MEU4QUQ0
QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTMzMDgsOSAr
MzM5MCwxMSBAQAogCQkJCUMyQ0YzOUMyMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJP
YmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyQjkzMTE2NzExNDcwMDNCMDcxMiAvKiBK
U1dlYWtPYmplY3RNYXBSZWZQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQyNTY2MjE1
RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1
QkQ2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkUzQzYxOTE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNXcmFwcGVy
T2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzNTE1QUUyNTNCMDA4RjM2M0UgLyog
SnVtcFJlcGxhY2VtZW50V2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCRUMx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0ZEOEM5MzBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzJGRkQ2NDEzOTk4NUE4MDBFNTM2NUEgLyogS2V5d29yZExvb2t1cC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTY5QTA3MkEwRUQxQ0U2OTAwRjFGNjgxIC8qIExhYmVsLmggaW4gSGVhZGVycyAq
LywKQEAgLTMzNDEsNiArMzQyNSw3IEBACiAJCQkJODZDMzZFRUEwRUUxMjg5RDAwQjNERjU5IC8q
IE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAy
ODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ2
MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRjIzNUJERTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzNEIxNEMxNkQ0M0UwRDAwMUNEQTVBIC8qIFBvbHlt
b3JwaGljQWNjZXNzU3RydWN0dXJlTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAw
RkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMzgxLDggKzM0NjYsMTAgQEAKIAkJCQlCQzE4QzQ0NTBFMTZGNUNE
MDBCMzQ0NjAgLyogT2JqZWN0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDQ2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyMzVCRDkxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVy
YXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9w
Y29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9w
ZXJhbmRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJENzE3MTc4RTFDMDA2OTBDN0YgLyog
RlRMRXhpdEFyZ3VtZW50TGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVD
RDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTIyOEVEMTQz
NkFCMjcwMDE5NkM0OCAvKiBPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0QjBF
MTZGNUNEMDBCMzQ0NjAgLyogUGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTM0MDgsNiArMzQ5
NSw3IEBACiAJCQkJMEZGNzI5QzAxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3Rh
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNThDMTY3NTQ4MzMwMEY4QUI2RSAvKiBQcm9m
aWxlck9TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNThFMTY3NTQ4M0EwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJFNjE3
MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTM5MTJDMTY3NzFDM0QwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBN0ZCNjEwMDEwNDBDMzhCMDAxN0EyODYgLyogUHJvcGVydHlEZXNj
cmlwdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzk1NDM3RDBFQkE3MEZEMDA3MkI2RDMgLyog
UHJvcGVydHlNYXBIYXNoVGFibGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzQyMCw2ICszNTA4LDcg
QEAKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVj
dEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCREIxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAw
RDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEw
MDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjYwQUMy
MTY3NDBGODMwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmggaW4gSGVhZGVycyAqLywKQEAg
LTM0NDUsNiArMzUzNCw3IEBACiAJCQkJQzIxNjBGRTcxNUY3RTk1RTAwOTQyREZDIC8qIFNsb3RW
aXNpdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1QkUwMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNTE5LDExICszNjA5LDEzIEBA
CiAJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRDJDOTI0MTZEMDFFRTkwMEM3ODAzRiAvKiBTdHJ1Y3R1cmVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyog
VW51c2VkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCREQxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTE9TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJEMTZEMDJCQUYw
MDlFNEZEMiAvKiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxODE2
RDAyRUIyMDA1NUE1REIgLyogREZHQWxsb2NhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZC
OTIxQTE2RDAyRUM1MDA1NUE1REIgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjFCMTZEMDJGMDEwMDU1QTVEQiAvKiBERkdOb2RlQWxsb2NhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCRUUxNzE3OEU3MzAw
NjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
QjkyMUQxNkQwMkYzMDAwNTVBNURCIC8qIERGR1Nsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIxRTE2RDAyRjQ3MDA1NUE1REIgLyogREZHVmFyaWFkaWNGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUYxNkQwMzMwNTAwNTVBNURCIC8qIChudWxs
KSBpbiBIZWFkZXJzICovLApAQCAtMzkxNywxMSArNDAwOSwxNCBAQAogCQkJCTBGNjIwMTc5MTQz
RkNENDgwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMTYwMTVEMTU2MTk4QzkwMEMyNTg3QyAvKiBERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3QyAvKiBE
RkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCRDUxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZDMDk3NkUxNDY4QUI1MTAwQ0YyNDQyIC8qIERGR0Fzc2VtYmx5SGVscGVycy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCRDgxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcy
Q0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkM1NTcwMTQ3MzhGMzUw
MDEyMUU0RiAvKiBERkdDb2RlQmxvY2tzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTlE
MTZCNzJBMDgwMDVERjk1QiAvKiBERkdDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYz
QjNBMUExNTNFNjhGMjAwM0VEMEZGIC8qIERGR0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtMzkzMywxMiArNDAyOCwxNCBAQAogCQkJCTBGQkMwQUU3MTQ5NkM3QzQw
MEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkNGMzlD
MTE2RTE1QTgxMDBERDY5QkUgLyogSlNBUElXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkJEQzE1MTUxQzVENEQwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGMjM1QkRBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dy
YXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTI3MTcwOTYyM0IwMEJCNzIyQyAvKiBG
VExDb21tb25WYWx1ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQ0IxMzI4REY4MjAw
MkIyQUQ3IC8qIERGR0pJVENvbXBpbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjBGMTk5
MTZCNzI5RjYwMDVERjk1QiAvKiBERkdMb25nTGl2ZWRTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjJCREM0RDE1MjI4MTg2MDBDRDg5MTAgLyogREZHTWluaWZpZWROb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjBGMTlDMTZCNzJBMDMwMDVERjk1QiAvKiBERkdOb2RlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBNTgxQkExNTBFOTUyQzAwQjlB
MkQ5IC8qIERGR05vZGVGbGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDRjEzMjhE
RjgyMDAyQjJBRDcgLyogREZHT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4
MkU1NjE0MURBRjA4MDAxNzlDOTQgLyogREZHT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC0zOTk4LDYgKzQwOTUsNyBAQAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFy
aXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc1NzA2REUxMThBMkJDRjAwNTdGODhG
IC8qIEpJVEFyaXRobWV0aWMzMl82NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJFQjE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZDQzg1QTMwRUU3OUI3NDAwMjg4NjgyIC8qIEpJVENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ2RkU1MTIxMUE3MTA0MzAwODdBRTY2IC8qIEpJVENhbGwzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGOTQ0NDE2Njc2MzU0MDBENjE5NzEgLyogSklUQ29kZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTQwMTYsNiArNDExNCw3IEBACiAJCQkJMTQwNTY2QzQxMDdFQzI1NTAwNURC
QzhEIC8qIEpTQVBJVmFsdWVXcmFwcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQw
MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0FycmF5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjEz
NTlCMEE2NzdGNEYwMEE4MTk1RSAvKiBKU0Jhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYy
MzVCRTUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tD
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYw
NjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDAzNyw2ICs0
MTM2LDcgQEAKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVm
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Rjk5MzYwMEZENzMyNTEwMEEwQjJEMCAvKiBKU09O
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTVGNkU2OTUwRTVC
NUY5NzAwOTFFODYwIC8qIEpTUHJvZmlsZXJQcml2YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDEwNSwxMSArNDIwNSwxNCBAQAogCQkJCTBGOUZDOEMzMTRF
MUI1RkUwMEQ1MkFFMCAvKiBQb2x5bW9ycGhpY1B1dEJ5SWRMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk1NzQyRjY1MEREMTFGNUEwMDA5MTdGQiAvKiBQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTk1Q0Q0NTc2MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjM1QkUzMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUFCODM1NjBEQTQzQzMwMDBCQzgzRjMg
LyogUHJvZmlsZU5vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAw
MEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5
QUUxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCRTEx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3
MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFQTBBMzMxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTQxMzEsNiArNDIzNCw3IEBA
CiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRSZXN1
bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8qIFJl
Z0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjM1QkQzMTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1
MTIxNTFDMDgzRDAwNDZENEVGIC8qIFJlZ0V4cE1hdGNoZXNBcnJheS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg0MzEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODQ0MTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTQ4
MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTg4LDYgKzg4LDExIEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICwgb2Zmc2V0KG9mZnNldCkKICAgICAgICAgewogICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBBZGRyZXNzIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRpdGlvbmFsT2Zmc2V0KQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gQWRkcmVzcyhiYXNlLCBvZmZzZXQgKyBhZGRpdGlv
bmFsT2Zmc2V0KTsKKyAgICAgICAgfQogCiAgICAgICAgIFJlZ2lzdGVySUQgYmFzZTsKICAgICAg
ICAgaW50MzJfdCBvZmZzZXQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5OSw2ICsxOTks
MTEgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQobGFiZWwubV9sYWJlbCku
bV9vZmZzZXQ7CiAgICAgfQogCisgICAgdW5zaWduZWQgb2Zmc2V0T2YoUGF0Y2hhYmxlSnVtcCBq
dW1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFwcGx5T2Zmc2V0KGp1bXAubV9qdW1wLm1fbGFi
ZWwpLm1fb2Zmc2V0OworICAgIH0KKwogICAgIC8vIFVwb24gY29tcGxldGlvbiBvZiBhbGwgcGF0
Y2hpbmcgJ0ZJTkFMSVpFX0NPREUoKScgc2hvdWxkIGJlIGNhbGxlZCBvbmNlIHRvCiAgICAgLy8g
Y29tcGxldGUgZ2VuZXJhdGlvbiBvZiB0aGUgY29kZS4gQWx0ZXJuYXRpdmVseSwgY2FsbAogICAg
IC8vIGZpbmFsaXplQ29kZVdpdGhvdXREaXNhc3NlbWJseSgpIGRpcmVjdGx5IGlmIHlvdSBoYXZl
IHlvdXIgb3duIHdheSBvZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaAkocmV2aXNpb24gMTQ4MzE2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNv
bW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC05Myw2ICs5Myw3IEBAIHB1YmxpYzoKICAgICAgICAg
RG91YmxlQ29uZGl0aW9uQml0c19zaG91bGRfbm90X2ludGVyZmVyZV93aXRoX1g4NkFzc2VtYmxl
cl9Db25kaXRpb25fY29kZXMpOwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIgPSBYODZSZWdpc3RlcnM6OmVzcDsKKyAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBmcmFtZVBvaW50ZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6ZWJwOwogCiAjaWYg
RU5BQkxFKEpJVF9DT05TVEFOVF9CTElORElORykKICAgICBzdGF0aWMgYm9vbCBzaG91bGRCbGlu
ZEZvclNwZWNpZmljQXJjaCh1aW50MzJfdCB2YWx1ZSkgeyByZXR1cm4gdmFsdWUgPj0gMHgwMGZm
ZmZmZjsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVm
ZmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9SZXBh
dGNoQnVmZmVyLmgJKHJldmlzaW9uIDE0ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNiArNDYsMjIg
QEAgY2xhc3MgUmVwYXRjaEJ1ZmZlciB7CiBwdWJsaWM6CiAgICAgUmVwYXRjaEJ1ZmZlcihDb2Rl
QmxvY2sqIGNvZGVCbG9jaykKICAgICB7CisjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJ
VkUpCiAgICAgICAgIFJlZlB0cjxKSVRDb2RlPiBjb2RlID0gY29kZUJsb2NrLT5nZXRKSVRDb2Rl
KCk7CiAgICAgICAgIG1fc3RhcnQgPSBjb2RlLT5zdGFydCgpOwogICAgICAgICBtX3NpemUgPSBj
b2RlLT5zaXplKCk7CiAKICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxl
KG1fc3RhcnQsIG1fc2l6ZSk7CisjZWxzZQorICAgICAgICBVTlVTRURfUEFSQU0oY29kZUJsb2Nr
KTsKKyNlbmRpZgogICAgIH0KIAogICAgIH5SZXBhdGNoQnVmZmVyKCkKICAgICB7CisjaWYgRU5B
QkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6
Om1ha2VFeGVjdXRhYmxlKG1fc3RhcnQsIG1fc2l6ZSk7CisjZW5kaWYKICAgICB9CiAKICAgICB2
b2lkIHJlbGluayhDb2RlTG9jYXRpb25KdW1wIGp1bXAsIENvZGVMb2NhdGlvbkxhYmVsIGRlc3Rp
bmF0aW9uKQpAQCAtMTcwLDggKzE3NiwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgor
I2lmIEVOQUJMRShBU1NFTUJMRVJfV1hfRVhDTFVTSVZFKQogICAgIHZvaWQqIG1fc3RhcnQ7CiAg
ICAgc2l6ZV90IG1fc2l6ZTsKKyNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAkocmV2aXNpb24gMTQ4
MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIxNyw2ICsyMTcsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2xvY2Fs
c1tpXSA9IFRyYWl0czo6ZGVmYXVsdFZhbHVlKCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFQs
IDg+IG1fYXJndW1lbnRzOwogICAgIFZlY3RvcjxULCAxNj4gbV9sb2NhbHM7CkBAIC0yNDAsNiAr
MjQyLDEyIEBAIHZvaWQgZHVtcE9wZXJhbmRzKGNvbnN0IE9wZXJhbmRzPFQsIFRyYWkKICAgICB9
CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFRyYWl0cz4KK2lubGluZSB2b2lk
IE9wZXJhbmRzPFQsIFRyYWl0cz46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBkdW1wT3BlcmFuZHMoKnRoaXMsIG91dCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gT3BlcmFuZHNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdB
YnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3
ICs5NSw4IEBAIHZvaWQgQWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZShHcmFwaCYgZ3IKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCktPnByZWRpY3Rpb24o
KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9CisgICAgICAgICAgICBub2Rl
LT52YXJpYWJsZUFjY2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAg
ICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJvb3Qt
PnZhbHVlc0F0SGVhZC5hcmd1bWVudChpKS5zZXQoU3BlY0ludDMyKTsKICAgICAgICAgZWxzZSBp
ZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dQUkluZm8uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dQUkluZm8uaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHUFJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcg
QEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdHlwZWRlZiBNYWNyb0Fzc2Vt
Ymxlcjo6UmVnaXN0ZXJJRCBHUFJSZWc7Ci0jZGVmaW5lIEludmFsaWRHUFJSZWcgKChHUFJSZWcp
LTEpCisjZGVmaW5lIEludmFsaWRHUFJSZWcgKCg6OkpTQzo6REZHOjpHUFJSZWcpLTEpCiAKICNp
ZiBVU0UoSlNWQUxVRTY0KQogY2xhc3MgSlNWYWx1ZVJlZ3MgewpAQCAtMzY3LDcgKzM2Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IEdQUlJlZyByZWdpc3RlckZvckluZGV4W251
bWJlck9mQXJndW1lbnRSZWdpc3RlcnNdID0geyBhcmd1bWVudEdQUjAsIGFyZ3VtZW50R1BSMSwg
YXJndW1lbnRHUFIyLCBhcmd1bWVudEdQUjMsIGFyZ3VtZW50R1BSNCwgYXJndW1lbnRHUFI1IH07
CiAgICAgICAgIHJldHVybiByZWdpc3RlckZvckluZGV4W2luZGV4XTsKICAgICB9Ci0KKyAgICAK
ICAgICBzdGF0aWMgdW5zaWduZWQgdG9JbmRleChHUFJSZWcgcmVnKQogICAgIHsKICAgICAgICAg
QVNTRVJUKHJlZyAhPSBJbnZhbGlkR1BSUmVnKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWluaWZpZWROb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdNaW5pZmllZE5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NiArNTEsNyBAQCBpbmxpbmUgYm9vbCBiZWxvbmdzSW5NaW5pZmllZEdyYXBoKE5vZGVUCiAgICAg
Y2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlQoIW5lZWRzT1NSQmFja3dhcmRSZXdpcmluZyh0eXBlKSAmJiAhbmVl
ZHNPU1JGb3J3YXJkUmV3aXJpbmcodHlwZSkpOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNp
b24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODcsNiArMjg3LDI1IEBAIGlubGluZSBOb2RlRmxhZ3MgZGVmYXVs
dEZsYWdzKE5vZGVUeXBlIG8KICAgICB9CiB9CiAKK2lubGluZSBib29sIG5lZWRzT1NSQmFja3dh
cmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKK3sKKyAgICByZXR1cm4gb3AgPT0gVUludDMyVG9OdW1i
ZXI7Cit9CisKK2lubGluZSBib29sIG5lZWRzT1NSRm9yd2FyZFJld2lyaW5nKE5vZGVUeXBlIG9w
KQoreworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEludDMyVG9Eb3VibGU6CisgICAgY2Fz
ZSBGb3J3YXJkSW50MzJUb0RvdWJsZToKKyAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICBjYXNl
IFVJbnQzMlRvTnVtYmVyOgorICAgIGNhc2UgRG91YmxlQXNJbnQzMjoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHJldmlzaW9uIDE0
ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDE1ICszNiwxMiBAQAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogCiBPU1JFeGl0OjpPU1JFeGl0KEV4aXRLaW5kIGtpbmQsIEpTVmFsdWVTb3VyY2UganNW
YWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSB2YWx1ZVByb2ZpbGUsIFNw
ZWN1bGF0aXZlSklUKiBqaXQsIHVuc2lnbmVkIHN0cmVhbUluZGV4LCB1bnNpZ25lZCByZWNvdmVy
eUluZGV4KQotICAgIDogbV9qc1ZhbHVlU291cmNlKGpzVmFsdWVTb3VyY2UpCisgICAgOiBPU1JF
eGl0QmFzZShraW5kLCBqaXQtPm1fY29kZU9yaWdpbkZvck9TUikKKyAgICAsIG1fanNWYWx1ZVNv
dXJjZShqc1ZhbHVlU291cmNlKQogICAgICwgbV92YWx1ZVByb2ZpbGUodmFsdWVQcm9maWxlKQog
ICAgICwgbV9wYXRjaGFibGVDb2RlT2Zmc2V0KDApCi0gICAgLCBtX2NvZGVPcmlnaW4oaml0LT5t
X2NvZGVPcmlnaW5Gb3JPU1IpCi0gICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShtX2Nv
ZGVPcmlnaW4pCiAgICAgLCBtX3JlY292ZXJ5SW5kZXgocmVjb3ZlcnlJbmRleCkKICAgICAsIG1f
d2F0Y2hwb2ludEluZGV4KHN0ZDo6bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkKLSAg
ICAsIG1fa2luZChraW5kKQotICAgICwgbV9jb3VudCgwKQogICAgICwgbV9zdHJlYW1JbmRleChz
dHJlYW1JbmRleCkKICAgICAsIG1fbGFzdFNldE9wZXJhbmQoaml0LT5tX2xhc3RTZXRPcGVyYW5k
KQogewpAQCAtNzMsNTcgKzcwLDE1IEBAIHZvaWQgT1NSRXhpdDo6Y29ycmVjdEp1bXAoTGlua0J1
ZmZlciYgbGkKICAgICBtX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9m
KGxhYmVsKTsKIH0KIAotYm9vbCBPU1JFeGl0Ojpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0
U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2Rl
QmxvY2spCi17Ci0gICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2Rl
QmxvY2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JG
cmVxdWVudEV4aXRTaXRlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAKLSAgICBGcmVx
dWVudEV4aXRTaXRlIGV4aXRTaXRlOwotICAgIAotICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRz
RXNjYXBlZCkgewotICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24n
dCBtYXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOwot
ICAgICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGgg
YW55IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCi0gICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRF
eGl0U2l0ZShtX2tpbmQpOwotICAgIH0gZWxzZQotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50
RXhpdFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5k
KTsKLSAgICAKLSAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGlu
ZUNvZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2sp
LT5hZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKLX0KLQogdm9pZCBPU1JFeGl0Ojpjb252
ZXJ0VG9Gb3J3YXJkKEJhc2ljQmxvY2sqIGJsb2NrLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWdu
ZWQgbm9kZUluZGV4LCBjb25zdCBWYWx1ZVJlY292ZXJ5JiB2YWx1ZVJlY292ZXJ5KQogewotICAg
IC8vIENoZWNrIHRoYXQgZWl0aGVyIHRoZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3Ig
dGhlIHByZWNlZGluZyBub2RlIHdhcyBhCi0gICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBj
b2RlIG9yaWdpbiwgb3IgdGhhdCB3ZSd2ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3ZlcnkuCi0gICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQKLSAgICAgICAgJiYgIXZhbHVlUmVjb3ZlcnkKLSAgICAgICAg
JiYgIWN1cnJlbnROb2RlLT5jb250YWluc01vdkhpbnQoKSkgewotICAgICAgICBOb2RlKiBzZXRM
b2NhbCA9IGJsb2NrLT5hdChub2RlSW5kZXggLSAxKTsKLSAgICAgICAgQVNTRVJUX1VOVVNFRChz
ZXRMb2NhbCwgc2V0TG9jYWwtPmNvbnRhaW5zTW92SGludCgpKTsKLSAgICAgICAgQVNTRVJUX1VO
VVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNvZGVPcmlnaW4gPT0gY3VycmVudE5vZGUtPmNvZGVP
cmlnaW4pOwotICAgIH0KLSAgICAKLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUg
bmV4dCBieXRlY29kZSBpbnN0cnVjdGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAot
ICAgIC8vIG9uIHRoaXMgbm9kZS4KLSAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5k
ZXggKyAxOwotICAgIE5vZGUqIG5vZGUgPSAwOwotICAgIE5vZGUqIGxhc3RNb3ZIaW50ID0gMDsK
LSAgICBmb3IgKDs7KSB7Ci0gICAgICAgIGlmIChpbmRleEluQmxvY2sgPT0gYmxvY2stPnNpemUo
KSkgewotICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFu
ZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhpcyBpcyBzYWZlCi0gICAgICAgICAgICAv
LyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5k
IGl0J3MgYWx3YXlzIHNhZmUgdG8KLSAgICAgICAgICAgIC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVj
b2RlLgotICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gSnVtcCk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxv
Y2spOwotICAgICAgICBpZiAobm9kZS0+Y29udGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQx
KCkgPT0gY3VycmVudE5vZGUpCi0gICAgICAgICAgICBsYXN0TW92SGludCA9IG5vZGU7Ci0gICAg
ICAgIGlmIChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGluZGV4SW5CbG9jaysrOwotICAgIH0KLSAgICAKKyAg
ICBOb2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGlmICghZG9TZWFyY2hG
b3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3VycmVudE5vZGUsIG5vZGVJbmRleCwgISF2YWx1
ZVJlY292ZXJ5LCBub2RlLCBsYXN0TW92SGludCkpCisgICAgICAgIHJldHVybjsKKwogICAgIEFT
U0VSVChub2RlLT5jb2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICAK
ICAgICBtX2NvZGVPcmlnaW4gPSBub2RlLT5jb2RlT3JpZ2luOwogICAgIAogICAgIGlmICghdmFs
dWVSZWNvdmVyeSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5oCShy
ZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEx
LCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgog
I2luY2x1ZGUgIkRGR0V4aXRQcm9maWxlLmgiCiAjaW5jbHVkZSAiREZHR1BSSW5mby5oIgorI2lu
Y2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCiAjaW5jbHVkZSAiREZHVmFsdWVSZWNvdmVyeU92ZXJy
aWRlLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIKICNpbmNsdWRlICJNZXRob2RPZkdl
dHRpbmdBVmFsdWVQcm9maWxlLmgiCkBAIC04NCw3ICs4NSw3IEBAIHByaXZhdGU6CiAvLwogLy8g
VGhpcyBzdHJ1Y3R1cmUgZGVzY3JpYmVzIGhvdyB0byBleGl0IHRoZSBzcGVjdWxhdGl2ZSBwYXRo
IGJ5CiAvLyBnb2luZyBpbnRvIGJhc2VsaW5lIGNvZGUuCi1zdHJ1Y3QgT1NSRXhpdCB7CitzdHJ1
Y3QgT1NSRXhpdCA6IHB1YmxpYyBPU1JFeGl0QmFzZSB7CiAgICAgT1NSRXhpdChFeGl0S2luZCwg
SlNWYWx1ZVNvdXJjZSwgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSwgU3BlY3VsYXRpdmVK
SVQqLCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCA9IFVJTlRf
TUFYKTsKICAgICAKICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbV9jb2RlOwpAQCAtOTMsMjIg
Kzk0LDEwIEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlIG1fdmFsdWVQcm9maWxlOwogCiAgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0
OwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOwotICAgIENvZGVPcmlnaW4gbV9jb2RlT3Jp
Z2luRm9yRXhpdFByb2ZpbGU7CiAgICAgCiAgICAgdW5zaWduZWQgbV9yZWNvdmVyeUluZGV4Owog
ICAgIHVuc2lnbmVkIG1fd2F0Y2hwb2ludEluZGV4OwogICAgIAotICAgIEV4aXRLaW5kIG1fa2lu
ZDsKLSAgICB1aW50MzJfdCBtX2NvdW50OwotICAgIAotICAgIGJvb2wgY29uc2lkZXJBZGRpbmdB
c0ZyZXF1ZW50RXhpdFNpdGUoQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJv
ZmlsZWRDb2RlQmxvY2spCi0gICAgewotICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5k
SXNDb3VudGFibGUobV9raW5kKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
cmV0dXJuIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ss
IHByb2ZpbGVkQ29kZUJsb2NrKTsKLSAgICB9Ci0KICAgICB2b2lkIHNldFBhdGNoYWJsZUNvZGVP
ZmZzZXQoTWFjcm9Bc3NlbWJsZXI6OlBhdGNoYWJsZUp1bXApOwogICAgIE1hY3JvQXNzZW1ibGVy
OjpKdW1wIGdldFBhdGNoYWJsZUNvZGVPZmZzZXRBc0p1bXAoKSBjb25zdDsKICAgICBDb2RlTG9j
YXRpb25KdW1wIGNvZGVMb2NhdGlvbkZvclJlcGF0Y2goQ29kZUJsb2NrKikgY29uc3Q7CkBAIC0x
MjAsOSArMTA5LDYgQEAgc3RydWN0IE9TUkV4aXQgewogICAgIGludCBtX2xhc3RTZXRPcGVyYW5k
OwogICAgIAogICAgIFJlZlB0cjxWYWx1ZVJlY292ZXJ5T3ZlcnJpZGU+IG1fdmFsdWVSZWNvdmVy
eU92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50
RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVk
Q29kZUJsb2NrKTsKIH07CiAKIHN0cnVjdCBTcGVjdWxhdGlvbkZhaWx1cmVEZWJ1Z0luZm8gewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJE
RkdPU1JFeGl0QmFzZS5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNpbmNsdWRlICJDb2Rl
QmxvY2suaCIKKyNpbmNsdWRlICJERkdCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiREZHTm9kZS5o
IgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgeworCitib29sIE9TUkV4aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0
ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxv
Y2spCit7CisgICAgaWYgKHN0YXRpY19jYXN0PGRvdWJsZT4obV9jb3VudCkgLyBkZmdDb2RlQmxv
Y2stPm9zckV4aXRDb3VudGVyKCkgPD0gT3B0aW9uczo6b3NyRXhpdFByb21pbmVuY2VGb3JGcmVx
dWVudEV4aXRTaXRlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBGcmVxdWVu
dEV4aXRTaXRlIGV4aXRTaXRlOworICAgIAorICAgIGlmIChtX2tpbmQgPT0gQXJndW1lbnRzRXNj
YXBlZCkgeworICAgICAgICAvLyBDb3VudCB0aGlzIG9uZSBnbG9iYWxseS4gSXQgZG9lc24ndCBt
YXR0ZXIgd2hlcmUgaW4gdGhlIGNvZGUgYmxvY2sgdGhlIGFyZ3VtZW50cyBleGNhcGVkOworICAg
ICAgICAvLyB0aGUgZmFjdCB0aGF0IHRoZXkgZGlkIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYW55
IHBhcnRpY3VsYXIgaW5zdHJ1Y3Rpb24uCisgICAgICAgIGV4aXRTaXRlID0gRnJlcXVlbnRFeGl0
U2l0ZShtX2tpbmQpOworICAgIH0gZWxzZQorICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhp
dFNpdGUobV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUuYnl0ZWNvZGVJbmRleCwgbV9raW5kKTsK
KyAgICAKKyAgICByZXR1cm4gYmFzZWxpbmVDb2RlQmxvY2tGb3JPcmlnaW5BbmRCYXNlbGluZUNv
ZGVCbG9jayhtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZSwgcHJvZmlsZWRDb2RlQmxvY2spLT5h
ZGRGcmVxdWVudEV4aXRTaXRlKGV4aXRTaXRlKTsKK30KKworYm9vbCBPU1JFeGl0QmFzZTo6ZG9T
ZWFyY2hGb3JGb3J3YXJkQ29udmVyc2lvbigKKyAgICBCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSog
Y3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwgYm9vbCBoYXNWYWx1ZVJlY292ZXJ5LAor
ICAgIE5vZGUqJiBub2RlLCBOb2RlKiYgbGFzdE1vdkhpbnQpCit7CisgICAgLy8gQ2hlY2sgdGhh
dCBlaXRoZXIgdGhlIGN1cnJlbnQgbm9kZSBpcyBhIFNldExvY2FsLCBvciB0aGUgcHJlY2VkaW5n
IG5vZGUgd2FzIGEKKyAgICAvLyBTZXRMb2NhbCB3aXRoIHRoZSBzYW1lIGNvZGUgb3JpZ2luLCBv
ciB0aGF0IHdlJ3ZlIHByb3ZpZGVkIGEgdmFsdWVSZWNvdmVyeS4KKyAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRAorICAgICAgICAmJiAhaGFzVmFsdWVSZWNvdmVyeQorICAgICAgICAmJiAhY3VycmVu
dE5vZGUtPmNvbnRhaW5zTW92SGludCgpKSB7CisgICAgICAgIE5vZGUqIHNldExvY2FsID0gYmxv
Y2stPmF0KG5vZGVJbmRleCAtIDEpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExvY2FsLCBz
ZXRMb2NhbC0+Y29udGFpbnNNb3ZIaW50KCkpOworICAgICAgICBBU1NFUlRfVU5VU0VEKHNldExv
Y2FsLCBzZXRMb2NhbC0+Y29kZU9yaWdpbiA9PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7Cisg
ICAgfQorICAgIAorICAgIC8vIEZpbmQgdGhlIGZpcnN0IG5vZGUgZm9yIHRoZSBuZXh0IGJ5dGVj
b2RlIGluc3RydWN0aW9uLiBBbHNvIHRyYWNrIHRoZSBsYXN0IG1vdiBoaW50CisgICAgLy8gb24g
dGhpcyBub2RlLgorICAgIHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IG5vZGVJbmRleCArIDE7Cisg
ICAgbm9kZSA9IDA7CisgICAgbGFzdE1vdkhpbnQgPSAwOworICAgIGZvciAoOzspIHsKKyAgICAg
ICAgaWYgKGluZGV4SW5CbG9jayA9PSBibG9jay0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBU
aGlzIGlzIGFuIGlubGluZSByZXR1cm4uIEdpdmUgdXAgYW5kIGRvIGEgYmFja3dhcmRzIHNwZWN1
bGF0aW9uLiBUaGlzIGlzIHNhZmUKKyAgICAgICAgICAgIC8vIGJlY2F1c2UgYW4gaW5saW5lIHJl
dHVybiBoYXMgaXRzIG93biBieXRlY29kZSBpbmRleCBhbmQgaXQncyBhbHdheXMgc2FmZSB0bwor
ICAgICAgICAgICAgLy8gcmVleGVjdXRlIHRoYXQgYnl0ZWNvZGUuCisgICAgICAgICAgICBBU1NF
UlQobm9kZS0+b3AoKSA9PSBKdW1wKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgICAgICBub2RlID0gYmxvY2stPmF0KGluZGV4SW5CbG9jayk7CisgICAgICAgIGlm
IChub2RlLT5jb250YWluc01vdkhpbnQoKSAmJiBub2RlLT5jaGlsZDEoKSA9PSBjdXJyZW50Tm9k
ZSkKKyAgICAgICAgICAgIGxhc3RNb3ZIaW50ID0gbm9kZTsKKyAgICAgICAgaWYgKG5vZGUtPmNv
ZGVPcmlnaW4gIT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgaW5kZXhJbkJsb2NrKys7CisgICAgfQorICAgIAorICAgIEFTU0VSVChub2RlLT5j
b2RlT3JpZ2luICE9IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkV4aXRCYXNlX2gKKyNkZWZp
bmUgREZHT1NSRXhpdEJhc2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdF
eGl0UHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3N0cnVj
dCBCYXNpY0Jsb2NrOworc3RydWN0IE5vZGU7CisKKy8vIFByb3ZpZGVzIGZvciB0aGUgT1NSIGV4
aXQgcHJvZmlsaW5nIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyBjb21tb24gYmV0d2VlbiB0aGUgREZH
CisvLyBhbmQgdGhlIEZUTC4KKworc3RydWN0IE9TUkV4aXRCYXNlIHsKKyAgICBPU1JFeGl0QmFz
ZShFeGl0S2luZCBraW5kLCBDb2RlT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2tpbmQoa2lu
ZCkKKyAgICAgICAgLCBtX2NvdW50KDApCisgICAgICAgICwgbV9jb2RlT3JpZ2luKG9yaWdpbikK
KyAgICAgICAgLCBtX2NvZGVPcmlnaW5Gb3JFeGl0UHJvZmlsZShvcmlnaW4pCisgICAgeworICAg
IH0KKyAgICAKKyAgICBFeGl0S2luZCBtX2tpbmQ7CisgICAgdWludDMyX3QgbV9jb3VudDsKKyAg
ICAKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbjsKKyAgICBDb2RlT3JpZ2luIG1fY29kZU9y
aWdpbkZvckV4aXRQcm9maWxlOworCisgICAgYm9vbCBjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRF
eGl0U2l0ZShDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVC
bG9jaykKKyAgICB7CisgICAgICAgIGlmICghbV9jb3VudCB8fCAhZXhpdEtpbmRJc0NvdW50YWJs
ZShtX2tpbmQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gY29u
c2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KGRmZ0NvZGVCbG9jaywgcHJvZmlsZWRD
b2RlQmxvY2spOworICAgIH0KKyAgICAKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGZvcndh
cmQgY29udmVyc2lvbiBpcyByZWFsbHkgbmVlZGVkLgorICAgIGJvb2wgZG9TZWFyY2hGb3JGb3J3
YXJkQ29udmVyc2lvbigKKyAgICAgICAgQmFzaWNCbG9jayosIE5vZGUqIGN1cnJlbnROb2RlLCB1
bnNpZ25lZCBub2RlSW5kZXgsIGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKKyAgICAgICAgTm9kZSom
IG5leHRCQ05vZGUsIE5vZGUqJiBsYXN0TW92SGludCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBj
b25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coQ29kZUJsb2NrKiBkZmdDb2RlQmxv
Y2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKKyNlbmRpZiAvLyBERkdP
U1JFeGl0QmFzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhp
dENvbXBpbGVyNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHT1NSRXhpdENvbXBpbGVyNjQuY3BwCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjUzLDcgKzY1Myw3IEBAIHZvaWQgT1NSRXhpdENvbXBpbGVyOjpjb21waWxlRXhpdChjb25z
dCAKICAgICAvLyAxNikgTG9hZCB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0IGJ5dGVjb2RlIG9wZXJh
dGlvbiBpbnRvIHJlZ1QwLgogICAgIAogICAgIGlmIChleGl0Lm1fbGFzdFNldE9wZXJhbmQgIT0g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKLSAgICAgICAgbV9qaXQubG9hZDY0KEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKWV4aXQubV9sYXN0U2V0
T3BlcmFuZCksIEdQUkluZm86OmNhY2hlZFJlc3VsdFJlZ2lzdGVyKTsKKyAgICAgICAgbV9qaXQu
bG9hZDY0KEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihleGl0Lm1fbGFzdFNldE9wZXJhbmQp
LCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CiAgICAgCiAgICAgLy8gMTcpIEFuZCBm
aW5pc2guCiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYg
KzMxLDcgQEAKICNpbmNsdWRlICJDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJERkdDb21tb24uaCIK
ICNpbmNsdWRlICJERkdKSVRDb2RlLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9u
LmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJSZXBhdGNoQnVmZmVyLmgiCkBAIC01NCwyMCArNTUsNyBAQCB2b2lkIGNvbXBpbGVP
U1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICB1aW50MzJfdCBleGl0SW5kZXggPSBnbG9iYWxE
YXRhLT5vc3JFeGl0SW5kZXg7CiAgICAgT1NSRXhpdCYgZXhpdCA9IGNvZGVCbG9jay0+Z2V0SklU
Q29kZSgpLT5kZmcoKS0+b3NyRXhpdFtleGl0SW5kZXhdOwogICAgIAotICAgIC8vIE1ha2Ugc3Vy
ZSBhbGwgY29kZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJVCBjb21waWxlZC4gVGhpcyBpcyBu
ZWNlc3Nhcnkgc2luY2UKLSAgICAvLyB3ZSBtYXkgb3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sg
ZXZlbiBiZWZvcmUgaXQgaGFkIGV2ZXIgYmVlbiBjb21waWxlZCBieSB0aGUKLSAgICAvLyBKSVQs
IGJ1dCBvdXIgT1NSIGV4aXQgaW5mcmFzdHJ1Y3R1cmUgY3VycmVudGx5IG9ubHkgd29ya3MgaWYg
dGhlIHRhcmdldCBvZiB0aGUKLSAgICAvLyBPU1IgZXhpdCBpcyBKSVQgY29kZS4gVGhpcyBjb3Vs
ZCBiZSBjaGFuZ2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxhcmx5Ci0gICAgLy8g
aGFyZCBhYm91dCBkb2luZyBhbiBPU1IgZXhpdCBpbnRvIHRoZSBpbnRlcnByZXRlciwgYnV0IGZv
ciBub3cgdGhpcyBzZWVtcyB0byBtYWtlCi0gICAgLy8gc2Vuc2UgaW4gdGhhdCBpZiB3ZSdyZSBP
U1IgZXhpdGluZyBmcm9tIGlubGluZWQgY29kZSBvZiBhIERGRyBjb2RlIGJsb2NrLCB0aGVuCi0g
ICAgLy8gcHJvYmFibHkgaXQncyBhIGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0
aW5nIGludG8gaXMgaG90LiBFdmVuIG1vcmUKLSAgICAvLyBpbnRlcmVzdGluZ2x5LCBzaW5jZSB0
aGUgY29kZSB3YXMgaW5saW5lZCwgaXQgbWF5IG5ldmVyIG90aGVyd2lzZSBnZXQgSklUCi0gICAg
Ly8gY29tcGlsZWQgc2luY2UgdGhlIGFjdCBvZiBpbmxpbmluZyBpdCBtYXkgZW5zdXJlIHRoYXQg
aXQgb3RoZXJ3aXNlIG5ldmVyIHJ1bnMuCi0gICAgZm9yIChDb2RlT3JpZ2luIGNvZGVPcmlnaW4g
PSBleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmln
aW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIHN0YXRp
Y19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpKQotICAgICAgICAgICAgLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29u
c3RydWN0KQotICAgICAgICAgICAgLT5qaXRDb21waWxlKGV4ZWMpOwotICAgIH0KKyAgICBwcmVw
YXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoZXhlYywgZXhpdC5tX2NvZGVPcmlnaW4pOwogICAgIAog
ICAgIC8vIENvbXB1dGUgdGhlIHZhbHVlIHJlY292ZXJpZXMuCiAgICAgT3BlcmFuZHM8VmFsdWVS
ZWNvdmVyeT4gb3BlcmFuZHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxNDgzMTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogCi12b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNv
bnN0IE9TUkV4aXQmIGV4aXQpCit2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogewogICAgIGppdC5hZGQzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgQXNzZW1ibHlIZWxwZXJzOjpBYnNvbHV0ZUFkZHJlc3Mo
JmV4aXQubV9jb3VudCkpOwogICAgIApAQCAtNzMsNyArNzMsNyBAQCB2b2lkIGhhbmRsZUV4aXRD
b3VudHMoQ0NhbGxIZWxwZXJzJiBqaXQsCiAgICAgZG9uZUFkanVzdGluZy5saW5rKCZqaXQpOwog
fQogCi12b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0
IE9TUkV4aXQmIGV4aXQpCit2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
JiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogewogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgQVNTRVJUKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5nZXRKSVRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQpOwpAQCAtMTQ3LDcgKzE0Nyw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2Fs
bEZyYW1lcyhDQ2FsbEhlbHBlcnMKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcg
dGhlICNlbHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAogfQog
Ci12b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NS
RXhpdCYgZXhpdCkKK3ZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKICAgICBpZiAoZXhpdC5tX2NvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lKQogICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTMyKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5oCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw5ICsz
NSw5IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAotdm9pZCBoYW5kbGVF
eGl0Q291bnRzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXQmKTsKLXZvaWQgcmVpZnlJbmxp
bmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0Jik7Ci12b2lkIGFkanVz
dEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0Jik7Cit2b2lkIGhh
bmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKK3ZvaWQg
cmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0QmFzZSYp
Owordm9pZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhp
dEJhc2UmKTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRp
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5oIgorCisjaWYgRU5BQkxFKERGR19KSVQpCisKKyNp
bmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCisjaW5jbHVkZSAi
T3BlcmF0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKK3ZvaWQg
cHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYywgQ29kZU9yaWdpbiBj
b2RlT3JpZ2luKQoreworICAgIGZvciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29k
ZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKKyAgICAgICAg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmV4ZWN1dGFibGUuZ2V0KCkpCisgICAgICAgICAgICAtPmJhc2VsaW5lQ29kZUJsb2NrRm9y
KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5pc0NhbGwgPyBDb2RlRm9yQ2FsbCA6IENvZGVG
b3JDb25zdHJ1Y3QpCisgICAgICAgICAgICAtPmppdENvbXBpbGUoZXhlYyk7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVw
YXJhdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0UHJlcGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgREZHT1NS
RXhpdFByZXBhcmF0aW9uX2gKKyNkZWZpbmUgREZHT1NSRXhpdFByZXBhcmF0aW9uX2gKKworI2lm
IEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ2FsbEZyYW1lLmgiCisjaW5jbHVkZSAiQ29k
ZU9yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CisKKy8vIE1ha2Ug
c3VyZSBhbGwgY29kZSBvbiBvdXIgaW5saW5lIHN0YWNrIGlzIEpJVCBjb21waWxlZC4gVGhpcyBp
cyBuZWNlc3Nhcnkgc2luY2UKKy8vIHdlIG1heSBvcHQgdG8gaW5saW5lIGEgY29kZSBibG9jayBl
dmVuIGJlZm9yZSBpdCBoYWQgZXZlciBiZWVuIGNvbXBpbGVkIGJ5IHRoZQorLy8gSklULCBidXQg
b3VyIE9TUiBleGl0IGluZnJhc3RydWN0dXJlIGN1cnJlbnRseSBvbmx5IHdvcmtzIGlmIHRoZSB0
YXJnZXQgb2YgdGhlCisvLyBPU1IgZXhpdCBpcyBKSVQgY29kZS4gVGhpcyBjb3VsZCBiZSBjaGFu
Z2VkIHNpbmNlIHRoZXJlIGlzIG5vdGhpbmcgcGFydGljdWxhcmx5CisvLyBoYXJkIGFib3V0IGRv
aW5nIGFuIE9TUiBleGl0IGludG8gdGhlIGludGVycHJldGVyLCBidXQgZm9yIG5vdyB0aGlzIHNl
ZW1zIHRvIG1ha2UKKy8vIHNlbnNlIGluIHRoYXQgaWYgd2UncmUgT1NSIGV4aXRpbmcgZnJvbSBp
bmxpbmVkIGNvZGUgb2YgYSBERkcgY29kZSBibG9jaywgdGhlbgorLy8gcHJvYmFibHkgaXQncyBh
IGdvb2Qgc2lnbiB0aGF0IHRoZSB0aGluZyB3ZSdyZSBleGl0aW5nIGludG8gaXMgaG90LiBFdmVu
IG1vcmUKKy8vIGludGVyZXN0aW5nbHksIHNpbmNlIHRoZSBjb2RlIHdhcyBpbmxpbmVkLCBpdCBt
YXkgbmV2ZXIgb3RoZXJ3aXNlIGdldCBKSVQKKy8vIGNvbXBpbGVkIHNpbmNlIHRoZSBhY3Qgb2Yg
aW5saW5pbmcgaXQgbWF5IGVuc3VyZSB0aGF0IGl0IG90aGVyd2lzZSBuZXZlciBydW5zLgordm9p
ZCBwcmVwYXJlQ29kZU9yaWdpbkZvck9TUkV4aXQoRXhlY1N0YXRlKiwgQ29kZU9yaWdpbik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQor
CisjZW5kaWYgLy8gREZHT1NSRXhpdFByZXBhcmF0aW9uX2gKKworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQ4
MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE3NzcsNyArMTc3Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAKICAg
ICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdpc3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0
YS0+bG9jYWwoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlh
YmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigp
OwogCiAgICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVTb3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJ
VENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdpc3RlcikpOwogICAgICAgICAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbHVlU291cmNlLmgJKHJldmlzaW9uIDE0
ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsdWVTb3VyY2UuaAkod29y
a2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFs
dWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAgICAgICBpZiAoaXNBcnJheVNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pIHx8IGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQorICAgICAgICBp
ZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByZXR1cm4gVmFs
dWVTb3VyY2UoQ2VsbEluSlNTdGFjayk7CiAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJldHVybiBWYWx1ZVNvdXJjZShCb29sZWFuSW5K
U1N0YWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyaWFibGVFdmVu
dFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdW
YXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3Qo
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wgZm91bmQgPSBmYWxzZTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS0+b3AoKSA9PSBVSW50MzJUb051bWJl
cikgeworICAgICAgICAgICAgaWYgKG5vZGUgJiYgbmVlZHNPU1JCYWNrd2FyZFJld2lyaW5nKG5v
ZGUtPm9wKCkpKSB7CiAgICAgICAgICAgICAgICAgTWluaWZpZWRJRCBpZCA9IG5vZGUtPmNoaWxk
MSgpOwogICAgICAgICAgICAgICAgIGlmICh0cnlUb1NldENvbnN0YW50UmVjb3ZlcnkodmFsdWVS
ZWNvdmVyaWVzW2ldLCBjb2RlQmxvY2ssIGdyYXBoLmF0KGlkKSkpCiAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwpAQCAtMjU3LDYgKzI1Nyw3IEBAIHZvaWQgVmFyaWFibGVFdmVudFN0cmVh
bTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBkb3VibGVBc0ludDMySUQg
PSBpZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKCFuZWVkc09TUkZvcndh
cmRSZXdpcmluZyhub2RlLT5vcCgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCShyZXZpc2lvbiAxNDgzMTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtODAsOSArODAsMTQgQEAgc3RhdGljIGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBl
KExUeXBlIGVsZQogfQogCiBlbnVtIFZhcmlhZGljaXR5IHsgTm90VmFyaWFkaWMsIFZhcmlhZGlj
IH07Ci1zdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBM
VHlwZSogcGFyYW1UeXBlcywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFk
aWNpdHkpCitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBl
LCBjb25zdCBMVHlwZSogcGFyYW1UeXBlcywgdW5zaWduZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNp
dHkgdmFyaWFkaWNpdHkpCiB7Ci0gICAgcmV0dXJuIExMVk1GdW5jdGlvblR5cGUocmV0dXJuVHlw
ZSwgcGFyYW1UeXBlcywgcGFyYW1Db3VudCwgdmFyaWFkaWNpdHkgPT0gVmFyaWFkaWMpOworICAg
IHJldHVybiBMTFZNRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIGNvbnN0X2Nhc3Q8TFR5cGUqPihw
YXJhbVR5cGVzKSwgcGFyYW1Db3VudCwgdmFyaWFkaWNpdHkgPT0gVmFyaWFkaWMpOworfQordGVt
cGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5
cGUgcmV0dXJuVHlwZSwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yLCBWYXJpYWRpY2l0eSB2YXJp
YWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIHJldHVybiBmdW5jdGlvblR5cGUocmV0dXJu
VHlwZSwgdmVjdG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCksIHZhcmlhZGljaXR5KTsKIH0KIHN0
YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExUeXBlIHJldHVyblR5cGUsIFZhcmlhZGlj
aXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCiB7CkBAIC05OCw2ICsxMDMsOCBAQCBzdGF0
aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByCiAgICAgcmV0dXJuIGZ1bmN0aW9u
VHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCAyLCB2YXJpYWRpY2l0eSk7CiB9CiAKK3N0YXRp
YyBpbmxpbmUgTFR5cGUgdHlwZU9mKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gTExWTVR5cGVPZih2
YWx1ZSk7IH0KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBtZEtpbmRJRChjb25zdCBjaGFyKiBz
dHJpbmcpIHsgcmV0dXJuIExMVk1HZXRNREtpbmRJRChzdHJpbmcsIHN0cmxlbihzdHJpbmcpKTsg
fQogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmcoY29uc3QgY2hhciogc3RyaW5nLCB1bnNp
Z25lZCBsZW5ndGgpIHsgcmV0dXJuIExMVk1NRFN0cmluZyhzdHJpbmcsIGxlbmd0aCk7IH0KIHN0
YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0IGNoYXIqIHN0cmluZykgeyByZXR1cm4g
bWRTdHJpbmcoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7IH0KQEAgLTE1MSw5ICsxNTgsMTQgQEAg
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJbnRDYXN0KExCdWlsZAogc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRJbnRUb1B0cihMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBl
IHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZEludFRvUHRyKGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAi
Iik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkUHRyVG9JbnQoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBMTFZNQnVpbGRQdHJUb0ludChi
dWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZElD
bXAoTEJ1aWxkZXIgYnVpbGRlciwgTEludFByZWRpY2F0ZSBjb25kLCBMVmFsdWUgbGVmdCwgTFZh
bHVlIHJpZ2h0KSB7IHJldHVybiBMTFZNQnVpbGRJQ21wKGJ1aWxkZXIsIGNvbmQsIGxlZnQsIHJp
Z2h0LCAiIik7IH0KLXN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykKK3N0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVu
Y3Rpb24sIGNvbnN0IExWYWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykKK3sKKyAgICByZXR1
cm4gTExWTUJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgY29uc3RfY2FzdDxMVmFsdWUqPihh
cmdzKSwgbnVtQXJncywgIiIpOworfQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lu
bGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwg
Y29uc3QgVmVjdG9yVHlwZSYgdmVjdG9yKQogewotICAgIHJldHVybiBMTFZNQnVpbGRDYWxsKGJ1
aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCBudW1BcmdzLCAiIik7CisgICAgcmV0dXJuIGJ1aWxkQ2Fs
bChidWlsZGVyLCBmdW5jdGlvbiwgdmVjdG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCkpOwogfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBm
dW5jdGlvbikKIHsKQEAgLTE2OCw2ICsxODAsOCBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZENhbGwoTEJ1aWxkZXIgCiAgICAgTFZhbHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiB9OwogICAg
IHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24sIGFyZ3MsIDIpOwogfQorZW51bSBU
YWlsQ2FsbE1vZGUgeyBJc05vdFRhaWxDYWxsLCBJc1RhaWxDYWxsIH07CitzdGF0aWMgaW5saW5l
IHZvaWQgc2V0VGFpbENhbGwoTFZhbHVlIGNhbGwsIFRhaWxDYWxsTW9kZSBtb2RlKSB7IExMVk1T
ZXRUYWlsQ2FsbChjYWxsLCBtb2RlID09IElzVGFpbENhbGwpOyB9CiBzdGF0aWMgaW5saW5lIExW
YWx1ZSBidWlsZEV4dHJhY3RWYWx1ZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gTExWTUJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFn
Z1ZhbCwgaW5kZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1
aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90
VGFrZW4pIHsgcmV0dXJuIExMVk1CdWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2Vu
LCBub3RUYWtlbiwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExCdWlsZGVy
IGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBMTFZNQnVpbGRCcihi
dWlsZGVyLCBkZXN0aW5hdGlvbik7IH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ0FyZ3VtZW50R2V0dGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMQ0FyZ3VtZW50R2V0dGVyLmgi
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCit1c2luZyBuYW1lc3BhY2UgREZHOworCit2b2lkIENBcmd1bWVudEdldHRlcjo6bG9hZE5l
eHRBbmRCb3goVmFsdWVGb3JtYXQgZm9ybWF0LCBHUFJSZWcgZGVzdGluYXRpb24sIEdQUlJlZyBz
Y3JhdGNoKQoreworICAgIGlmIChzY3JhdGNoID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAg
aWYgKGRlc3RpbmF0aW9uID09IEdQUkluZm86Om5vbkFyZ0dQUjApCisgICAgICAgICAgICBzY3Jh
dGNoID0gR1BSSW5mbzo6bm9uQXJnR1BSMTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2Ny
YXRjaCA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoZm9y
bWF0KSB7CisgICAgY2FzZSBWYWx1ZUZvcm1hdEludDMyOiB7CisgICAgICAgIGxvYWROZXh0MzIo
ZGVzdGluYXRpb24pOworICAgICAgICBtX2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgZGVzdGluYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAg
ICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0VUludDMyOiB7CisgICAgICAgIGxvYWROZXh0MzIoZGVz
dGluYXRpb24pOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBpc0ludCA9IG1faml0LmJy
YW5jaDMyKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwK
KyAgICAgICAgICAgIGRlc3RpbmF0aW9uLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDAp
KTsKKyAgICAgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpm
cFJlZ1QwLCBzY3JhdGNoKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoZGVz
dGluYXRpb24sIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBS
SW5mbzo6ZnBSZWdUMCwgZGVzdGluYXRpb24pOworICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJs
ZShzY3JhdGNoLCBGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgICAgIAorICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAg
ICAgIGlzSW50LmxpbmsoJm1faml0KTsKKyAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBk
b25lLmxpbmsoJm1faml0KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisg
ICAgY2FzZSBWYWx1ZUZvcm1hdEJvb2xlYW46IHsKKyAgICAgICAgbG9hZE5leHQ4KGRlc3RpbmF0
aW9uKTsKKyAgICAgICAgbV9qaXQub3IzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFZh
bHVlRmFsc2UpLCBkZXN0aW5hdGlvbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAg
ICAgIAorICAgIGNhc2UgVmFsdWVGb3JtYXRKU1ZhbHVlOiB7CisgICAgICAgIGxvYWROZXh0NjQo
ZGVzdGluYXRpb24pOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBj
YXNlIFZhbHVlRm9ybWF0RG91YmxlOiB7CisgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KEZQ
UkluZm86OmZwUmVnVDAsIHNjcmF0Y2gpOworICAgICAgICBsb2FkTmV4dERvdWJsZShGUFJJbmZv
OjpmcFJlZ1QwKTsKKyAgICAgICAgbV9qaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIGRl
c3RpbmF0aW9uKTsKKyAgICAgICAgbV9qaXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaCwgRlBSSW5m
bzo6ZnBSZWdUMCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0Fy
Z3VtZW50R2V0dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDQXJndW1lbnRHZXR0ZXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBGVExDQXJndW1lbnRHZXR0ZXJfaAorI2RlZmluZSBGVExDQXJndW1lbnRHZXR0ZXJfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5oIgorI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBjdXJyZW50bHkgb25s
eSB1bmRlcnN0YW5kcyBob3cgdG8gZ2V0IGFyZ3VtZW50cyBvbiBYODYtNjQgY2RlY2wuIFRoaXMg
aXMgYWxzbworLy8gbm90IHBhcnRpY3VsYXJseSBlZmZpY2llbnQuIEl0IHdpbGwgZ2VuZXJhdGUg
c29tZSByZWR1bmRhbnQgbW92ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlZ2lzdGVyS2luZD4K
K2Jvb2wgaXNBcmd1bWVudFJlZ2lzdGVyKHR5cGVuYW1lIFJlZ2lzdGVyS2luZDo6UmVnaXN0ZXJU
eXBlIHJlZykKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgUmVnaXN0ZXJLaW5kOjpu
dW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgaWYgKFJlZ2lzdGVyS2lu
ZDo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpID09IHJlZykKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2NsYXNzIENBcmd1bWVudEdldHRlciB7
CitwdWJsaWM6CisgICAgLy8gUGVlayBvZmZzZXQgaXMgdGhlIG51bWJlciBvZiB0aGluZ3Mgb24g
dGhlIHN0YWNrIGJlbG93IHRoZSBmaXJzdCBhcmd1bWVudC4KKyAgICAvLyBJdCB3aWxsIGJlIDEg
aWYgeW91IGhhdmVuJ3QgcHVzaGVkIG9yIHBvcHBlZCBhZnRlciB0aGUgY2FsbDsgaS5lLiB0aGUg
b25seQorICAgIC8vIHRoaW5nIGlzIHRoZSByZXR1cm4gYWRkcmVzcy4KKyAgICBDQXJndW1lbnRH
ZXR0ZXIoREZHOjpBc3NlbWJseUhlbHBlcnMmIGppdCwgaW50IHBlZWtPZmZzZXQgPSAxKQorICAg
ICAgICA6IG1faml0KGppdCkKKyAgICAgICAgLCBtX3BlZWtPZmZzZXQocGVla09mZnNldCkKKyAg
ICAgICAgLCBtX2dwckFyZ3VtZW50SW5kZXgoMCkKKyAgICAgICAgLCBtX2ZwckFyZ3VtZW50SW5k
ZXgoMCkKKyAgICAgICAgLCBtX3N0YWNrQXJndW1lbnRJbmRleCgwKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBsb2FkTmV4dDgoREZHOjpHUFJSZWcgZGVzdGluYXRpb24pCisgICAgewor
ICAgICAgICBBU1NFUlQoIWlzQXJndW1lbnRSZWdpc3RlcjxERkc6OkdQUkluZm8+KGRlc3RpbmF0
aW9uKSk7CisgICAgICAgIGlmIChtX2dwckFyZ3VtZW50SW5kZXggPCBERkc6OkdQUkluZm86Om51
bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoREZHOjpH
UFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIobV9ncHJBcmd1bWVudEluZGV4KyspLCBkZXN0aW5h
dGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IG1faml0LmxvYWQ4KG5leHRBZGRyZXNzKCksIGRlc3RpbmF0aW9uKTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBsb2FkTmV4dDMyKERGRzo6R1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKCFpc0FyZ3VtZW50UmVnaXN0ZXI8REZHOjpHUFJJbmZvPihkZXN0aW5hdGlvbikp
OworICAgICAgICBpZiAobV9ncHJBcmd1bWVudEluZGV4IDwgREZHOjpHUFJJbmZvOjpudW1iZXJP
ZkFyZ3VtZW50UmVnaXN0ZXJzKSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKERGRzo6R1BSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1fZ3ByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24p
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2pp
dC5sb2FkMzIobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2
b2lkIGxvYWROZXh0NjQoREZHOjpHUFJSZWcgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBB
U1NFUlQoIWlzQXJndW1lbnRSZWdpc3RlcjxERkc6OkdQUkluZm8+KGRlc3RpbmF0aW9uKSk7Cisg
ICAgICAgIGlmIChtX2dwckFyZ3VtZW50SW5kZXggPCBERkc6OkdQUkluZm86Om51bWJlck9mQXJn
dW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoREZHOjpHUFJJbmZvOjp0
b0FyZ3VtZW50UmVnaXN0ZXIobV9ncHJBcmd1bWVudEluZGV4KyspLCBkZXN0aW5hdGlvbik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0Lmxv
YWQ2NChuZXh0QWRkcmVzcygpLCBkZXN0aW5hdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQg
bG9hZE5leHRQdHIoREZHOjpHUFJSZWcgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBsb2Fk
TmV4dDY0KGRlc3RpbmF0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkTmV4dERvdWJs
ZShERkc6OkZQUlJlZyBkZXN0aW5hdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAg
ICAgICAgICFpc0FyZ3VtZW50UmVnaXN0ZXI8REZHOjpGUFJJbmZvPihkZXN0aW5hdGlvbikKKyAg
ICAgICAgICAgIHx8IGRlc3RpbmF0aW9uID09IERGRzo6RlBSSW5mbzo6YXJndW1lbnRGUFIwKTsK
KyAgICAgICAgCisgICAgICAgIGlmIChtX2ZwckFyZ3VtZW50SW5kZXggPCBERkc6OkZQUkluZm86
Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoREZHOjpGUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIobV9mcHJBcmd1bWVudEluZGV4Kysp
LCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIG1faml0LmxvYWREb3VibGUobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0QW5kQm94KAorICAgICAgICBWYWx1ZUZvcm1h
dCBmb3JtYXQsIERGRzo6R1BSUmVnIGRlc3RpbmF0aW9uLCBERkc6OkdQUlJlZyBzY3JhdGNoID0g
SW52YWxpZEdQUlJlZyk7CisKK3ByaXZhdGU6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mg
bmV4dEFkZHJlc3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRy
ZXNzKAorICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAor
ICAgICAgICAgICAgKG1fcGVla09mZnNldCArIG1fc3RhY2tBcmd1bWVudEluZGV4KyspICogc2l6
ZW9mKHZvaWQqKSk7CisgICAgfQorICAgICAgICAgICAgCisgICAgREZHOjpBc3NlbWJseUhlbHBl
cnMmIG1faml0OworICAgIHVuc2lnbmVkIG1fcGVla09mZnNldDsKKyAgICB1bnNpZ25lZCBtX2dw
ckFyZ3VtZW50SW5kZXg7CisgICAgdW5zaWduZWQgbV9mcHJBcmd1bWVudEluZGV4OworICAgIHVu
c2lnbmVkIG1fc3RhY2tBcmd1bWVudEluZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExDQXJndW1l
bnRHZXR0ZXJfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHJldmlzaW9uIDE0ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDkgKzg3LDkgQEAgdm9pZCBjb21waWxlKFN0
YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SgogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdG90YWwg
a2x1ZGdlIC0gTExWTSBzaG91bGQganVzdCB1c2Ugb3VyIGNhbGxpbmcgY29udmVudGlvbi4KICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCiAgICAg
Q0NhbGxIZWxwZXJzIGppdCgmc3RhdGUuZ3JhcGgubV9nbG9iYWxEYXRhLCBzdGF0ZS5ncmFwaC5t
X2NvZGVCbG9jayk7Ci0gICAgICAgIAorICAgIAogICAgIGNvbXBpbGVFbnRyeShqaXQpOwotICAg
ICAgICAKKyAgICAKICAgICAvLyBUaGlzIHBhcnQgaXMgb25seSBuZWNlc3NhcnkgZm9yIGZ1bmN0
aW9ucy4gV2UgY3VycmVudGx5IG9ubHkgY29tcGlsZSBmdW5jdGlvbnMuCiAgICAgICAgIAogICAg
IENDYWxsSGVscGVyczo6TGFiZWwgZnJvbUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
RXhpdEFyZ3VtZW50LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRBcmd1bWVudDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYXJnIiwgYXJndW1lbnQoKSwgIiBhcyAiLCBm
b3JtYXQoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRB
cmd1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dEFyZ3VtZW50LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEV4aXRBcmd1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJn
dW1lbnRfaAorI2RlZmluZSBGVExFeGl0QXJndW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRm
b3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0
LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKworc3RydWN0IEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHsKKyAgICBW
YWx1ZUZvcm1hdCBmb3JtYXQ7CisgICAgdW5zaWduZWQgYXJndW1lbnQ7Cit9OworCitjbGFzcyBF
eGl0QXJndW1lbnQgeworcHVibGljOgorICAgIEV4aXRBcmd1bWVudCgpCisgICAgeworICAgICAg
ICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9IEludmFsaWRWYWx1ZUZvcm1hdDsKKyAgICB9Cisg
ICAgCisgICAgRXhpdEFyZ3VtZW50KFZhbHVlRm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgYXJndW1l
bnQpCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdCA9IGZvcm1hdDsKKyAg
ICAgICAgbV9yZXByZXNlbnRhdGlvbi5hcmd1bWVudCA9IGFyZ3VtZW50OworICAgIH0KKyAgICAK
KyAgICBleHBsaWNpdCBFeGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVw
cmVzZW50YXRpb24pCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50
YXRpb247CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
bV9yZXByZXNlbnRhdGlvbi5mb3JtYXQgPT0gSW52YWxpZFZhbHVlRm9ybWF0OyB9CisgICAgCisg
ICAgVmFsdWVGb3JtYXQgZm9ybWF0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhp
cyk7CisgICAgICAgIHJldHVybiBtX3JlcHJlc2VudGF0aW9uLmZvcm1hdDsKKyAgICB9CisgICAg
CisgICAgdW5zaWduZWQgYXJndW1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0
aGlzKTsKKyAgICAgICAgcmV0dXJuIG1fcmVwcmVzZW50YXRpb24uYXJndW1lbnQ7CisgICAgfQor
ICAgIAorICAgIEV4aXRBcmd1bWVudCB3aXRoRm9ybWF0KFZhbHVlRm9ybWF0IGZvcm1hdCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBFeGl0QXJndW1lbnQoZm9ybWF0LCBhcmd1bWVudCgpKTsKKyAg
ICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24o
KSBjb25zdCB7IHJldHVybiBtX3JlcHJlc2VudGF0aW9uOyB9CisgICAgCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEV4aXRBcmd1bWVudFJl
cHJlc2VudGF0aW9uIG1fcmVwcmVzZW50YXRpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRB
cmd1bWVudF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgRlRMIHsKKwordm9pZCBFeGl0QXJndW1lbnRGb3JPcGVyYW5kOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fZXhpdEFyZ3VtZW50LCAi
IGZvciByIiwgbV9vcGVyYW5kKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmRf
aAorI2RlZmluZSBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExFeGl0QXJn
dW1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBFeGl0
QXJndW1lbnRGb3JPcGVyYW5kIHsKK3B1YmxpYzoKKyAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5k
KCkKKyAgICAgICAgOiBtX29wZXJhbmQoLTEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBFeGl0
QXJndW1lbnRGb3JPcGVyYW5kKEV4aXRBcmd1bWVudCBleGl0QXJndW1lbnQsIGludCBvcGVyYW5k
KQorICAgICAgICA6IG1fZXhpdEFyZ3VtZW50KGV4aXRBcmd1bWVudCkKKyAgICAgICAgLCBtX29w
ZXJhbmQob3BlcmFuZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkg
Y29uc3QgeyByZXR1cm4gIW1fZXhpdEFyZ3VtZW50OyB9CisgICAgCisgICAgY29uc3QgRXhpdEFy
Z3VtZW50JiBleGl0QXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2V4aXRBcmd1bWVudDsgfQor
ICAgIGludCBvcGVyYW5kKCkgY29uc3QgeyByZXR1cm4gbV9vcGVyYW5kOyB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEV4aXRB
cmd1bWVudCBtX2V4aXRBcmd1bWVudDsKKyAgICBpbnQgbV9vcGVyYW5kOworfTsKKworaW5saW5l
IGJvb2wgbGVzc2VyQXJndW1lbnRJbmRleCgKKyAgICBjb25zdCBFeGl0QXJndW1lbnRGb3JPcGVy
YW5kJiBhLCBjb25zdCBFeGl0QXJndW1lbnRGb3JPcGVyYW5kJiBiKQoreworICAgIHJldHVybiBh
LmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCkgPCBiLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50TGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50TGlzdC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEV4aXRBcmd1bWVudExpc3RfaAor
I2RlZmluZSBGVExFeGl0QXJndW1lbnRMaXN0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZU
TCB7CisKK3R5cGVkZWYgVmVjdG9yPExWYWx1ZSwgMTY+IEV4aXRBcmd1bWVudExpc3Q7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisj
ZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50TGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRM
RXhpdFRodW5rR2VuZXJhdG9yLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUg
IkZUTE9TUkV4aXRDb21waWxhdGlvbkluZm8uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRG
RzsKKworRXhpdFRodW5rR2VuZXJhdG9yOjpFeGl0VGh1bmtHZW5lcmF0b3IoU3RhdGUmIHN0YXRl
KQorICAgIDogQ0NhbGxIZWxwZXJzKCZzdGF0ZS5ncmFwaC5tX2dsb2JhbERhdGEsIHN0YXRlLmdy
YXBoLm1fY29kZUJsb2NrKQorICAgICwgbV9zdGF0ZShzdGF0ZSkKK3sKK30KKworRXhpdFRodW5r
R2VuZXJhdG9yOjp+RXhpdFRodW5rR2VuZXJhdG9yKCkKK3sKK30KKwordm9pZCBFeGl0VGh1bmtH
ZW5lcmF0b3I6OmVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBPU1JFeGl0Q29tcGls
YXRpb25JbmZvJiBpbmZvID0gbV9zdGF0ZS5vc3JFeGl0W2luZGV4XTsKKyAgICAKKyAgICBpbmZv
Lm1fdGh1bmtMYWJlbCA9IGxhYmVsKCk7CisgICAgbW92ZShUcnVzdGVkSW1tMzIoaW5kZXgpLCBH
UFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICBpbmZvLm1fdGh1bmtKdW1wID0gcGF0Y2hhYmxlSnVt
cCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtH
ZW5lcmF0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRUaHVua0dlbmVyYXRvci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKyNkZWZpbmUgRlRMRXhpdFRodW5rR2VuZXJhdG9y
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisK
KyNpbmNsdWRlICJERkdDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCitjbGFzcyBTdGF0ZTsKK3N0cnVjdCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvOwor
CitjbGFzcyBFeGl0VGh1bmtHZW5lcmF0b3IgOiBwdWJsaWMgREZHOjpDQ2FsbEhlbHBlcnMgewor
cHVibGljOgorICAgIEV4aXRUaHVua0dlbmVyYXRvcihTdGF0ZSYgc3RhdGUpOworICAgIH5FeGl0
VGh1bmtHZW5lcmF0b3IoKTsKKyAgICAKKyAgICB2b2lkIGVtaXRUaHVuayh1bnNpZ25lZCBpbmRl
eCk7CisKK3ByaXZhdGU6CisgICAgU3RhdGUmIG1fc3RhdGU7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TEV4aXRUaHVua0dlbmVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRWYWx1ZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAg
Y2FzZSBJbnZhbGlkRXhpdFZhbHVlOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgb3V0LnByaW50
KCJEZWFkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50Ogor
ICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50KCIsIGV4aXRBcmd1bWVudCgpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgb3V0LnBy
aW50KCJDb25zdGFudCgiLCBjb25zdGFudCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6Cisg
ICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNJbnQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bkpTU3RhY2tBc0RvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMRXhpdFZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExFeGl0QXJn
dW1lbnQuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBpcyBs
aWtlIFZhbHVlUmVjb3ZlcnksIGJ1dCByZXNwZWN0cyB0aGUgd2F5IHRoYXQgdGhlIEZUTCBkb2Vz
IE9TUgorLy8gZXhpdDogdGhlIGxpdmUgbm9uLWNvbnN0YW50IG5vbi1mbHVzaGVkIHZhbHVlcyBh
cmUgcGFzc2VkIGFzIGFyZ3VtZW50cworLy8gdG8gYSBub3JldHVybiB0YWlsIGNhbGwuIEV4aXRW
YWx1ZSBpcyBoZW5jZSBtb3N0bHkgcmVzcG9uc2libGUgZm9yCisvLyB0ZWxsaW5nIHVzIHRoZSBt
YXBwaW5nIGJldHdlZW4gb3BlcmFuZHMgaW4gYnl0ZWNvZGUgYW5kIHRoZSBhcmd1bWVudHMgdG8K
Ky8vIHRoZSBjYWxsLgorCitlbnVtIEV4aXRWYWx1ZUtpbmQgeworICAgIEludmFsaWRFeGl0VmFs
dWUsCisgICAgRXhpdFZhbHVlRGVhZCwKKyAgICBFeGl0VmFsdWVBcmd1bWVudCwKKyAgICBFeGl0
VmFsdWVDb25zdGFudCwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2ssCisgICAgRXhpdFZhbHVlSW5K
U1N0YWNrQXNJbnQzMiwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZQorfTsKKworY2xh
c3MgRXhpdFZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0VmFsdWUoKQorICAgICAgICA6IG1fa2lu
ZChJbnZhbGlkRXhpdFZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZEV4aXRWYWx1ZTsgfQorICAgIAor
ICAgIHN0YXRpYyBFeGl0VmFsdWUgZGVhZCgpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlRGVhZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3RhY2so
KQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IEV4aXRWYWx1ZUluSlNTdGFjazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3RhY2tBc0ludDMyKCkKKyAgICB7CisgICAg
ICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDMyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgRXhpdFZhbHVlIGluSlNTdGFja0FzRG91YmxlKCkKKyAgICB7CisgICAgICAgIEV4
aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3Rh
Y2tBc0RvdWJsZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIEV4aXRWYWx1ZSBjb25zdGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRXhp
dFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUNvbnN0YW50
OworICAgICAgICByZXN1bHQudS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUg
ZXhpdEFyZ3VtZW50KGNvbnN0IEV4aXRBcmd1bWVudCYgYXJndW1lbnQpCisgICAgeworICAgICAg
ICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlQXJn
dW1lbnQ7CisgICAgICAgIHJlc3VsdC51LmFyZ3VtZW50ID0gYXJndW1lbnQucmVwcmVzZW50YXRp
b24oKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVl
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc0Rl
YWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlRGVhZDsgfQorICAgIGJvb2wg
aXNJbkpTU3RhY2tTb21laG93KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgp
KSB7CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNE
b3VibGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIGlzQ29uc3Rh
bnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQ29uc3RhbnQ7IH0KKyAgICBi
b29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1l
bnQ7IH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gRXhpdEFyZ3Vt
ZW50KHUuYXJndW1lbnQpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NvbnN0YW50KCkpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZGVjb2RlKHUuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhpdFZhbHVlS2luZCBt
X2tpbmQ7CisgICAgdW5pb24geworICAgICAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiBh
cmd1bWVudDsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7CisgICAgfSB1OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKKyNlbmRpZiAvLyBGVExFeGl0VmFsdWVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJGVExBYmJy
ZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MSwxOCArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAvLyB1c2UgdGhpcyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGlz
IG5vIGdvb2Qgd2F5IHRvIHNheSB3aGF0IG5vZGUgdGhlIHZhbHVlIGNhbWUKIC8vIGZyb20uCiAK
LS8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERhdGFGb3JtYXQgaW4g
b3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAotLy8gdW5saWtlIERhdGFGb3JtYXQgYW5k
IGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQg
SW50MzIuCi0KLWVudW0gVmFsdWVGb3JtYXQgewotICAgIEludmFsaWRWYWx1ZUZvcm1hdCwKLSAg
ICBWYWx1ZUZvcm1hdEludDMyLAotICAgIFZhbHVlRm9ybWF0VUludDMyLAotICAgIFZhbHVlRm9y
bWF0Qm9vbGVhbiwKLSAgICBWYWx1ZUZvcm1hdEpTVmFsdWUsCi0gICAgVmFsdWVGb3JtYXREb3Vi
bGUKLX07Ci0KIGNsYXNzIEZvcm1hdHRlZFZhbHVlIHsKIHB1YmxpYzoKICAgICBGb3JtYXR0ZWRW
YWx1ZSgpCkBAIC04MSw2ICs3MCwxMyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBtX3ZhbHVlOwog
fTsKIAorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBub1ZhbHVlKCkgeyByZXR1cm4gRm9y
bWF0dGVkVmFsdWUoKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBpbnQzMlZhbHVl
KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRJbnQzMiwg
dmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIHVJbnQzMlZhbHVlKExWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRVSW50MzIsIHZhbHVl
KTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBib29sZWFuVmFsdWUoTFZhbHVlIHZh
bHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEJvb2xlYW4sIHZhbHVlKTsg
fQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBqc1ZhbHVlVmFsdWUoTFZhbHVlIHZhbHVl
KSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEpTVmFsdWUsIHZhbHVlKTsgfQor
c3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBkb3VibGVWYWx1ZShMVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1ZSk7IH0KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE0ODMx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDExIEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAgICAgTExW
TURpc3Bvc2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUpOwogfQogCit2b2lkIEpJVENvZGU6Omlu
aXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYgZXhpdFRodW5rcykKK3sKKyAgICBtX2V4aXRUaHVu
a3MgPSBleGl0VGh1bmtzOworfQorCiB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVDb2RlKExMVk1F
eGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGVudHJ5cG9pbnQpCiB7CiAgICAgbV9l
bmdpbmUgPSBlbmdpbmU7CkBAIC05Nyw2ICsxMDIsMTEgQEAgYm9vbCBKSVRDb2RlOjpjb250YWlu
cyh2b2lkKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pJVENvZGU6OkNvZGVQdHIgSklUQ29k
ZTo6ZXhpdFRodW5rcygpCit7CisgICAgcmV0dXJuIG1fZXhpdFRodW5rcy5jb2RlKCk7Cit9CisK
IEpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiB7CiAgICAgcmV0dXJuIHRoaXM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJGVExM
TFZNSGVhZGVycy5oIgorI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKICNpbmNsdWRlICJKSVRDb2Rl
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQ4LDEyICs0OSwxNiBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsK
ICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQg
aW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiwgQ29kZVJlZiBlbnRyeXBvaW50
KTsKICAgICAKKyAgICBDb2RlUHRyIGV4aXRUaHVua3MoKTsKKyAgICAKICAgICBKSVRDb2RlKiBm
dGwoKTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSBjb21tb247CisgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4
aXQ7CiAgICAgCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB1c2Ugb3VyIG93
biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNob3VsZG4ndCBoYXZlIHRvCkBAIC02MSw2
ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMzYxOQogICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgbV9lbmdpbmU7CiAg
ICAgQ29kZVJlZiBtX2VudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBtX2V4aXRUaHVua3M7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEwICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRl
ICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIK
ICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiRlRMRXhp
dFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNs
dWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGVExW
YWx1ZVNvdXJjZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQxLDcgKzQ2LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hl
Y2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKIC8vIHNp
Z25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1Zh
bHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBc
Ci0gICAgICAgIExWYWx1ZSBfZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIF9mdGNfbG93VmFsdWUg
PSAobG93VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEVkZ2UgX2Z0Y19o
aWdoVmFsdWUgPSAoaGlnaFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoID0gKHR5cGVzUGFz
c2VkVGhyb3VnaCk7ICBcCiAgICAgICAgIGlmICghbV9zdGF0ZS5uZWVkc1R5cGVDaGVjayhfZnRj
X2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2gpKSBcCkBAIC01Nyw2ICs2Miw5IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2xvY2Fsc0Jvb2xlYW4oT3BlcmFuZHNMaWtlLCBzdGF0ZS5n
cmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbG9jYWxzMzIo
T3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQog
ICAgICAgICAsIG1fbG9jYWxzNjQoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1sw
XS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlr
ZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBt
X2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAg
ICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5n
cmFwaCkKICAgICB7CiAgICAgfQpAQCAtODAsMTQgKzg4LDEzIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291
dC5pbnQ2NCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIG1faW5pdGlhbGl6YXRpb24g
PSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuZnVuY3Rpb24pOworICAgICAgICBtX2FyZ3Vt
ZW50Q2hlY2tzID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKKwogICAg
ICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnBhcmFtKDApOwogICAgICAgICBtX3RhZ1R5cGVOdW1i
ZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwogICAgICAgICBtX3RhZ01hc2sg
PSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOwogICAgICAgICAKLSAgICAgICAgbV9hYm9ydEZ1
bmN0aW9uID0gY29uc3RJbnRUb1B0cigKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFi
b3J0KSwKLSAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlw
ZSkpKTsKLSAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAg
ICAgICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKICAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCkBAIC05Nyw4ICsxMDQsOCBAQCBwdWJs
aWM6CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNsb3NlT3ZlckZsdXNoZWRMb2NhbE9w
cygpOwotCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG1fcHJvbG9ndWUsIG1fYmxvY2tzLmdldCht
X2dyYXBoLm1fYmxvY2tzWzBdLmdldCgpKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBl
bmRUbyhtX2FyZ3VtZW50Q2hlY2tzLCBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5n
ZXQoKSkpOwogCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKICAgICAgICAg
CkBAIC0xMDYsNiArMTEzLDkgQEAgcHVibGljOgogICAgICAgICAKICAgICAgICAgZm9yIChCbG9j
a0luZGV4IGJsb2NrSW5kZXggPSAwOyBibG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrYmxvY2tJbmRleCkKICAgICAgICAgICAgIGNvbXBpbGVCbG9jayhibG9ja0luZGV4KTsK
KyAgICAgICAgCisgICAgICAgIC8vIEFuZCBub3cgY29tcGxldGUgdGhlIGluaXRpYWxpemF0aW9u
IGJsb2NrLgorICAgICAgICBsaW5rT1NSRXhpdHNBbmRDb21wbGV0ZUluaXRpYWxpemF0aW9uQmxv
Y2tzKCk7CiAKICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSkKICAgICAg
ICAgICAgIG1fZnRsU3RhdGUuZHVtcFN0YXRlKCJhZnRlciBsb3dlcmluZyIpOwpAQCAtMTUxLDgg
KzE2MSw5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCB0cmFuc2ZlckFuZENoZWNrQXJndW1l
bnRzKCkKICAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBTZXQgdXAgdGhlIE9TUiBzdG9yeSBoZXJl
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIzCisgICAgICAgIC8vIFdoaWxlIGNoZWNraW5nIGFyZ3VtZW50cywgZXZlcnl0aGluZyBpcyBp
biB0aGUgc3RhY2suCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNp
emUoKTsgaS0tOykKKyAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVTb3VyY2Uo
VmFsdWVJbkpTU3RhY2spOwogICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBt
X2dyYXBoLm1fY29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAg
Tm9kZSogbm9kZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CkBAIC0xNzAsMjEgKzE4MSwyMSBA
QCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2li
bGUoKSkgewogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YXJpYWJsZS0+c2hvdWxk
VXNlRG91YmxlRm9ybWF0KCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRB
d2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
aXNJbnQzMlNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZUJhY2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90SW50MzIoanNWYWx1
ZSkpOworICAgICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1Zh
bHVlVmFsdWUoanNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwogICAgICAgICAg
ICAgICAgICAgICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwgbV9sb2NhbHMzMi5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAo
aXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1
ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwogICAgICAgICAgICAg
ICAgICAgICBtX291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
IHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1
ZSwgbm9kZSwgaXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05v
dEJvb2xlYW4oanNWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hC
b29sZWFuKGpzVmFsdWUpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwo
KSkpOwogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBA
IC0yMTYsMTkgKzIyNywxOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVh
c2llciB0byByZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9uZXh0TG93
QmxvY2spOwogICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFjayB0aGUg
T1NSIHNpdHVhdGlvbiBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JC
bG9jaygpOwogICAgICAgICAKICAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwogICAgICAg
ICBtX2pzVmFsdWVWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFy
KCk7CiAgICAgICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOworICAgICAgICBtX3RpbWVUb0xp
dmUuY2xlYXIoKTsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAg
bV9zdGF0ZS5iZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwogICAgICAgICAKLSAgICAgICAg
Zm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6
ZSgpOyArK25vZGVJbmRleCkKLSAgICAgICAgICAgIGNvbXBpbGVOb2RlKG5vZGVJbmRleCk7Cisg
ICAgICAgIGZvciAobV9ub2RlSW5kZXggPSAwOyBtX25vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5z
aXplKCk7ICsrbV9ub2RlSW5kZXgpCisgICAgICAgICAgICBjb21waWxlTm9kZShtX25vZGVJbmRl
eCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgY29tcGlsZU5vZGUodW5zaWduZWQgbm9kZUluZGV4
KQpAQCAtMjQwLDkgKzI1MSw2IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBib29sIHNo
b3VsZEV4ZWN1dGVFZmZlY3RzID0gbV9zdGF0ZS5zdGFydEV4ZWN1dGluZyhtX25vZGUpOwogICAg
ICAgICAKLSAgICAgICAgaWYgKCFtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCi0gICAgICAgICAg
ICByZXR1cm47IC8vIEZJWE1FOiBJbXBsZW1lbnQgT1NSIG1hZ2ljIGhlcmUuIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKLSAgICAgICAgCiAgICAgICAgIG1f
ZGlyZWN0aW9uID0gKG1fbm9kZS0+ZmxhZ3MoKSAmIE5vZGVFeGl0c0ZvcndhcmQpID8gRm9yd2Fy
ZFNwZWN1bGF0aW9uIDogQmFja3dhcmRTcGVjdWxhdGlvbjsKICAgICAgICAgCiAgICAgICAgIHN3
aXRjaCAobV9ub2RlLT5vcCgpKSB7CkBAIC0yNTgsNiArMjY2LDEyIEBAIHByaXZhdGU6CiAgICAg
ICAgIGNhc2UgU2V0TG9jYWw6CiAgICAgICAgICAgICBjb21waWxlU2V0TG9jYWwoKTsKICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE1vdkhpbnQ6CisgICAgICAgICAgICBjb21waWxl
TW92SGludCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgWm9tYmllSGludDoK
KyAgICAgICAgICAgIGNvbXBpbGVab21iaWVIaW50KCk7CisgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBNb3ZIaW50QW5kQ2hlY2s6CiAgICAgICAgICAgICBjb21waWxlTW92SGludEFu
ZENoZWNrKCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTM1Miw2ICszNjYsMTIgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBpZiAo
bV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJ
TERSRU4obV9ncmFwaCwgbV9ub2RlLCB1c2UpOworICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9k
ZS0+aGFzUmVzdWx0KCkpCisgICAgICAgICAgICBtX3RpbWVUb0xpdmUuYWRkKG1fbm9kZSwgbV9u
b2RlLT5hZGp1c3RlZFJlZkNvdW50KCkpOworICAgICAgICAKICAgICAgICAgaWYgKHNob3VsZEV4
ZWN1dGVFZmZlY3RzKQogICAgICAgICAgICAgbV9zdGF0ZS5leGVjdXRlRWZmZWN0cyhub2RlSW5k
ZXgpOwogICAgIH0KQEAgLTM2OCw4ICszODgsMTIgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGNvbXBpbGVHZXRMb2NhbCgpCiAgICAgeworICAgICAgICAvLyBHZXRMb2NhbCBpcyBvbmUgb2Yg
dGhlIGZldyBub2RlcyB0aGF0IG1heSBiZSBsZWZ0IGJlaGluZCwgd2l0aCAhc2hvdWxkR2VuZXJh
dGUoKS4KKyAgICAgICAgaWYgKCFtX25vZGUtPnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxl
ID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IHZhcmlhYmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSYgdmFsdWUgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0g
U3BlY05vbmUpIHsKQEAgLTQyMCwxMyArNDQ0LDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9p
ZCBjb21waWxlU2V0TG9jYWwoKQogICAgIHsKKyAgICAgICAgb2JzZXJ2ZU1vdkhpbnQobV9ub2Rl
KTsKKyAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBtX25v
ZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gdmFyaWFibGUtPnByZWRpY3Rpb24oKTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbiA9IHZhcmlhYmxlLT5hcmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogICAgICAgICBi
b29sIG5lZWRzRmx1c2hpbmcgPSBtX2ZsdXNoZWRMb2NhbE9wcy5jb250YWlucyhtX25vZGUpOwog
ICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGludCBmb3IgT1NSLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIz
Ci0gICAgICAgIAogICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVuYm94SWZQb3NzaWJsZSgp
KSB7CiAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7
CiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBkb3VibGVzIGluIEZUTC4KQEAg
LTQzOCwyMSArNDYxLDI3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93
SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KHZhbHVl
LCBtX2xvY2FsczMyLm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAgICAgICAg
ICBpZiAobmVlZHNGbHVzaGluZykKKyAgICAgICAgICAgICAgICBpZiAobmVlZHNGbHVzaGluZykg
ewogICAgICAgICAgICAgICAgICAgICBtX291dC5zdG9yZTMyKHZhbHVlLCBwYXlsb2FkRm9yKHZh
cmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9w
ZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKICAgICAg
ICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dDZWxsKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAg
ICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAg
ICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZh
bHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGlzQm9vbGVhblNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAgbV9vdXQuc2V0KGxvd0Jv
b2xlYW4obV9ub2RlLT5jaGlsZDEoKSksIG1fbG9jYWxzQm9vbGVhbi5vcGVyYW5kKHZhcmlhYmxl
LT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAg
ICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpLCBhZGRyZXNzRm9yKHZhcmlhYmxl
LT5sb2NhbCgpKSk7CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQo
dmFyaWFibGUtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoVmFsdWVJbkpTU3RhY2spOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KQEAgLTQ2MCwxOCArNDg5LDMyIEBAIHByaXZhdGU6CiAgICAgICAgIExWYWx1ZSB2YWx1
ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgIGlmICh2YXJpYWJsZS0+
aXNDYXB0dXJlZCgpKSB7CiAgICAgICAgICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNz
Rm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVy
YW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgbV9vdXQuc2V0
KHZhbHVlLCBtX2xvY2FsczY0Lm9wZXJhbmQodmFyaWFibGUtPmxvY2FsKCkpKTsKLSAgICAgICAg
aWYgKG5lZWRzRmx1c2hpbmcpCisgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAg
ICAgICBtX291dC5zdG9yZTY0KHZhbHVlLCBhZGRyZXNzRm9yKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CisgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSA9
IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGNvbXBpbGVNb3ZIaW50KCkKKyAgICB7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1f
bm9kZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZVpvbWJpZUhpbnQoKQorICAgIHsK
KyAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiBkYXRhID0gbV9ub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgbV9sYXN0U2V0T3BlcmFuZCA9IGRhdGEtPmxvY2FsKCk7CisgICAg
ICAgIG1fdmFsdWVTb3VyY2VzLm9wZXJhbmQoZGF0YS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShT
b3VyY2VJc0RlYWQpOwogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVNb3ZIaW50QW5kQ2hl
Y2soKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IEhhbmRsZSB0aGUgTW92SGludCBmb3IgT1NS
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIzCisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CiAgICAgICAgIHNwZWN1bGF0ZSht
X25vZGUtPmNoaWxkMSgpKTsKICAgICB9CiAgICAgCkBAIC01MDAsNyArNTQzLDcgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IG1fb3V0LmFkZFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgIHNw
ZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwor
ICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJh
Y3RWYWx1ZShyZXN1bHQsIDEpKTsKICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9k
ZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KQEAgLTUyNCw3ICs1NjcsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJm
bG93MzIobGVmdCwgcmlnaHQpOwotICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCAwLCAw
LCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7CisgICAgICAgICAgICBzcGVjdWxhdGUo
T3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMSkpOwog
ICAgICAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQobV9ub2RlLCBtX291dC5leHRyYWN0VmFsdWUo
cmVzdWx0LCAwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTQ3LDcgKzU5
MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubXVsKGxlZnQs
IHJpZ2h0KTsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIExWYWx1ZSBvdmVy
Zmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShv
dmVyZmxvd1Jlc3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywg
bm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKICAg
ICAgICAgICAgICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQs
IDApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC01NTYsOCArNTk5LDggQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgMCwgMCwgbV9vdXQubGVzc1RoYW4o
bGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE5lZ2F0
aXZlWmVybywgMCwgMCwgbV9vdXQubGVzc1RoYW4ocmlnaHQsIG1fb3V0LmludDMyWmVybykpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIG5vVmFsdWUoKSwgMCwgbV9v
dXQubGVzc1RoYW4obGVmdCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbihyaWdodCwg
bV9vdXQuaW50MzJaZXJvKSk7CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwogICAgICAgICAgICAgfQpAQCAtNTg1LDcgKzYyOCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhIG5lZ2F0ZS13aXRoLW92ZXJmbG93IGludHJpbnNp
Yy4gSG9wZWZ1bGx5IHRoaXMKICAgICAgICAgICAgICAgICAvLyBkb2VzIHRoZSB0cmljaywgdGhv
dWdoLgogICAgICAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0LnN1Yldp
dGhPdmVyZmxvdzMyKG1fb3V0LmludDMyWmVybywgdmFsdWUpOwotICAgICAgICAgICAgICAgIHNw
ZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0
LCAxKSk7CisgICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBub1ZhbHVlKCksIDAs
IG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOwogICAgICAgICAgICAgICAg
IHJlc3VsdCA9IG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMCk7CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKQEAgLTY1Niw3ICs2OTksNyBAQCBwcml2YXRlOgogICAgICAg
ICAKICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CiAg
ICAgICAgIHNwZWN1bGF0ZUZvcndhcmQoCi0gICAgICAgICAgICBPdmVyZmxvdywgMCwgMCwgbV9v
dXQubGVzc1RoYW4odmFsdWUsIG1fb3V0LmludDMyWmVybyksCisgICAgICAgICAgICBPdmVyZmxv
dywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbih2YWx1ZSwgbV9vdXQuaW50MzJaZXJvKSwK
ICAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0VUludDMyLCB2YWx1ZSkpOwog
ICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIHZhbHVlKTsKICAgICB9CkBAIC02NzUs
NyArNzE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlmIChtX25vZGUtPnN0cnVj
dHVyZVNldCgpLnNpemUoKSA9PSAxKSB7CiAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAg
ICAgICAgICAgZXhpdEtpbmQsIGNlbGwsIDAsCisgICAgICAgICAgICAgICAgZXhpdEtpbmQsIGpz
VmFsdWVWYWx1ZShjZWxsKSwgMCwKICAgICAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1
Y3R1cmUsIHdlYWtQb2ludGVyKG1fbm9kZS0+c3RydWN0dXJlU2V0KClbMF0pKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTY5Miw3ICs3MzUsNyBAQCBwcml2YXRlOgogICAg
ICAgICB9CiAgICAgICAgIAogICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICBleGl0S2lu
ZCwgY2VsbCwgMCwKKyAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUoY2VsbCksIDAs
CiAgICAgICAgICAgICBtX291dC5ub3RFcXVhbChzdHJ1Y3R1cmUsIHdlYWtQb2ludGVyKG1fbm9k
ZS0+c3RydWN0dXJlU2V0KCkubGFzdCgpKSkpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03NTUsNyArNzk4LDcgQEAgcHJpdmF0
ZToKICAgICAgICAgY2FzZSBBcnJheTo6Q29udGlndW91czogewogICAgICAgICAgICAgaWYgKG1f
bm9kZS0+YXJyYXlNb2RlKCkuaXNJbkJvdW5kcygpKSB7CiAgICAgICAgICAgICAgICAgc3BlY3Vs
YXRlKAotICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5kcywgMCwgMCwKKyAgICAgICAgICAg
ICAgICAgICAgT3V0T2ZCb3VuZHMsIG5vVmFsdWUoKSwgMCwKICAgICAgICAgICAgICAgICAgICAg
bV9vdXQuYWJvdmVPckVxdWFsKAogICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG1fb3V0
LmxvYWQzMihzdG9yYWdlLCBtX2hlYXBzLkJ1dHRlcmZseV9wdWJsaWNMZW5ndGgpKSk7CiAgICAg
ICAgICAgICAgICAgCkBAIC03NjQsNyArODA3LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAg
ICAgICAgICAgIG1faGVhcHMuaW5kZXhlZEludDMyUHJvcGVydGllcyA6IG1faGVhcHMuaW5kZXhl
ZENvbnRpZ3VvdXNQcm9wZXJ0aWVzLAogICAgICAgICAgICAgICAgICAgICBzdG9yYWdlLCBtX291
dC56ZXJvRXh0KGluZGV4LCBtX291dC5pbnRQdHIpLAogICAgICAgICAgICAgICAgICAgICBtX3N0
YXRlLmZvck5vZGUobV9ub2RlLT5jaGlsZDIoKSkubV92YWx1ZSkpOwotICAgICAgICAgICAgICAg
IHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIDAsIDAsIG1fb3V0LmlzWmVybzY0KHJlc3VsdCkpOwor
ICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShMb2FkRnJvbUhvbGUsIG5vVmFsdWUoKSwgMCwgbV9v
dXQuaXNaZXJvNjQocmVzdWx0KSk7CiAgICAgICAgICAgICAgICAgbV9qc1ZhbHVlVmFsdWVzLmFk
ZChtX25vZGUsIHJlc3VsdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CkBAIC04NjUsNjAgKzkwOCw2OSBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgfQogICAgIAot
ICAgIHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoRXhpdEtpbmQsIExWYWx1ZSwgTm9kZSosIExWYWx1
ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQgc3BlY3VsYXRlQmFja3dhcmQoCisgICAgICAgIEV4
aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2Ug
PSBtX291dC5uZXdCbG9jaygpOwotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBt
X291dC5uZXdCbG9jaygpOwotICAgICAgICAKLSAgICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25k
aXRpb24sIGZhaWxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICBMQmFzaWNCbG9jayBsYXN0
TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAv
LyBGSVhNRTogSW1wbGVtZW50IE9TUiBleGl0LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCi0gICAgICAgIG1fb3V0LmNhbGwobV9hYm9y
dEZ1bmN0aW9uKTsKLSAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKLSAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgIGFwcGVuZE9TUkV4aXQo
CisgICAgICAgICAgICBraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uLCBC
YWNrd2FyZFNwZWN1bGF0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAg
dm9pZCBzcGVjdWxhdGVGb3J3YXJkKEV4aXRLaW5kIGtpbmQsIExWYWx1ZSBsb3dWYWx1ZSwgTm9k
ZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwgY29uc3QgRm9ybWF0dGVkVmFsdWUm
KQorICAgIHZvaWQgc3BlY3VsYXRlRm9yd2FyZCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9y
bWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRp
b24sCisgICAgICAgIGNvbnN0IEZvcm1hdHRlZFZhbHVlJiByZWNvdmVyeSkKICAgICB7Ci0gICAg
ICAgIHNwZWN1bGF0ZUJhY2t3YXJkKGtpbmQsIGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25k
aXRpb24pOwotICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHJld2lyaW5nIG9mIE9TUiBleGl0
IHRvIGZvcndhcmQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM2MjMKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVjdWxhdGlvbiwg
cmVjb3ZlcnkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZShFeGl0S2luZCBraW5k
LCBMVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24p
CisgICAgdm9pZCBzcGVjdWxhdGUoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZh
bHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAg
IHsKLSAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwg
ZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcgdGhl
IE9TUiBleGl0IHRvIGZvcndhcmQsIGlmIG1fZGlyZWN0aW9uID09IEZvcndhcmREaXJlY3Rpb24u
Ci0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2
MjMKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLCBo
aWdoVmFsdWUsIGZhaWxDb25kaXRpb24sIG1fZGlyZWN0aW9uLCBGb3JtYXR0ZWRWYWx1ZSgpKTsK
ICAgICB9CiAgICAgCiAgICAgdm9pZCB0ZXJtaW5hdGUoRXhpdEtpbmQga2luZCkKICAgICB7Ci0g
ICAgICAgIHNwZWN1bGF0ZShraW5kLCAwLCAwLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAg
IHNwZWN1bGF0ZShraW5kLCBub1ZhbHVlKCksIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBiYWNrd2FyZFR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWls
Q29uZGl0aW9uKQorICAgIHZvaWQgYmFja3dhcmRUeXBlQ2hlY2soCisgICAgICAgIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNz
ZWRUaHJvdWdoLAorICAgICAgICBMVmFsdWUgZmFpbENvbmRpdGlvbikKICAgICB7Ci0gICAgICAg
IGlmICghbV9zdGF0ZS5uZWVkc1R5cGVDaGVjayhoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3Vn
aCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEFTU0VSVChtYXlIYXZlVHlwZUNoZWNr
KGhpZ2hWYWx1ZS51c2VLaW5kKCkpKTsKLSAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlw
ZSwgbG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRpb24pOwotICAgICAgICBt
X3N0YXRlLmZvck5vZGUoaGlnaFZhbHVlKS5maWx0ZXIodHlwZXNQYXNzZWRUaHJvdWdoKTsKKyAg
ICAgICAgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICAgICAgbG93VmFsdWUsIGhpZ2hWYWx1ZSwg
dHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uLCBCYWNrd2FyZFNwZWN1bGF0aW9uLAor
ICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZm9y
d2FyZFR5cGVDaGVjayhMVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVk
VHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQorICAgIHZvaWQg
Zm9yd2FyZFR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93
VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJk
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIzCisgICAgICAgIGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgRm9yd2FyZFNwZWN1bGF0
aW9uLAorICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoKSk7CiAgICAgfQogICAgIAotICAgIHZv
aWQgdHlwZUNoZWNrKExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9pZCB0
eXBlQ2hlY2soCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1
ZSwgU3BlY3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLAorICAgICAgICBMVmFsdWUgZmFp
bENvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIGJhY2t3YXJkVHlwZUNoZWNrKGxvd1ZhbHVlLCBo
aWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZCwgaWYgbV9k
aXJlY3Rpb24gPT0gRm9yd2FyZERpcmVjdGlvbi4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBlbmRUeXBlQ2hlY2so
CisgICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZh
aWxDb25kaXRpb24sIG1fZGlyZWN0aW9uLAorICAgICAgICAgICAgRm9ybWF0dGVkVmFsdWUoKSk7
CisgICAgfQorICAgIAorICAgIHZvaWQgYXBwZW5kVHlwZUNoZWNrKAorICAgICAgICBGb3JtYXR0
ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRUeXBlIHR5cGVzUGFz
c2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24sIFNwZWN1bGF0aW9uRGly
ZWN0aW9uIGRpcmVjdGlvbiwgRm9ybWF0dGVkVmFsdWUgcmVjb3ZlcnkpCisgICAgeworICAgICAg
ICBpZiAoIW1fc3RhdGUubmVlZHNUeXBlQ2hlY2soaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91
Z2gpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBBU1NFUlQobWF5SGF2ZVR5cGVDaGVj
ayhoaWdoVmFsdWUudXNlS2luZCgpKSk7CisgICAgICAgIGFwcGVuZE9TUkV4aXQoQmFkVHlwZSwg
bG93VmFsdWUsIGhpZ2hWYWx1ZS5ub2RlKCksIGZhaWxDb25kaXRpb24sIGRpcmVjdGlvbiwgcmVj
b3ZlcnkpOworICAgICAgICBtX3N0YXRlLmZvck5vZGUoaGlnaFZhbHVlKS5maWx0ZXIodHlwZXNQ
YXNzZWRUaHJvdWdoKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVlIGxvd0ludDMyKEVkZ2UgZWRn
ZSwgT3BlcmFuZFNwZWN1bGF0aW9uTW9kZSBtb2RlID0gQXV0b21hdGljT3BlcmFuZFNwZWN1bGF0
aW9uKQpAQCAtOTI5LDcgKzk4MSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSBib3hlZFJlc3VsdCA9IG1fanNWYWx1
ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhi
b3hlZFJlc3VsdCwgZWRnZSwgU3BlY0ludDMyLCBpc05vdEludDMyKGJveGVkUmVzdWx0KSk7Cisg
ICAgICAgICAgICBGVExfVFlQRV9DSEVDSygKKyAgICAgICAgICAgICAgICBqc1ZhbHVlVmFsdWUo
Ym94ZWRSZXN1bHQpLCBlZGdlLCBTcGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1bHQpKTsK
ICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB1bmJveEludDMyKGJveGVkUmVzdWx0KTsKICAg
ICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKGVkZ2Uubm9kZSgpLCByZXN1bHQpOwogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTk0NSw3ICs5OTgsOCBAQCBwcml2YXRlOgogICAgICAg
ICBBU1NFUlRfVU5VU0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8
IGlzQ2VsbChlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSB1
bmNoZWNrZWRSZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAg
ICAgICAgICAgRlRMX1RZUEVfQ0hFQ0sodW5jaGVja2VkUmVzdWx0LCBlZGdlLCBTcGVjQ2VsbCwg
aXNOb3RDZWxsKHVuY2hlY2tlZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0so
CisgICAgICAgICAgICAgICAganNWYWx1ZVZhbHVlKHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNw
ZWNDZWxsLCBpc05vdENlbGwodW5jaGVja2VkUmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm4g
dW5jaGVja2VkUmVzdWx0OwogICAgICAgICB9CiAgICAgICAgIApAQCAtOTcxLDcgKzEwMjUsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAg
IGlmIChMVmFsdWUgdW5ib3hlZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2Rl
KCkpKSB7Ci0gICAgICAgICAgICBGVExfVFlQRV9DSEVDSyh1bmJveGVkUmVzdWx0LCBlZGdlLCBT
cGVjQm9vbGVhbiwgaXNOb3RCb29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIEZU
TF9UWVBFX0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmJveGVkUmVzdWx0
KSwgZWRnZSwgU3BlY0Jvb2xlYW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0KSk7CiAgICAg
ICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQpOwogICAg
ICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAg
ICAgICAgIHJldHVybiByZXN1bHQ7CkBAIC0xMDk0LDcgKzExNDksNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgc3BlY3VsYXRlT2JqZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCiAgICAgewogICAg
ICAgICBGVExfVFlQRV9DSEVDSygKLSAgICAgICAgICAgIGNlbGwsIGVkZ2UsIFNwZWNPYmplY3Qs
CisgICAgICAgICAgICBqc1ZhbHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNPYmplY3QsCiAgICAg
ICAgICAgICBtX291dC5lcXVhbCgKICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGNlbGws
IG1faGVhcHMuSlNDZWxsX3N0cnVjdHVyZSksCiAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJ
bnRQdHIoZ2xvYmFsRGF0YSgpLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKQEAgLTExMDUsNiAr
MTE2MCwzNzQgQEAgcHJpdmF0ZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UsIGxvd0Nl
bGwoZWRnZSkpOwogICAgIH0KICAgICAKKyAgICBib29sIGlzTGl2ZShOb2RlKiBub2RlKQorICAg
IHsKKyAgICAgICAgSGFzaE1hcDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90
aW1lVG9MaXZlLmZpbmQobm9kZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2
ZS5lbmQoKSk7CisgICAgICAgIHJldHVybiAhIWl0ZXItPnZhbHVlOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHVzZShFZGdlIGVkZ2UpCisgICAgeworICAgICAgICBpZiAoIWVkZ2UtPmhhc1Jlc3Vs
dCgpKSB7CisgICAgICAgICAgICBBU1NFUlQoZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBIYXNo
TWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuZmluZChl
ZGdlLm5vZGUoKSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7
CisgICAgICAgIEFTU0VSVChpdGVyLT52YWx1ZSk7CisgICAgICAgIGl0ZXItPnZhbHVlLS07Cisg
ICAgfQorICAgIAorICAgIC8vIFdyYXBwZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19D
SElMRFJFTgorICAgIHZvaWQgdXNlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICB1
c2UoZWRnZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZv
ckJsb2NrKCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2Vz
LnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT52
YXJpYWJsZXNBdEhlYWRbaV07CisgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJs
ZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgKHZhcmlhYmxlLT5pc0FyZ3VtZW50c0FsaWFzKCkpIHsKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7CisgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbm9kZS0+c2hvdWxkR2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWVT
b3VyY2VzW2ldID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1f
Zmx1c2hlZExvY2FsT3BzLmNvbnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhp
cyB2YWx1ZSB3aWxsIGhhdmUgYmVlbiBmbHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNvbWUgZm9y
bSBvcgorICAgICAgICAgICAgICAgIC8vIGFub3RoZXIuCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNl
KERvdWJsZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFj
ayk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAg
ICAgICAgIGlmICh2YXJpYWJsZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxz
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJl
ZGljdGlvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1
ZVNvdXJjZShJbnQzMkluTG9jYWxzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChp
c0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBt
X3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKEJvb2xlYW5JbkxvY2Fscyk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVu
ZE9TUkV4aXQoCisgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVl
LCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uLAorICAgICAgICBTcGVjdWxh
dGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsK
KyAgICAgICAgZGF0YUxvZygiICAgIE9TUiBleGl0IHdpdGggdmFsdWUgc291cmNlczogIiwgbV92
YWx1ZVNvdXJjZXMsICJcbiIpOworICAgICAgICAKKyAgICAgICAgQVNTRVJUKG1fZnRsU3RhdGUu
aml0Q29kZS0+b3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKSk7Cisg
ICAgICAgIHVuc2lnbmVkIGluZGV4ID0gbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsKKyAgICAg
ICAgCisgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5hcHBlbmQoCisgICAgICAg
ICAgICBPU1JFeGl0KAorICAgICAgICAgICAgICAgIGtpbmQsIGxvd1ZhbHVlLmZvcm1hdCgpLCBt
X2dyYXBoLm1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGVGb3IoaGlnaFZhbHVlKSwKKyAgICAg
ICAgICAgICAgICBtX25vZGUtPmNvZGVPcmlnaW4sIG1fbGFzdFNldE9wZXJhbmQsIG1fdmFsdWVT
b3VyY2VzLm51bWJlck9mQXJndW1lbnRzKCksCisgICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJj
ZXMubnVtYmVyT2ZMb2NhbHMoKSkpOworICAgICAgICBtX2Z0bFN0YXRlLm9zckV4aXQuYXBwZW5k
KE9TUkV4aXRDb21waWxhdGlvbkluZm8oKSk7CisgICAgICAgIAorICAgICAgICBPU1JFeGl0JiBl
eGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2RlLT5vc3JFeGl0Lmxhc3QoKTsKKyAgICAgICAgT1NSRXhp
dENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhpdC5sYXN0KCk7CisKKyAg
ICAgICAgTEJhc2ljQmxvY2sgZmFpbENhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAKKyAg
ICAgICAgbV9vdXQuYnJhbmNoKGZhaWxDb25kaXRpb24sIGZhaWxDYXNlLCBjb250aW51YXRpb24p
OworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9wcm9sb2d1ZSk7CisgICAgICAg
IGluZm8ubV90aHVua0FkZHJlc3MgPSBidWlsZEFsbG9jYShtX291dC5tX2J1aWxkZXIsIG1fb3V0
LmludFB0cik7CisgICAgICAgIAorICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0
LmFwcGVuZFRvKGZhaWxDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICAKKyAgICAgICAgRXhp
dEFyZ3VtZW50TGlzdCBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQobV9jYWxs
RnJhbWUpOworICAgICAgICBpZiAoISFsb3dWYWx1ZSkKKyAgICAgICAgICAgIGFyZ3VtZW50cy5h
cHBlbmQobG93VmFsdWUudmFsdWUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgZXhpdC5tX3ZhbHVlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgVmFs
dWVTb3VyY2Ugc291cmNlID0gbV92YWx1ZVNvdXJjZXNbaV07CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHN3aXRjaCAoc291cmNlLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBWYWx1ZUlu
SlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjpp
bkpTU3RhY2soKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSW50
MzJJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1
ZTo6aW5KU1N0YWNrQXNJbnQzMigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBEb3VibGVJbkpTU3RhY2s6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tp
XSA9IEV4aXRWYWx1ZTo6aW5KU1N0YWNrQXNEb3VibGUoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmFsdWVJbkxvY2FsczoKKyAgICAgICAgICAgICAgICBhZGRF
eGl0QXJndW1lbnQoCisgICAgICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFs
dWVGb3JtYXRKU1ZhbHVlLCBtX291dC5nZXQobV9sb2NhbHM2NFtpXSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBJbnQzMkluTG9jYWxzOgorICAgICAgICAgICAg
ICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAgZXhpdCwgYXJndW1lbnRz
LCBpLCBWYWx1ZUZvcm1hdEludDMyLCBtX291dC5nZXQobV9sb2NhbHMzMltpXSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBCb29sZWFuSW5Mb2NhbHM6CisgICAg
ICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgICAgICAgICBleGl0LCBh
cmd1bWVudHMsIGksIFZhbHVlRm9ybWF0Qm9vbGVhbiwgbV9vdXQuZ2V0KG1fbG9jYWxzQm9vbGVh
bltpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBEb3VibGVJ
bkxvY2FsczoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogaW1wbGVtZW50IGRvdWJsZXMgaW4g
RlRMLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM2MjQKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcmd1bWVudHNT
b3VyY2U6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGltcGxlbWVudCBQaGFudG9tQXJndW1l
bnRzLgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMTM5ODYKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTb3VyY2VJc0Rl
YWQ6CisgICAgICAgICAgICAgICAgZXhpdC5tX3ZhbHVlc1tpXSA9IEV4aXRWYWx1ZTo6ZGVhZCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBIYXZlTm9kZToKKyAg
ICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnRGb3JOb2RlKGV4aXQsIGFyZ3VtZW50cywgaSwg
c291cmNlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGRhdGFMb2coIiAgICAgICAgRXhpdCB2YWx1ZXM6ICIsIGV4aXQubV92YWx1ZXMsICJc
biIpOworICAgICAgICAKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3YXJkU3BlY3VsYXRp
b24pCisgICAgICAgICAgICBleGl0LmNvbnZlcnRUb0ZvcndhcmQobV9oaWdoQmxvY2ssIG1fbm9k
ZSwgbV9ub2RlSW5kZXgsIHJlY292ZXJ5LCBhcmd1bWVudHMpOworICAgICAgICAKKyAgICAgICAg
Ly8gU28sIHRoZSByZWFsbHkgbGFtZSB0aGluZyBoZXJlIGlzIHRoYXQgd2UgaGF2ZSB0byBidWls
ZCBhbiBMTFZNIGZ1bmN0aW9uIHR5cGUuCisgICAgICAgIC8vIEJvb28uCisgICAgICAgIFZlY3Rv
cjxMVHlwZSwgMTY+IGFyZ3VtZW50VHlwZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFw
cGVuZCh0eXBlT2YoYXJndW1lbnRzW2ldKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5jYWxs
KAorICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCisgICAgICAgICAgICAgICAgbV9vdXQuZ2V0
KGluZm8ubV90aHVua0FkZHJlc3MpLAorICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0
aW9uVHlwZShtX291dC52b2lkVHlwZSwgYXJndW1lbnRUeXBlcykpKSwKKyAgICAgICAgICAgIGFy
Z3VtZW50cyk7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAg
ICAgIG1fZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVuayhpbmRleCk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwg
RXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgTm9kZSogbm9kZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAg
QVNTRVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKKworICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFu
dEV4aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIAorICAgICAgICBpZiAoIWlzTGl2ZShub2RlKSkgeworICAgICAgICAgICAgYm9vbCBm
b3VuZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmVlZHNPU1JCYWNr
d2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUt
PmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4
aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQorICAgICAgICAgICAgICAgICAg
ICBmb3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBpbnQzMlRvRG91YmxlID0gMDsK
KyAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvSW50MzIgPSAwOworICAgICAgICAgICAgICAg
IE5vZGUqIHVpbnQzMlRvTnVtYmVyID0gMDsKKyAgICAgICAgICAgICAgICBOb2RlKiBkb3VibGVB
c0ludDMyID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5v
ZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4oKTsKKyAg
ICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVuZCA9IG1f
dGltZVRvTGl2ZS5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsr
aXRlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRp
ZGF0ZSA9IGl0ZXItPmtleTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNo
aWxkMSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjYW5kaWRhdGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAgICAg
ICAgICAgICAgaW50MzJUb0RvdWJsZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMiA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVt
YmVyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5kaWRhdGU7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBEb3VibGVBc0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIg
PSBjYW5kaWRhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmVlZHNP
U1JGb3J3YXJkUmV3aXJpbmcoY2FuZGlkYXRlLT5vcCgpKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZG91YmxlQXNJbnQzMikKKyAgICAg
ICAgICAgICAgICAgICAgbm9kZSA9IGRvdWJsZUFzSW50MzI7CisgICAgICAgICAgICAgICAgZWxz
ZSBpZiAoaW50MzJUb0RvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGludDMyVG9E
b3VibGU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMyKQorICAgICAgICAg
ICAgICAgICAgICBub2RlID0gdmFsdWVUb0ludDMyOworICAgICAgICAgICAgICAgIGVsc2UgaWYg
KHVpbnQzMlRvTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gdWludDMyVG9OdW1i
ZXI7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzTGl2ZShub2RlKSkK
KyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgZXhpdC5t
X3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChp
c0xpdmUobm9kZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2lu
dDMyVmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQs
IGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIsIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0
ID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3Vt
ZW50KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKExW
YWx1ZSByZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICBh
ZGRFeGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVl
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBGSVhNRTogSW1wbGVtZW50IGRvdWJsZXMgaW4gdGhlIEZUTC4KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNAorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBib29sIHRyeVRv
U2V0Q29uc3RhbnRFeGl0QXJndW1lbnQoT1NSRXhpdCYgZXhpdCwgdW5zaWduZWQgaW5kZXgsIE5v
ZGUqIG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAg
Y2FzZSBKU0NvbnN0YW50OgorICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICAg
ICAgZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmNvbnN0YW50KG1fZ3JhcGgudmFs
dWVPZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQg
UGhhbnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xMTM5ODYKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lk
IGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlz
dCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0LAorICAgICAg
ICBMVmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9IEV4
aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXpl
KCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgbGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrcygpCisgICAg
eworICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdFRodW5rID0KKyAgICAgICAg
ICAgIGdsb2JhbERhdGEoKS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IpOworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJl
bChvc3JFeGl0VGh1bmsuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG1fcHJvbG9ndWUpOworICAgICAgICBtX291dC5qdW1wKG1faW5pdGlhbGl6YXRpb24pOworICAg
ICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7CisgICAgICAg
IAorICAgICAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoCisgICAgICAgICAgICBnbG9iYWxEYXRh
KCksICZtX2V4aXRUaHVua0dlbmVyYXRvciwgbV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywK
KyAgICAgICAgICAgIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgICAgICAKKyAgICAg
ICAgQVNTRVJUKG1fZnRsU3RhdGUub3NyRXhpdC5zaXplKCkgPT0gbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBPU1JF
eGl0Q29tcGlsYXRpb25JbmZvJiBpbmZvID0gbV9mdGxTdGF0ZS5vc3JFeGl0W2ldOworICAgICAg
ICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdFtpXTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKGluZm8ubV90aHVua0p1bXAs
IHRhcmdldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fb3V0LnNldCgKKyAgICAgICAg
ICAgICAgICBtX291dC5jb25zdEludFB0cigKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZl
ci5sb2NhdGlvbk9mKGluZm8ubV90aHVua0xhYmVsKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKKyAg
ICAgICAgICAgICAgICBpbmZvLm1fdGh1bmtBZGRyZXNzKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZXhpdC5tX3BhdGNoYWJsZUNvZGVPZmZzZXQgPSBsaW5rQnVmZmVyLm9mZnNldE9mKGlu
Zm8ubV90aHVua0p1bXApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2Z0bFN0YXRl
LmppdENvZGUtPmluaXRpYWxpemVFeGl0VGh1bmtzKAorICAgICAgICAgICAgRklOQUxJWkVfREZH
X0NPREUoCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlciwKKyAgICAgICAgICAgICAgICAoIkZU
TCBleGl0IHRodW5rcyBmb3IgJXMiLCB0b0NTdHJpbmcoQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9m
dGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jayxKSVRDb2RlOjpGVExKSVQpKS5kYXRhKCkpKSk7CisK
KyAgICAgICAgbV9vdXQuanVtcChtX2FyZ3VtZW50Q2hlY2tzKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPm9wKCkgIT0gWm9t
YmllSGludCk7CisgICAgICAgIAorICAgICAgICBpbnQgb3BlcmFuZCA9IG5vZGUtPmxvY2FsKCk7
CisgICAgICAgIAorICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3BlcmFuZDsKKyAgICAgICAg
bV92YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291cmNlKG5vZGUtPmNoaWxk
MSgpLm5vZGUoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vha1JlZmVyZW5jZShKU0Nl
bGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0Q29kZS0+Y29tbW9uLndl
YWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTExNTEsMTIgKzE1NzQsMTMgQEAgcHJpdmF0ZToKICAg
ICBPdXRwdXQgbV9vdXQ7CiAgICAgCiAgICAgTEJhc2ljQmxvY2sgbV9wcm9sb2d1ZTsKKyAgICBM
QmFzaWNCbG9jayBtX2luaXRpYWxpemF0aW9uOworICAgIExCYXNpY0Jsb2NrIG1fYXJndW1lbnRD
aGVja3M7CiAgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgTEJhc2ljQmxvY2s+IG1fYmxvY2tzOwog
ICAgIAogICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKICAgICBMVmFsdWUgbV90YWdUeXBlTnVtYmVy
OwogICAgIExWYWx1ZSBtX3RhZ01hc2s7Ci0gICAgTFZhbHVlIG1fYWJvcnRGdW5jdGlvbjsKICAg
ICAKICAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsKICAgICBWZWN0b3I8Tm9k
ZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKQEAgLTExNjUsMTUgKzE1ODksMjEgQEAgcHJp
dmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fanNWYWx1ZVZhbHVlczsKICAgICBI
YXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUq
LCBMVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD4g
bV90aW1lVG9MaXZlOwogICAgIAogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHNCb29sZWFu
OwogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKICAgICBPcGVyYW5kczxMVmFsdWU+
IG1fbG9jYWxzNjQ7CiAgICAgCisgICAgT3BlcmFuZHM8VmFsdWVTb3VyY2U+IG1fdmFsdWVTb3Vy
Y2VzOworICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIEV4aXRUaHVua0dlbmVyYXRvciBt
X2V4aXRUaHVua0dlbmVyYXRvcjsKKyAgICAKICAgICBBYnN0cmFjdFN0YXRlIG1fc3RhdGU7CiAg
ICAgQmFzaWNCbG9jayogbV9oaWdoQmxvY2s7CiAgICAgQmFzaWNCbG9jayogbV9uZXh0SGlnaEJs
b2NrOwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dExvd0Jsb2NrOworICAgIHVuc2lnbmVkIG1fbm9k
ZUluZGV4OwogICAgIE5vZGUqIG1fbm9kZTsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2Rp
cmVjdGlvbjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExPU1JFeGl0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVC
bG9jay5oIgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdOb2RlLmgi
CisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50LmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50
TGlzdC5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERG
RzsKKworT1NSRXhpdDo6T1NSRXhpdCgKKyAgICBFeGl0S2luZCBleGl0S2luZCwgVmFsdWVGb3Jt
YXQgcHJvZmlsZVZhbHVlRm9ybWF0LAorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUg
dmFsdWVQcm9maWxlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCisgICAgaW50IGxhc3RTZXRPcGVy
YW5kLCB1bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMp
CisgICAgOiBPU1JFeGl0QmFzZShleGl0S2luZCwgY29kZU9yaWdpbikKKyAgICAsIG1fcHJvZmls
ZVZhbHVlRm9ybWF0KHByb2ZpbGVWYWx1ZUZvcm1hdCkKKyAgICAsIG1fdmFsdWVQcm9maWxlKHZh
bHVlUHJvZmlsZSkKKyAgICAsIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCgwKQorICAgICwgbV9sYXN0
U2V0T3BlcmFuZChsYXN0U2V0T3BlcmFuZCkKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1l
bnRzLCBudW1iZXJPZkxvY2FscykKK3sKK30KKworQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAorewor
ICAgIHJldHVybiBDb2RlTG9jYXRpb25KdW1wKAorICAgICAgICByZWludGVycHJldF9jYXN0PGNo
YXIqPigKKyAgICAgICAgICAgIGZ0bENvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5mdGwoKS0+ZXhp
dFRodW5rcygpLmRhdGFMb2NhdGlvbigpKSArCisgICAgICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNl
dCk7Cit9CisKK3ZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZCgKKyAgICBCYXNpY0Jsb2Nr
KiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwKKyAgICBjb25z
dCBGb3JtYXR0ZWRWYWx1ZSAmdmFsdWUsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cykKK3sK
KyAgICBOb2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGlmICghZG9TZWFy
Y2hGb3JGb3J3YXJkQ29udmVyc2lvbihibG9jaywgY3VycmVudE5vZGUsIG5vZGVJbmRleCwgISF2
YWx1ZSwgbm9kZSwgbGFzdE1vdkhpbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQo
bm9kZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCisgICAg
bV9jb2RlT3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAKKyAgICBpZiAoIXZhbHVlKQor
ICAgICAgICByZXR1cm47CisgICAgCisgICAgaW50IG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1v
dkhpbnQtPmxvY2FsKCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG92ZXJyaWRkZW5PcGVyYW5k
OworICAgIAorICAgIC8vIElzIHRoZSB2YWx1ZSBmb3IgdGhpcyBvcGVyYW5kIGJlaW5nIHBhc3Nl
ZCBhcyBhbiBhcmd1bWVudCB0byB0aGUgZXhpdCwgb3IgaXMKKyAgICAvLyBpdCBzb21ldGhpbmcg
ZWxzZT8gSWYgaXQncyBhbiBhcmd1bWVudCBhbHJlYWR5LCB0aGVuIHJlcGxhY2UgdGhhdCBhcmd1
bWVudDsKKyAgICAvLyBvdGhlcndpc2UgYWRkIGFub3RoZXIgYXJndW1lbnQuCisgICAgaWYgKG1f
dmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgRXhpdEFy
Z3VtZW50IGV4aXRBcmd1bWVudCA9IG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5leGl0QXJn
dW1lbnQoKTsKKyAgICAgICAgYXJndW1lbnRzW2V4aXRBcmd1bWVudC5hcmd1bWVudCgpXSA9IHZh
bHVlLnZhbHVlKCk7CisgICAgICAgIG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXSA9IEV4aXRW
YWx1ZTo6ZXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgZXhpdEFyZ3VtZW50LndpdGhGb3JtYXQo
dmFsdWUuZm9ybWF0KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBhcmd1bWVudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgYXJndW1lbnRzLmFwcGVuZCh2
YWx1ZS52YWx1ZSgpKTsKKyAgICBtX3ZhbHVlc1ttX2xhc3RTZXRPcGVyYW5kXSA9IEV4aXRWYWx1
ZTo6ZXhpdEFyZ3VtZW50KAorICAgICAgICBFeGl0QXJndW1lbnQodmFsdWUuZm9ybWF0KCksIGFy
Z3VtZW50KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NSRXhpdF9oCisjZGVmaW5lIEZU
TE9TUkV4aXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmls
ZS5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0
aW9ucy5oIgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudExpc3QuaCIKKyNpbmNsdWRlICJGVExF
eGl0VmFsdWUuaCIKKyNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgorI2luY2x1ZGUgIk1l
dGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2lu
Y2x1ZGUgIlZhbHVlUHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKKy8vIFRyYWNrcyBvbmUgT1NSIGV4aXQgc2l0ZSB3aXRoaW4gdGhlIEZUTCBKSVQuIE9TUiBl
eGl0IGluIEZUTCB3b3JrcyBieSBkZWNvbnN0cnVjdGluZworLy8gdGhlIGNyYXp5IHRoYXQgaXMg
T1NSIGRvd24gdG8gc2ltcGxlIFNTQSBDRkcgcHJpbWl0aXZlcyB0aGF0IGFueSBjb21waWxlciBi
YWNrZW5kCisvLyAoaW5jbHVkaW5nIG9mIGNvdXJzZSBMTFZNKSBjYW4gZ3JvayBhbmQgZG8gbWVh
bmluZ2Z1bCB0aGluZ3MgdG8uIEV4Y2VwdCBmb3IKKy8vIHdhdGNocG9pbnQtYmFzZWQgZXhpdHMs
IHdoaWNoIGhhdmVuJ3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQgKHNlZSB3ZWJraXQub3JnL2IvMTEz
NjQ3KSwKKy8vIGFuIGV4aXQgaXMganVzdCBhIGNvbmRpdGlvbmFsIGJyYW5jaCBpbiB0aGUgZW1p
dHRlZCBjb2RlIHdoZXJlIG9uZSBkZXN0aW5hdGlvbiBpcyB0aGUKKy8vIGNvbnRpbnVhdGlvbiBh
bmQgdGhlIG90aGVyIGlzIGEgYmFzaWMgYmxvY2sgdGhhdCBwZXJmb3JtcyBhIG5vLXJldHVybiB0
YWlsLWNhbGwgdG8gYW4KKy8vIGV4aXQgdGh1bmsuIFRoaXMgdGh1bmsgdGFrZXMgYXMgaXRzIGFy
Z3VtZW50cyB0aGUgbGl2ZSBub24tY29uc3RhbnQKKy8vIG5vdC1hbHJlYWR5LWFjY291bnRlZC1m
b3IgYnl0ZWNvZGUgc3RhdGUuIFRvIGFwcHJlY2lhdGUgaG93IHRoaXMgd29ya3MgY29uc2lkZXIg
dGhlCisvLyBmb2xsb3dpbmcgSmF2YVNjcmlwdCBwcm9ncmFtLCBhbmQgaXRzIGxvd2VyaW5nIGRv
d24gdG8gTExWTSBJUiBpbmNsdWRpbmcgdGhlIHJlbGV2YW50CisvLyBleGl0czoKKy8vCisvLyBm
dW5jdGlvbiBmb28obykgeworLy8gICAgIHZhciBhID0gby5hOyAvLyBwcmVkaWN0ZWQgaW50Cisv
LyAgICAgdmFyIGIgPSBvLmI7CisvLyAgICAgdmFyIGMgPSBvLmM7IC8vIE5CIHRoaXMgaXMgZGVh
ZAorLy8gICAgIGEgPSBhIHwgNTsgLy8gb3VyIGV4YW1wbGUgT1NSIGV4aXQ6IG5lZWQgdG8gY2hl
Y2sgaWYgYSBpcyBhbiBpbnQKKy8vICAgICByZXR1cm4gYSArIGI7CisvLyB9CisvLworLy8gSnVz
dCBjb25zaWRlciB0aGUgImEgfCA1Ii4gSW4gdGhlIERGRyBJUiwgdGhpcyBsb29rcyBsaWtlOgor
Ly8KKy8vIEJpdE9yKENoZWNrOkludDMyOkBhLCBJbnQzMjo1KQorLy8KKy8vIFdoZXJlIEBhIGlz
IHRoZSBub2RlIGZvciB0aGUgR2V0TG9jYWwgbm9kZSB0aGF0IGdldHMgdGhlIHZhbHVlIG9mIHRo
ZSAnYScgdmFyaWFibGUuCisvLyBDb25jZXB0dWFsbHksIHRoaXMgbm9kZSBjYW4gYmUgZnVydGhl
ciBicm9rZW4gZG93biB0byB0aGUgZm9sbG93aW5nIChub3RlIHRoYXQgdGhpcworLy8gcGFydGlj
dWxhciBsb3dlcmluZyBuZXZlciBhY3R1YWxseSBoYXBwZW5zIC0gd2Ugc2tpcCB0aGlzIHN0ZXAg
YW5kIGdvIHN0cmFpZ2h0IHRvCisvLyBMTFZNIElSIC0gYnV0IGl0J3Mgc3RpbGwgdXNlZnVsIHRv
IHNlZSB0aGlzKToKKy8vCisvLyBleGl0SWYoQGEgaXMgbm90IGludDMyKTsKKy8vIGNvbnRpbnVh
dGlvbjsKKy8vCisvLyBXaGVyZSAnZXhpdElmKCknIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGV4
aXQgaWYgdGhlIGFyZ3VtZW50IGlzIHRydWUsIGFuZAorLy8gJ2NvbnRpbnVhdGlvbicgaXMgdGhl
IHN0dWZmIHRoYXQgd2Ugd2lsbCBkbyBhZnRlciB0aGUgZXhpdElmKCkgY2hlY2suIChOb3RlIHRo
YXQKKy8vIEZUTCByZWZlcnMgdG8gJ2V4aXRJZigpJyBhcyAnc3BlY3VsYXRlKCknLCB3aGljaCBp
cyBpbiBsaW5lIHdpdGggREZHIHRlcm1pbm9sb2d5LikKKy8vIFRoaXMgdGhlbiBnZXRzIGJyb2tl
biBkb3duIHRvIHRoZSBmb2xsb3dpbmcgTExWTSBJUiwgYXNzdW1pbmcgdGhhdCAlMCBpcyB0aGUg
TExWTQorLy8gdmFsdWUgY29ycmVzcG9uZGluZyB0byB2YXJpYWJsZSAnYScsIGFuZCAlMSBpcyB0
aGUgTExWTSB2YWx1ZSBmb3IgdmFyaWFibGUgJ2InOgorLy8KKy8vICAgJTIgPSAuLi4gLy8gdGhl
IHByZWRpY3RhdGUgY29ycmVzcG9uZGluZyB0byAnQGEgaXMgbm90IGludDMyJworLy8gICBiciBp
MSAlMiwgbGFiZWwgJTMsIGxhYmVsICU0CisvLyA7IDxsYWJlbD46MworLy8gICBjYWxsIHZvaWQg
ZXhpdFRodW5rMSglMCwgJTEpIC8vIHBhc3MgJ2EnIGFuZCAnYicsIHNpbmNlIHRoZXkncmUgYm90
aCBsaXZlLWluLWJ5dGVjb2RlCisvLyAgIHVucmVhY2hhYmxlCisvLyA7IDxsYWJlbD46NAorLy8g
ICAuLi4gLy8gY29kZSBmb3IgdGhlIGNvbnRpbnVhdGlvbgorLy8KKy8vIFdoZXJlICdleGl0VGh1
bmsxJyBpcyB0aGUgSVIgdG8gZ2V0IHRoZSBleGl0IHRodW5rIGZvciAqdGhpcyogT1NSIGV4aXQu
IEVhY2ggT1NSCisvLyBleGl0IHdpbGwgYXBwZWFyIHRvIExMVk0gdG8gaGF2ZSBhIGRpc3RpbmN0
IGV4aXQgdGh1bmsuCisvLworLy8gTm90ZSB0aGF0IHRoaXMgZGlkbid0IGhhdmUgdG8gcGFzcyAn
NScsICdvJywgb3IgJ2MnIHRvIHRoZSBleGl0IHRodW5rLiA1IGlzIGEKKy8vIGNvbnN0YW50IGFu
ZCB0aGUgREZHIGFscmVhZHkga25vd3MgdGhhdCwgYW5kIGNhbiBhbHJlYWR5IHRlbGwgdGhlIE9T
UiBleGl0IG1hY2hpbmVyeQorLy8gd2hhdCB0aGF0IGNvbnRhbnQgaXMgYW5kIHdoaWNoIGJ5dGVj
b2RlIHZhcmlhYmxlcyAoaWYgYW55KSBpdCBuZWVkcyB0byBiZSBkcm9wcGVkCisvLyBpbnRvLiBU
aGlzIGlzIGNvbnZleWVkIHRvIHRoZSBleGl0IHN0YXRpY2FsbHksIHZpYSB0aGUgT1NSRXhpdCBk
YXRhIHN0cnVjdHVyZSBiZWxvdy4KKy8vIFNlZSB0aGUgY29kZSBmb3IgRXhpdFZhbHVlIGZvciBk
ZXRhaWxzLiAnbycgaXMgYW4gYXJndW1lbnQsIGFuZCBhcmd1bWVudHMgYXJlIGFsd2F5cworLy8g
ImZsdXNoZWQiIC0gaWYgeW91IG5ldmVyIGFzc2lnbiB0aGVtIHRoZW4gdGhlaXIgdmFsdWVzIGFy
ZSBzdGlsbCBpbiB0aGUgYXJndW1lbnQKKy8vIHN0YWNrIHNsb3RzLCBhbmQgaWYgeW91IGRvIGFz
c2lnbiB0aGVtIHRoZW4gd2UgZWFnZXJseSBzdG9yZSB0aGVtIGludG8gdGhvc2Ugc2xvdHMuCisv
LyAnYycgaXMgZGVhZCBpbiBieXRlY29kZSwgYW5kIHRoZSBERkcga25vd3MgdGhpczsgd2Ugc3Rh
dGljYWxseSB0ZWxsIHRoZSBleGl0IHRodW5rCisvLyB0aGF0IGl0J3MgZGVhZCBhbmQgZG9uJ3Qg
aGF2ZSB0byBwYXNzIGFueXRoaW5nLiBUaGUgZXhpdCB0aHVuayB3aWxsICJpbml0aWFsaXplIiBp
dHMKKy8vIHZhbHVlIHRvIFVuZGVmaW5lZC4KKy8vCisvLyBUaGlzIGFwcHJvYWNoIHRvIE9TUiBl
eGl0IGhhcyBhIG51bWJlciBvZiB2aXJ0dWVzOgorLy8KKy8vIC0gSXQgaXMgYW4gZW50aXJlbHkg
dW5zdXJwcmlzaW5nIHJlcHJlc2VudGF0aW9uIGZvciBhIGNvbXBpbGVyIHRoYXQgYWxyZWFkeSBn
cm9rcworLy8gICBDRkctbGlrZSBJUnMgZm9yIEMtbGlrZSBsYW5ndWFnZXMuIEFsbCBleGlzdGlu
ZyBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zIGp1c3QKKy8vICAgd29yay4KKy8vCisvLyAt
IEl0IGxlbmRzIGl0c2VsZiBuYXR1cmFsbHkgdG8gbW9kZXJuIGFwcHJvYWNoZXMgdG8gY29kZSBt
b3Rpb24uIEZvciBleGFtcGxlLCB5b3UKKy8vICAgY291bGQgc2luayBvcGVyYXRpb25zIGZyb20g
YWJvdmUgdGhlIGV4aXQgdG8gYmVsb3cgaXQsIGlmIHlvdSBqdXN0IGR1cGxpY2F0ZSB0aGUKKy8v
ICAgb3BlcmF0aW9uIGludG8gdGhlIE9TUiBleGl0IGJsb2NrLiBUaGlzIGlzIGJvdGggbGVnYWwg
YW5kIGRlc2lyYWJsZS4gSXQgd29ya3MKKy8vICAgYmVjYXVzZSB0aGUgYmFja2VuZCBzZWVzIHRo
ZSBPU1IgZXhpdCBibG9jayBhcyBiZWluZyBubyBkaWZmZXJlbnQgdGhhbiBhbnkgb3RoZXIsCisv
LyAgIGFuZCBMTFZNIGFscmVhZHkgc3VwcG9ydHMgc2lua2luZyBpZiBpdCBzZWVzIHRoYXQgYSB2
YWx1ZSBpcyBvbmx5IHBhcnRpYWxseSB1c2VkLgorLy8gICBIZW5jZSB0aGVyZSBleGlzdHMgYSB2
YWx1ZSB0aGF0IGRvbWluYXRlcyB0aGUgZXhpdCBidXQgaXMgb25seSB1c2VkIGJ5IHRoZSBleGl0
CisvLyAgIHRodW5rIGFuZCBub3QgYnkgdGhlIGNvbnRpbnVhdGlvbiwgc2lua2luZyBvdWdodCB0
byBraWNrIGluIGZvciB0aGF0IHZhbHVlLgorLy8gICBIb2lzdGluZyBvcGVyYXRpb25zIGZyb20g
YmVsb3cgaXQgdG8gYWJvdmUgaXQgaXMgYWxzbyBwb3NzaWJsZSwgZm9yIHNpbWlsYXIKKy8vICAg
cmVhc29ucy4KKy8vCisvLyAtIFRoZSBuby1yZXR1cm4gdGFpbC1jYWxsIHRvIHRoZSBPU1IgZXhp
dCB0aHVuayBjYW4gYmUgc3ViamVjdGVkIHRvIHNwZWNpYWxpemVkCisvLyAgIGNvZGUtc2l6ZSBy
ZWR1Y3Rpb24gb3B0aW1pemF0aW9ucywgdGhvdWdoIHRoaXMgaXMgb3B0aW9uYWwuIEZvciBleGFt
cGxlLCBpbnN0ZWFkCisvLyAgIG9mIGFjdHVhbGx5IGVtaXR0aW5nIGEgY2FsbCBhbG9uZyB3aXRo
IGFsbCB0aGF0IGdvZXMgd2l0aCBpdCAobGlrZSBwbGFjaW5nIHRoZQorLy8gICBhcmd1bWVudHMg
aW50byBhcmd1bWVudCBwb3NpdGlvbiksIHRoZSBiYWNrZW5kIGNvdWxkIGNob29zZSB0byBzaW1w
bHkgaW5mb3JtIHVzCisvLyAgIHdoZXJlIGl0IGhhZCBwbGFjZWQgdGhlIGFyZ3VtZW50cyBhbmQg
ZXhwZWN0IHRoZSBjYWxsZWUgKGkuZS4gdGhlIGV4aXQgdGh1bmspIHRvCisvLyAgIGZpZ3VyZSBp
dCBvdXQgZnJvbSB0aGVyZS4gSXQgY291bGQgYWxzbyB0ZWxsIHVzIHdoYXQgd2UgbmVlZCB0byBk
byB0byBwb3Agc3RhY2ssCisvLyAgIGFsdGhvdWdoIGFnYWluLCBpdCBkb2Vzbid0IGhhdmUgdG87
IGl0IGNvdWxkIGp1c3QgZW1pdCB0aGF0IGNvZGUgbm9ybWFsbHkuIFRob3VnaAorLy8gICB3ZSBk
b24ndCBzdXBwb3J0IHRoaXMgeWV0LCB3ZSBjb3VsZDsgdGhlIG9ubHkgdGhpbmcgdGhhdCB3b3Vs
ZCBjaGFuZ2Ugb24gb3VyIGVuZAorLy8gICBpcyB0aGF0IHdlJ2QgbmVlZCBmZWVkYmFjayBmcm9t
IHRoZSBiYWNrZW5kIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgYXJndW1lbnRzCisvLyAgIGFu
ZCBhIGRlc2NyaXB0aW9uIG9mIHRoZSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRvbmUgdG8gcG9w
IHN0YWNrLiBUaGlzIHdvdWxkCisvLyAgIGludm9sdmUgc3dpdGNoaW5nIHRoZSBtX3ZhbHVlcyBh
cnJheSB0byB1c2Ugc29tZXRoaW5nIG1vcmUgYWtpbiB0byBWYWx1ZVJlY292ZXJ5CisvLyAgIHJh
dGhlciB0aGFuIHRoZSBjdXJyZW50IEV4aXRWYWx1ZSwgYWxiZWl0IHBvc3NpYmx5IHdpdGggc29t
ZSBoYWNrcyB0byBiZXR0ZXIKKy8vICAgdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgcGxhY2VzIHdo
ZXJlIHRoZSBMTFZNIGJhY2tlbmQgd291bGQgcHV0IHZhbHVlcy4KKy8vCisvLyAtIEl0IGNvdWxk
IGJlIGV4dGVuZGVkIHRvIGFsbG93IHRoZSBiYWNrZW5kIHRvIGRvIGl0cyBvd24gZXhpdCBob2lz
dGluZywgYnkgdXNpbmcKKy8vICAgaW50cmluc2ljcyAob3IgbWV0YS1kYXRhLCBvciBzb21ldGhp
bmcpIHRvIGluZm9ybSB0aGUgYmFja2VuZCB0aGF0IGl0J3Mgc2FmZSB0bworLy8gICBtYWtlIHRo
ZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0SWYoKScgbW9yZSB0cnV0aHkuCisvLworLy8gLSBJ
dCBjb3VsZCBiZSBleHRlbmRlZCB0byBzdXBwb3J0IHdhdGNocG9pbnRzIChzZWUgd2Via2l0Lm9y
Zy9iLzExMzY0NykgYnkgbWFraW5nCisvLyAgIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0
SWYoKScgYmUgYW4gaW50cmluc2ljIHRoYXQgdGhlIGJhY2tlbmQga25vd3MgdG8gYmUKKy8vICAg
dHJ1ZSBhdCBjb21waWxlLXRpbWUuIFRoZSBiYWNrZW5kIGNvdWxkIHRoZW4gdHVybiB0aGUgY29u
ZGl0aW9uYWwgYnJhbmNoIGludG8gYQorLy8gICByZXBsYWNlYWJsZSBqdW1wLCBtdWNoIGxpa2Ug
dGhlIERGRyBkb2VzLgorCitzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNl
IHsKKyAgICBPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCwgVmFsdWVGb3JtYXQgcHJvZmlsZVZh
bHVlRm9ybWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAorICAgICAgICBDb2RlT3Jp
Z2luLCBpbnQgbGFzdFNldE9wZXJhbmQsIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLAorICAg
ICAgICB1bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG1fY29kZTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4
aXQgY2FsbCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCisgICAgLy8gSWYgdGhh
dCdzIHRoZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhh
dmUgYQorICAgIC8vIG1ldGhvZCBvZiBnZXR0aW5nIGEgdmFsdWUgcHJvZmlsZS4gTm90ZSB0aGF0
IGFsbCBvZiB0aGUgRXhpdEFyZ3VtZW50J3MKKyAgICAvLyBhcmUgYWxyZWFkeSBhd2FyZSBvZiB0
aGlzIHBvc3NpYmxlIG9mZi1ieS1vbmUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKyAgICAvLyBj
b3JyZWN0IHRoZW0uCisgICAgVmFsdWVGb3JtYXQgbV9wcm9maWxlVmFsdWVGb3JtYXQ7CisgICAg
TWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3ZhbHVlUHJvZmlsZTsKKyAgICAKKyAgICAv
LyBPZmZzZXQgd2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQu
CisgICAgdW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIAorICAgIGludCBtX2xh
c3RTZXRPcGVyYW5kOworICAgIAorICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7Cisg
ICAgCisgICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9j
ayogZnRsQ29kZUJsb2NrKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQo
CisgICAgICAgIERGRzo6QmFzaWNCbG9jayosIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2ln
bmVkIG5vZGVJbmRleCwKKyAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUmLCBFeGl0QXJndW1l
bnRMaXN0JiBhcmd1bWVudHMpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisj
ZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TE9TUkV4aXRDb21waWxhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mb19oCisjZGVmaW5lIEZUTE9TUkV4aXRDb21waWxhdGlv
bkluZm9faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJ
VCkKKworI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBPU1JF
eGl0Q29tcGlsYXRpb25JbmZvIHsKKyAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKKyAgICAg
ICAgOiBtX3RodW5rQWRkcmVzcygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkxhYmVsIG1fdGh1bmtMYWJlbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxl
SnVtcCBtX3RodW5rSnVtcDsKKyAgICBMVmFsdWUgbV90aHVua0FkZHJlc3M7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JF
eGl0Q29tcGlsZXIuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT1NS
RXhpdENvbXBpbGVyQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgi
CisjaW5jbHVkZSAiRlRMQ0FyZ3VtZW50R2V0dGVyLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExP
U1JFeGl0LmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKK3N0YXRpYyB2b2lkIGNv
bXBpbGVTdHViKAorICAgIHVuc2lnbmVkIGV4aXRJRCwgT1NSRXhpdCYgZXhpdCwgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBDQ2FsbEhlbHBl
cnMgaml0KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgCisgICAgLy8gVGhpcyBpcyBhY3R1
YWxseSBmYWlybHkgZWFzeSwgZXZlbiB0aG91Z2ggaXQgaXMgaG9ycmlibHkgZ3Jvc3MuIFdlIGtu
b3cgdGhhdAorICAgIC8vIExMVk0gd291bGQgaGF2ZSBwYXNzZXMgdXMgYWxsIG9mIHRoZSBzdGF0
ZSB2aWEgYXJndW1lbnRzLiBXZSBrbm93IGhvdyB0byBnZXQKKyAgICAvLyB0aGUgYXJndW1lbnRz
LiBBbmQsIHdlIGtub3cgaG93IHRvIHBvcCBzdGFjayBiYWNrIHRvIHRoZSBKSVQgc3RhY2sgZnJh
bWUsIHNvcnQKKyAgICAvLyBvZjogd2Uga25vdyB0aGF0IGl0J3MgdHdvIGZyYW1lcyBiZW5lYXRo
IHVzLiBUaGlzIGlzIHRlcnJpYmxlIGFuZCBJIGZlZWwKKyAgICAvLyBhc2hhbWVkIG9mIGl0LCBi
dXQgaXQgd2lsbCB3b3JrIGZvciBub3cuCisgICAgCisgICAgQ0FyZ3VtZW50R2V0dGVyIGFyZ3Vt
ZW50cyhqaXQpOworICAgIAorICAgIC8vIEZpcnN0IHJlY292ZXIgb3VyIGNhbGwgZnJhbWUgYW5k
IHRhZyB0aGluZ2llcy4KKyAgICBhcmd1bWVudHMubG9hZE5leHRQdHIoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
VGFnVHlwZU51bWJlciksIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgaml0
Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdNYXNrKSwgR1BSSW5mbzo6dGFn
TWFza1JlZ2lzdGVyKTsKKyAgICAKKyAgICAvLyBEbyBzb21lIHZhbHVlIHByb2ZpbGluZy4KKyAg
ICBpZiAoZXhpdC5tX3Byb2ZpbGVWYWx1ZUZvcm1hdCAhPSBJbnZhbGlkVmFsdWVGb3JtYXQpIHsK
KyAgICAgICAgYXJndW1lbnRzLmxvYWROZXh0QW5kQm94KGV4aXQubV9wcm9maWxlVmFsdWVGb3Jt
YXQsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgICAgICAKKyAgICAgICAgaWYgKGV4aXQubV9r
aW5kID09IEJhZENhY2hlIHx8IGV4aXQubV9raW5kID09IEJhZEluZGV4aW5nVHlwZSkgeworICAg
ICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZTsKKyAgICAgICAgICAgIGlmIChBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZSA9IGpp
dC5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKS0+Z2V0QXJyYXlQcm9maWxlKGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleCkpIHsKKyAgICAgICAgICAgICAgICBqaXQubG9hZFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIwLCBKU0NlbGw6OnN0cnVjdHVy
ZU9mZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEdQUkluZm86Om5vbkFyZ0dQUjEsIGFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNl
ZW5TdHJ1Y3R1cmUoKSk7CisgICAgICAgICAgICAgICAgaml0LmxvYWQ4KE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKEdQUkluZm86Om5vbkFyZ0dQUjEsIFN0cnVjdHVyZTo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAgICAgICAgICAgICBqaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpLCBHUFJJbmZvOjpub25BcmdHUFIyKTsKKyAg
ICAgICAgICAgICAgICBqaXQubHNoaWZ0MzIoR1BSSW5mbzo6bm9uQXJnR1BSMSwgR1BSSW5mbzo6
bm9uQXJnR1BSMik7CisgICAgICAgICAgICAgICAgaml0Lm9yMzIoR1BSSW5mbzo6bm9uQXJnR1BS
MiwgTWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhhcnJheVByb2ZpbGUtPmFkZHJlc3NP
ZkFycmF5TW9kZXMoKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBpZiAoISFleGl0Lm1fdmFsdWVQcm9maWxlKQorICAgICAgICAgICAgaml0LnN0b3JlNjQo
R1BSSW5mbzo6bm9uQXJnR1BSMCwgZXhpdC5tX3ZhbHVlUHJvZmlsZS5nZXRTcGVjRmFpbEJ1Y2tl
dCgwKSk7CisgICAgfQorICAgIAorICAgIC8vIFN0YXJ0IGJ5IGR1bXBpbmcgYWxsIGFyZ3VtZW50
IGV4aXQgdmFsdWVzIHRvIHRoZSBzdGFjay4KKyAgICAKKyAgICBWZWN0b3I8RXhpdEFyZ3VtZW50
Rm9yT3BlcmFuZCwgMTY+IHNvcnRlZEFyZ3VtZW50czsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBl
eGl0Lm1fdmFsdWVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBl
eGl0Lm1fdmFsdWVzW2ldOworICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3Bl
cmFuZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgaWYgKCF2YWx1ZS5pc0FyZ3VtZW50
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHNvcnRlZEFyZ3Vt
ZW50cy5hcHBlbmQoRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCh2YWx1ZS5leGl0QXJndW1lbnQoKSwg
b3BlcmFuZCkpOworICAgIH0KKyAgICBzdGQ6OnNvcnQoc29ydGVkQXJndW1lbnRzLmJlZ2luKCks
IHNvcnRlZEFyZ3VtZW50cy5lbmQoKSwgbGVzc2VyQXJndW1lbnRJbmRleCk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNvcnRlZEFyZ3VtZW50cy5zaXplKCk7ICsraSkgewor
ICAgICAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5kIGFyZ3VtZW50ID0gc29ydGVkQXJndW1lbnRz
W2ldOworICAgICAgICAKKyAgICAgICAgYXJndW1lbnRzLmxvYWROZXh0QW5kQm94KGFyZ3VtZW50
LmV4aXRBcmd1bWVudCgpLmZvcm1hdCgpLCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAgICAg
aml0LnN0b3JlNjQoR1BSSW5mbzo6bm9uQXJnR1BSMCwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNz
Rm9yKGFyZ3VtZW50Lm9wZXJhbmQoKSkpOworICAgIH0KKyAgICAKKyAgICAvLyBCb3ggYW55dGhp
bmcgdGhhdCBpcyBhbHJlYWR5IG9uIHRoZSBzdGFjaywgb3IgdGhhdCBpcyBhIGNvbnN0YW50Lgor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGV4aXQubV92YWx1ZXMuc2l6ZSgpOyBpLS07KSB7
CisgICAgICAgIEV4aXRWYWx1ZSB2YWx1ZSA9IGV4aXQubV92YWx1ZXNbaV07CisgICAgICAgIGlu
dCBvcGVyYW5kID0gZXhpdC5tX3ZhbHVlcy5vcGVyYW5kRm9ySW5kZXgoaSk7CisgICAgICAgIAor
ICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhZGRyZXNzID0gQXNzZW1ibHlIZWxwZXJz
OjphZGRyZXNzRm9yKG9wZXJhbmQpOworICAgICAgICAKKyAgICAgICAgc3dpdGNoICh2YWx1ZS5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVEZWFkOgorICAgICAgICAgICAgaml0LnN0
b3JlNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSkpLCBhZGRyZXNzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4
aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICAgICAgaml0LnN0b3JlNjQoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUodmFsdWUuY29uc3RhbnQoKSkpLCBhZGRyZXNz
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFjazoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50
MzI6CisgICAgICAgICAgICBqaXQubG9hZDMyKAorICAgICAgICAgICAgICAgIGFkZHJlc3Mud2l0
aE9mZnNldChPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBh
eWxvYWQpKSwKKyAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBq
aXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QwKTsK
KyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzRG91YmxlOgor
ICAgICAgICAgICAgaml0LmxvYWREb3VibGUoYWRkcmVzcywgRlBSSW5mbzo6ZnBSZWdUMCk7Cisg
ICAgICAgICAgICBqaXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIEdQUkluZm86OnJlZ1Qw
KTsKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBhZGRyZXNzKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgaGFuZGxlRXhpdENvdW50cyhqaXQsIGV4aXQpOworICAgIHJlaWZ5SW5saW5lZENh
bGxGcmFtZXMoaml0LCBleGl0KTsKKyAgICAKKyAgICAvLyBBZGp1c3QgdGhlIEMgc3RhY2suIFRo
ZSBmcmFtZSBwb2ludGVyIHNob3VsZCBhdCB0aGlzIHBvaW50IHN0aWxsIGhvbGQgdGhlIHBvaW50
ZXIKKyAgICAvLyB0byB0aGUgZnJhbWUgb2YgdGhlIExMVk0tZ2VuZXJhdGVkIGNvZGUuCisgICAg
CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyLCBNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5wb3AoTWFjcm9Bc3Nl
bWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucG9wKEdQUkluZm86Om5vbkFy
Z0dQUjApOyAvLyBpZ25vcmUgdGhlIHJlc3VsdC4KKyAgICAKKyAgICBpZiAoZXhpdC5tX2xhc3RT
ZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpIHsKKyAgICAgICAg
aml0LmxvYWQ2NCgKKyAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihleGl0
Lm1fbGFzdFNldE9wZXJhbmQpLCBHUFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAg
fQorICAgIAorICAgIGFkanVzdEFuZEp1bXBUb1RhcmdldChqaXQsIGV4aXQpOworICAgIAorICAg
IExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERhdGEsICZqaXQsIGNvZGVCbG9jayk7Cisg
ICAgZXhpdC5tX2NvZGUgPSBGSU5BTElaRV9DT0RFX0lGKAorICAgICAgICBzaG91bGRTaG93RGlz
YXNzZW1ibHkoKSwKKyAgICAgICAgcGF0Y2hCdWZmZXIsCisgICAgICAgICgiRlRMIE9TUiBleGl0
ICMldSAoYmMjJXUsICVzKSBmcm9tICVzIiwKKyAgICAgICAgICAgIGV4aXRJRCwgZXhpdC5tX2Nv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwKKyAgICAgICAgICAgIGV4aXRLaW5kVG9TdHJpbmcoZXhp
dC5tX2tpbmQpLCB0b0NTdHJpbmcoKmNvZGVCbG9jaykuZGF0YSgpKSk7Cit9CisKK2V4dGVybiAi
QyIgdm9pZCogY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBleGl0
SUQpCit7CisgICAgU2FtcGxpbmdSZWdpb24gc2FtcGxpbmdSZWdpb24oIkZUTCBPU1IgRXhpdCBD
b21waWxhdGlvbiIpOworICAgIAorICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+Y29k
ZUJsb2NrKCk7CisgICAgCisgICAgQVNTRVJUKGNvZGVCbG9jayk7CisgICAgQVNTRVJUKGNvZGVC
bG9jay0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkZUTEpJVCk7CisgICAgCisgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKKyAgICAKKyAgICBPU1JF
eGl0JiBleGl0ID0gY29kZUJsb2NrLT5nZXRKSVRDb2RlKCktPmZ0bCgpLT5vc3JFeGl0W2V4aXRJ
RF07CisgICAgCisgICAgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9j
b2RlT3JpZ2luKTsKKyAgICAKKyAgICBjb21waWxlU3R1YihleGl0SUQsIGV4aXQsIGdsb2JhbERh
dGEsIGNvZGVCbG9jayk7CisgICAgCisgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNv
ZGVCbG9jayk7CisgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgIGV4aXQuY29kZUxv
Y2F0aW9uRm9yUmVwYXRjaChjb2RlQmxvY2spLCBDb2RlTG9jYXRpb25MYWJlbChleGl0Lm1fY29k
ZS5jb2RlKCkpKTsKKyAgICAKKyAgICByZXR1cm4gZXhpdC5tX2NvZGUuY29kZSgpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9T
UkV4aXRDb21waWxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMT1NSRXhpdENvbXBpbGVyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBGVExPU1JFeGl0Q29tcGlsZXJfaAorI2RlZmluZSBGVExPU1JFeGl0Q29tcGlsZXJfaAorCisj
aW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkRGR09wZXJhdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewor
CisvLyBUYWtlcyB0aGUgY2FsbCBmcmFtZSBhbmQgdGhlIGluZGV4IG9mIHRoZSBleGl0LCBhbmQg
cmV0dXJucyB0aGUgYWRkcmVzcyB0bworLy8ganVtcCB0by4KK2V4dGVybiAiQyIgewordm9pZCog
REZHX09QRVJBVElPTiBjb21waWxlRlRMT1NSRXhpdChFeGVjU3RhdGUqLCB1bnNpZ25lZCBleGl0
SUQpIFdURl9JTlRFUk5BTDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5k
aWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0Q29tcGlsZXJfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHJldmlzaW9uIDE0ODMx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEzNSwxOSArMTM1LDIwIEBAIHB1YmxpYzoKICAgICBMVmFsdWUgemVyb0V4dChMVmFs
dWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxkZXIsIHZhbHVl
LCB0eXBlKTsgfQogICAgIExWYWx1ZSBpbnRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkg
eyByZXR1cm4gYnVpbGRJbnRDYXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAgTFZh
bHVlIGNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gaW50Q2FzdCh2YWx1ZSwgaW50
MzIpOyB9CisgICAgTFZhbHVlIGludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyBy
ZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAogICAg
IExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRMb2FkKG1fYnVpbGRl
ciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBMVmFsdWUgcmVm
ZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5jZSk7
IH0KICAgICAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIgcG9pbnRlciwgTFR5cGUgcmVm
VHlwZSkKICAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBnZXQoYnVpbGRJbnRUb1B0ciht
X2J1aWxkZXIsIHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOworICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gZ2V0KGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwogICAgICAgICBw
b2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwogICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICB2b2lkIHN0b3JlKExWYWx1ZSB2YWx1ZSwg
VHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5cGUpCiAgICAgewotICAgICAgICBMVmFs
dWUgcmVzdWx0ID0gc2V0KHZhbHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRlciwgcG9pbnRlci52
YWx1ZSgpLCByZWZUeXBlKSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBzZXQodmFsdWUsIGlu
dFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhlYXAo
KS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwogICAgIH0KICAgICAKQEAg
LTI0NCwxMCArMjQ1LDE4IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1
ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1f
YnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KICAgICBMVmFsdWUgZXh0cmFjdFZh
bHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBidWlsZEV4dHJhY3RW
YWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9CiAgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNvbnN0
IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVuY3Rp
b24sIHZlY3Rvcik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0dXJu
IGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1
ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1
bmN0aW9uLCBhcmcxKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZhbHVl
IGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlv
biwgYXJnMSwgYXJnMik7IH0KICAgICAKKyAgICBMVmFsdWUgY29udmVydFRvVGFpbENhbGwoTFZh
bHVlIGNhbGwpCisgICAgeworICAgICAgICBzZXRUYWlsQ2FsbChjYWxsLCBJc1RhaWxDYWxsKTsK
KyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQorICAgIAogICAgIHZvaWQganVtcChMQmFzaWNC
bG9jayBkZXN0aW5hdGlvbikgeyBidWlsZEJyKG1fYnVpbGRlciwgZGVzdGluYXRpb24pOyB9CiAg
ICAgdm9pZCBicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIExCYXNp
Y0Jsb2NrIG5vdFRha2VuKSB7IGJ1aWxkQ29uZEJyKG1fYnVpbGRlciwgY29uZGl0aW9uLCB0YWtl
biwgbm90VGFrZW4pOyB9CiAgICAgdm9pZCByZXQoTFZhbHVlIHZhbHVlKSB7IGJ1aWxkUmV0KG1f
YnVpbGRlciwgdmFsdWUpOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5o
CShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJERkdHcmFwaC5o
IgogI2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKICNpbmNsdWRlICJGVExKSVRDb2RlLmgi
CisjaW5jbHVkZSAiRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oIgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CkBAIC00OSw2
ICs1MCw3IEBAIHB1YmxpYzoKICAgICBMTW9kdWxlIG1vZHVsZTsKICAgICBMVmFsdWUgZnVuY3Rp
b247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CisgICAgVmVjdG9yPE9TUkV4aXRDb21w
aWxhdGlvbkluZm8+IG9zckV4aXQ7CiAgICAgCiAgICAgdm9pZCBkdW1wU3RhdGUoY29uc3QgY2hh
ciogd2hlbik7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJG
VExUaHVua3MuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHR1BSSW5m
by5oIgorI2luY2x1ZGUgIkRGR0ZQUkluZm8uaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0Q29tcGls
ZXIuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2Ug
REZHOworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcihKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpCit7CisgICAgTWFjcm9Bc3NlbWJsZXIgaml0
OworICAgIAorICAgIC8vIFByZXRlbmQgdGhhdCB3ZSdyZSBhIEMgY2FsbCBmcmFtZS4KKyAgICBq
aXQucHVzaChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6
OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucHVzaChHUFJJbmZvOjpyZWdUMCk7Cisg
ICAgaml0LnB1c2goR1BSSW5mbzo6cmVnVDApOworICAgIAorICAgIHNpemVfdCBzY3JhdGNoU2l6
ZSA9IHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKiAoR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJl
Z2lzdGVycyArIEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpOworICAgIFNjcmF0
Y2hCdWZmZXIqIHNjcmF0Y2hCdWZmZXIgPSBnbG9iYWxEYXRhLT5zY3JhdGNoQnVmZmVyRm9yU2l6
ZShzY3JhdGNoU2l6ZSk7CisgICAgRW5jb2RlZEpTVmFsdWUqIGJ1ZmZlciA9IHN0YXRpY19jYXN0
PEVuY29kZWRKU1ZhbHVlKj4oc2NyYXRjaEJ1ZmZlci0+ZGF0YUJ1ZmZlcigpKTsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lz
dGVyczsgKytpKQorICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0
ZXIoaSksIGJ1ZmZlciArIGkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZv
OjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgaml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1
bWVudFJlZ2lzdGVycyArIGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAgICAgaml0LnN0
b3JlRG91YmxlKEZQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSwgR1BSSW5mbzo6bm9uQXJn
R1BSMSk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGwgR0MgbWFyayBwaGFzZSBob3cgbXVjaCBv
ZiB0aGUgc2NyYXRjaCBidWZmZXIgaXMgYWN0aXZlIGR1cmluZyBjYWxsLgorICAgIGppdC5tb3Zl
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0
aFB0cigpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHNjcmF0Y2hTaXplKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7
CisKKyAgICAvLyBhcmd1bWVudCAwIGlzIGFscmVhZHkgdGhlIGNhbGwgZnJhbWUuCisgICAgaml0
Lm1vdmUoR1BSSW5mbzo6bm9uQXJnR1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBmdW5jdGlvbkNhbGwgPSBqaXQuY2FsbCgpOworICAgIAorICAg
IC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIG5vdCB1c2luZyB0aGUgcmV0dXJuIHJlZ2lzdGVyIGlm
IGl0J3MgYW4gYXJndW1lbnQgcmVnaXN0ZXIuCisgICAgaml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIsIEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIAorICAgIC8vIFByZXBhcmUgZm9y
IHRhaWwgY2FsbC4KKyAgICBqaXQucG9wKEdQUkluZm86Om5vbkFyZ0dQUjEpOworICAgIGppdC5w
b3AoR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgaml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJh
bWVQb2ludGVyUmVnaXN0ZXIpOworICAgIAorICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHNjcmF0Y2hCdWZmZXItPmFjdGl2ZUxlbmd0aFB0cigpKSwgR1BSSW5mbzo6
bm9uQXJnR1BSMSk7CisgICAgaml0LnN0b3JlUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKDApLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgRlBSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVyczsgKytpKSB7CisgICAg
ICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKGJ1ZmZlciArIEdQUklu
Zm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMgKyBpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7
CisgICAgICAgIGppdC5sb2FkRG91YmxlKEdQUkluZm86Om5vbkFyZ0dQUjEsIEZQUkluZm86OnRv
QXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgfQorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGppdC5s
b2FkNjQoYnVmZmVyICsgaSwgR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKKyAgICAK
KyAgICBqaXQuanVtcChHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBHTE9CQUxfVEhVTktfSUQpOworICAgIHBh
dGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBjb21waWxlRlRMT1NSRXhpdCk7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24g
dGh1bmsiKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVO
QUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5r
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExUaHVua3NfaAorI2RlZmluZSBGVExUaHVu
a3NfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgSlNHbG9iYWxEYXRhOworCituYW1lc3BhY2UgRlRMIHsKKworTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoSlNHbG9iYWxEYXRhKik7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklU
KQorCisjZW5kaWYgLy8gRlRMVEh1bmtzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVmFsdWVGb3JtYXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVmFsdWVGb3JtYXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIKKworI2lmIEVOQUJM
RShGVExfSklUKQorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6RlRM
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVGb3JtYXQgZm9y
bWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBJbnZhbGlkVmFsdWVGb3Jt
YXQ6CisgICAgICAgIG91dC5wcmludCgiSW52YWxpZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBWYWx1ZUZvcm1hdEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0VUludDMyOgorICAgICAgICBvdXQucHJp
bnQoIlVJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdEJvb2xl
YW46CisgICAgICAgIG91dC5wcmludCgiQm9vbGVhbiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBWYWx1ZUZvcm1hdEpTVmFsdWU6CisgICAgICAgIG91dC5wcmludCgiSlNWYWx1ZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUZvcm1hdERvdWJsZToKKyAgICAgICAgb3V0
LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFZhbHVlRm9ybWF0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExWYWx1ZUZvcm1hdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExWYWx1ZUZvcm1hdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExW
YWx1ZUZvcm1hdF9oCisjZGVmaW5lIEZUTFZhbHVlRm9ybWF0X2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCisvLyBOb3RlIHRo
YXQgdGhpcyBpcyBhd2t3YXJkbHkgc2ltaWxhciB0byBEYXRhRm9ybWF0IGluIG90aGVyIHBhcnRz
IG9mIEpTQywgZXhjZXB0IHRoYXQKKy8vIHVubGlrZSBEYXRhRm9ybWF0IGFuZCBsaWtlIFZhbHVl
UmVjb3ZlcnksIGl0IGRpc3Rpbmd1aXNoZXMgYmV0d2VlbiBVSW50MzIgYW5kIEludDMyLgorCitl
bnVtIFZhbHVlRm9ybWF0IHsKKyAgICBJbnZhbGlkVmFsdWVGb3JtYXQsCisgICAgVmFsdWVGb3Jt
YXRJbnQzMiwKKyAgICBWYWx1ZUZvcm1hdFVJbnQzMiwKKyAgICBWYWx1ZUZvcm1hdEJvb2xlYW4s
CisgICAgVmFsdWVGb3JtYXRKU1ZhbHVlLAorICAgIFZhbHVlRm9ybWF0RG91YmxlCit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkZUTDo6VmFsdWVGb3JtYXQpOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRM
VmFsdWVGb3JtYXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVl
U291cmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZh
bHVlU291cmNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMVmFsdWVTb3VyY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZUTFZhbHVlU291cmNlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIFZhbHVlU291cmNlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICBjYXNlIFNvdXJjZU5vdFNldDoKKyAgICAgICAgb3V0LnByaW50KCJTb3VyY2VOb3RTZXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVJbkpTU3RhY2s6CisgICAgICAgIG91dC5w
cmludCgiVmFsdWVJbkpTU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzJJ
bkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiSW50MzJJbkpTU3RhY2siKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRG91YmxlSW5KU1N0YWNrOgorICAgICAgICBvdXQucHJpbnQoIkRv
dWJsZUluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZUluTG9jYWxz
OgorICAgICAgICBvdXQucHJpbnQoIlZhbHVlSW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW50MzJJbkxvY2FsczoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMkluTG9jYWxz
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJvb2xlYW5JbkxvY2FsczoKKyAgICAgICAg
b3V0LnByaW50KCJCb29sZWFuSW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RG91YmxlSW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5Mb2NhbHMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRzU291cmNlOgorICAgICAgICBvdXQucHJp
bnQoIkFyZ3VtZW50c1NvdXJjZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTb3VyY2VJ
c0RlYWQ6CisgICAgICAgIG91dC5wcmludCgiU291cmNlSXNEZWFkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEhhdmVOb2RlOgorICAgICAgICBvdXQucHJpbnQoIk5vZGUoIiwgbm9kZSgp
LCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFZhbHVlU291cmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExWYWx1ZVNvdXJjZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExWYWx1ZVNvdXJjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExWYWx1
ZVNvdXJjZV9oCisjZGVmaW5lIEZUTFZhbHVlU291cmNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdOb2RlLmgiCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2VudW0gVmFsdWVTb3VyY2VL
aW5kIHsKKyAgICBTb3VyY2VOb3RTZXQsCisgICAgVmFsdWVJbkpTU3RhY2ssCisgICAgSW50MzJJ
bkpTU3RhY2ssCisgICAgRG91YmxlSW5KU1N0YWNrLAorICAgIFZhbHVlSW5Mb2NhbHMsCisgICAg
SW50MzJJbkxvY2FscywKKyAgICBCb29sZWFuSW5Mb2NhbHMsCisgICAgRG91YmxlSW5Mb2NhbHMs
CisgICAgQXJndW1lbnRzU291cmNlLAorICAgIFNvdXJjZUlzRGVhZCwKKyAgICBIYXZlTm9kZQor
fTsKKworY2xhc3MgVmFsdWVTb3VyY2UgeworcHVibGljOgorICAgIFZhbHVlU291cmNlKCkKKyAg
ICAgICAgOiBtX3ZhbHVlKFNvdXJjZU5vdFNldCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4
cGxpY2l0IFZhbHVlU291cmNlKFZhbHVlU291cmNlS2luZCBraW5kKQorICAgICAgICA6IG1fdmFs
dWUoa2luZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IFZhbHVlU291cmNlKERG
Rzo6Tm9kZSogbm9kZSkKKyAgICAgICAgOiBtX3ZhbHVlKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KG5vZGUpKQorICAgIHsKKyAgICB9CisgICAgCisgICAgVmFsdWVTb3VyY2VLaW5kIGtpbmQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUgPCBzdGF0aWNfY2FzdDx1aW50cHRyX3Q+
KEhhdmVOb2RlKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxWYWx1ZVNvdXJjZUtp
bmQ+KG1fdmFsdWUpOworICAgICAgICByZXR1cm4gSGF2ZU5vZGU7CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IFNvdXJjZU5vdFNldDsg
fQorICAgIAorICAgIERGRzo6Tm9kZSogbm9kZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IEhhdmVOb2RlKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxERkc6
Ok5vZGUqPihtX3ZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgdWludHB0cl90IG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2Vu
ZGlmIC8vIEZUTFZhbHVlU291cmNlX2gKKwo=
</data>
<flag name="review"
          id="219760"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>197920</attachid>
            <date>2013-04-12 23:33:57 -0700</date>
            <delta_ts>2013-04-13 00:06:50 -0700</delta_ts>
            <desc>it runs all benchmarks</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>202155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MzQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2OSBA
QAorMjAxMy0wNC0xMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IEZUTCBzaG91bGQgaGF2ZSBPU1IgZXhpdAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisKKyAgICAgICAgU29ydCBvZiBy
ZXZpZXdlZCBieSBPbGl2ZXIgYnV0IHRoZW4gSSBkaWQgc29tZSBmaXhlcywgc28gSSBndWVzcyBp
dCdzIHJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBp
bXBsZW1lbnRzIE9TUiBleGl0LCBhbmQgaGlsYXJpb3VzbHksIGl0IGFjdHVhbGx5IHdvcmtzLiBU
aGUgaWRlYSBpcyB0byBoYXZlCisgICAgICAgIExMVk0gY2FsbCBhIG5vLXJldHVybiBmdW5jdGlv
biBvbiB0aGUgb2ZmLXJhbXAsIHBhc3NpbmcgaXQgZXZlcnl0aGluZyB3ZSBrbm93IGFib3V0Cisg
ICAgICAgIGJ5dGVjb2RlIHN0YXRlIHRoYXQgaXNuJ3QgYWxyZWFkeSBmbHVzaGVkIHRvIHRoZSBj
YWxsIGZyYW1lLiBPdXIgb3duIEpJVCB0YWtlcyBjYXJlCisgICAgICAgIG9mIHRoZSByZXN0Lgor
ICAgICAgICAKKyAgICAgICAgV2UgY2FuIG5vdyBydW4gYWxsIG9mIFN1blNwaWRlciwgVjgsIGFu
ZCBLcmFrZW4gd2l0aCB0aGUgRlRMIGVuYWJsZWQuCisgICAgICAgIAorICAgICAgICBUaGUgZGV0
YWlscyBhcmUgZGVzY3JpYmVkIGluIEZUTE9TUkV4aXQuaC4KKworICAgICAgICAqIEphdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEFkZHJlc3MpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzOjp3aXRoT2Zmc2V0KToKKyAgICAgICAg
KiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpvZmZz
ZXRPZik6CisgICAgICAgIChMaW5rQnVmZmVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJYODZDb21tb24uaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5o
OgorICAgICAgICAoSlNDOjpSZXBhdGNoQnVmZmVyOjpSZXBhdGNoQnVmZmVyKToKKyAgICAgICAg
KEpTQzo6UmVwYXRjaEJ1ZmZlcjo6flJlcGF0Y2hCdWZmZXIpOgorICAgICAgICAoUmVwYXRjaEJ1
ZmZlcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6
Q29kZUJsb2NrOjp0YWxseUZyZXF1ZW50RXhpdFNpdGVzKToKKyAgICAgICAgKiBieXRlY29kZS9P
cGVyYW5kcy5oOgorICAgICAgICAoT3BlcmFuZHMpOgorICAgICAgICAoSlNDKToKKyAgICAgICAg
KEpTQzo6OjpkdW1wKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6aW5pdGlhbGl6ZSk6CisgICAgICAgICogZGZn
L0RGR0dQUkluZm8uaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgIChHUFJJbmZvKToKKyAgICAg
ICAgKiBkZmcvREZHTWluaWZpZWROb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6YmVsb25nc0lu
TWluaWZpZWRHcmFwaCk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6bmVlZHNPU1JCYWNrd2FyZFJld2lyaW5nKToKKyAgICAgICAgKERGRyk6CisgICAg
ICAgIChKU0M6OkRGRzo6bmVlZHNPU1JGb3J3YXJkUmV3aXJpbmcpOgorICAgICAgICAqIGRmZy9E
RkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0OjpPU1JFeGl0KToKKyAg
ICAgICAgKERGRyk6CisgICAgICAgIChKU0M6OkRGRzo6T1NSRXhpdDo6Y29udmVydFRvRm9yd2Fy
ZCk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuaDoKKyAgICAgICAgKE9TUkV4aXQpOgorICAg
ICAgICAqIGRmZy9ERkdPU1JFeGl0QmFzZS5jcHA6IEFkZGVkLgorICAgICAgICAoREZHKToKKyAg
ICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhp
dFNpdGVTbG93KToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6ZG9TZWFyY2hGb3JG
b3J3YXJkQ29udmVyc2lvbik6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRCYXNlLmg6IEFkZGVk
LgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0QmFzZTo6T1NSRXhp
dEJhc2UpOgorICAgICAgICAoT1NSRXhpdEJhc2UpOgorICAgICAgICAoSlNDOjpERkc6Ok9TUkV4
aXRCYXNlOjpjb25zaWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZSk6CisgICAgICAgICogZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHA6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRDb21waWxl
cjY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpPU1JFeGl0Q29tcGlsZXI6OmNvbXBpbGVFeGl0
KToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpoYW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlu
bGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjphZGp1c3RBbmRKdW1wVG9UYXJn
ZXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHA6IEFkZGVkLgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ29kZU9yaWdpbkZvck9T
UkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaDogQWRkZWQuCisg
ICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0
aXZlSklUOjpjaGVja0FyZ3VtZW50VHlwZXMpOgorICAgICAgICAqIGRmZy9ERkdWYWx1ZVNvdXJj
ZS5oOgorICAgICAgICAoSlNDOjpERkc6OlZhbHVlU291cmNlOjpmb3JTcGVjdWxhdGlvbik6Cisg
ICAgICAgICogZGZnL0RGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlZhcmlhYmxlRXZlbnRTdHJlYW06OnJlY29uc3RydWN0KToKKyAgICAgICAgKiBmdGwvRlRM
QWJicmV2aWF0aW9ucy5oOgorICAgICAgICAoSlNDOjpGVEw6OmZ1bmN0aW9uVHlwZSk6CisgICAg
ICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OnR5cGVPZik6CisgICAgICAgIChKU0M6OkZU
TDo6YXBwZW5kQmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6aW5zZXJ0QmFzaWNCbG9j
ayk6CisgICAgICAgIChKU0M6OkZUTDo6YnVpbGRDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpz
ZXRUYWlsQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTENBcmd1bWVudEdldHRlci5jcHA6IEFkZGVk
LgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6Omxv
YWROZXh0QW5kQm94KToKKyAgICAgICAgKiBmdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmg6IEFkZGVk
LgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRMOjppc0FyZ3VtZW50UmVnaXN0ZXIp
OgorICAgICAgICAoQ0FyZ3VtZW50R2V0dGVyKToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1l
bnRHZXR0ZXI6OkNBcmd1bWVudEdldHRlcik6CisgICAgICAgIChKU0M6OkZUTDo6Q0FyZ3VtZW50
R2V0dGVyOjpsb2FkTmV4dDgpOgorICAgICAgICAoSlNDOjpGVEw6OkNBcmd1bWVudEdldHRlcjo6
bG9hZE5leHQzMik6CisgICAgICAgIChKU0M6OkZUTDo6Q0FyZ3VtZW50R2V0dGVyOjpsb2FkTmV4
dDY0KToKKyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0UHRyKToK
KyAgICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6OmxvYWROZXh0RG91YmxlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpDQXJndW1lbnRHZXR0ZXI6Om5leHRBZGRyZXNzKToKKyAgICAgICAg
KiBmdGwvRlRMQ29tcGlsZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZSk6CisgICAg
ICAgICogZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmR1bXApOgorICAgICAgICAqIGZ0bC9GVExF
eGl0QXJndW1lbnQuaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoRXhpdEFyZ3Vt
ZW50UmVwcmVzZW50YXRpb24pOgorICAgICAgICAoRXhpdEFyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0QXJndW1lbnQ6OkV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdEFyZ3VtZW50OjpvcGVyYXRvciEpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVu
dDo6Zm9ybWF0KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OmFyZ3VtZW50KToK
KyAgICAgICAgKEpTQzo6RlRMOjpFeGl0QXJndW1lbnQ6OndpdGhGb3JtYXQpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRBcmd1bWVudDo6cmVwcmVzZW50YXRpb24pOgorICAgICAgICAqIGZ0bC9G
VExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAg
ICAgICAoSlNDOjpGVEw6OkV4aXRBcmd1bWVudEZvck9wZXJhbmQ6OmR1bXApOgorICAgICAgICAq
IGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToK
KyAgICAgICAgKEV4aXRBcmd1bWVudEZvck9wZXJhbmQpOgorICAgICAgICAoSlNDOjpGVEw6OkV4
aXRBcmd1bWVudEZvck9wZXJhbmQ6OkV4aXRBcmd1bWVudEZvck9wZXJhbmQpOgorICAgICAgICAo
SlNDOjpGVEw6OkV4aXRBcmd1bWVudEZvck9wZXJhbmQ6Om9wZXJhdG9yISk6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZDo6ZXhpdEFyZ3VtZW50KToKKyAgICAgICAg
KEpTQzo6RlRMOjpFeGl0QXJndW1lbnRGb3JPcGVyYW5kOjpvcGVyYW5kKToKKyAgICAgICAgKEpT
Qzo6RlRMOjpsZXNzZXJBcmd1bWVudEluZGV4KToKKyAgICAgICAgKiBmdGwvRlRMRXhpdEFyZ3Vt
ZW50TGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgICogZnRsL0ZUTEV4aXRU
aHVua0dlbmVyYXRvci5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6
RlRMOjpFeGl0VGh1bmtHZW5lcmF0b3I6OkV4aXRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChK
U0M6OkZUTDo6RXhpdFRodW5rR2VuZXJhdG9yOjp+RXhpdFRodW5rR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpFeGl0VGh1bmtHZW5lcmF0b3I6OmVtaXRUaHVuayk6CisgICAgICAgICog
ZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAg
ICAgIChFeGl0VGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRUaHVua0dl
bmVyYXRvcjo6ZGlkVGhpbmdzKToKKyAgICAgICAgKiBmdGwvRlRMRXhpdFZhbHVlLmNwcDogQWRk
ZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6ZHVtcCk6
CisgICAgICAgICogZnRsL0ZUTEV4aXRWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6Cisg
ICAgICAgIChFeGl0VmFsdWUpOgorICAgICAgICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6RXhpdFZh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6Om9wZXJhdG9yISk6CisgICAgICAg
IChKU0M6OkZUTDo6RXhpdFZhbHVlOjpkZWFkKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFs
dWU6OmluSlNTdGFjayk6CisgICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppbkpTU3RhY2tB
c0ludDMyKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmluSlNTdGFja0FzRG91Ymxl
KToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmNvbnN0YW50KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpFeGl0VmFsdWU6OmV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6RXhp
dFZhbHVlOjpraW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpFeGl0VmFsdWU6OmlzRGVhZCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6RXhpdFZhbHVlOjppc0luSlNTdGFja1NvbWVob3cpOgorICAgICAg
ICAoSlNDOjpGVEw6OkV4aXRWYWx1ZTo6aXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkZUTDo6
RXhpdFZhbHVlOjppc0FyZ3VtZW50KToKKyAgICAgICAgKiBmdGwvRlRMRm9ybWF0dGVkVmFsdWUu
aDoKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6bm9WYWx1ZSk6CisgICAgICAg
IChKU0M6OkZUTDo6aW50MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6dUludDMyVmFsdWUp
OgorICAgICAgICAoSlNDOjpGVEw6OmJvb2xlYW5WYWx1ZSk6CisgICAgICAgIChKU0M6OkZUTDo6
anNWYWx1ZVZhbHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpkb3VibGVWYWx1ZSk6CisgICAgICAg
ICogZnRsL0ZUTEpJVENvZGUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpJVENvZGU6OmluaXRp
YWxpemVFeGl0VGh1bmtzKToKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6SklU
Q29kZTo6ZXhpdFRodW5rcyk6CisgICAgICAgICogZnRsL0ZUTEpJVENvZGUuaDoKKyAgICAgICAg
KEpJVENvZGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAg
IChGVEwpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpMb3dlckRGR1RvTExW
TSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6dHJhbnNmZXJBbmRDaGVja0FyZ3VtZW50cyk6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldExvY2FsKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVNldExvY2FsKToKKyAgICAgICAgKExvd2VyREZHVG9M
TFZNKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1vdkhpbnQp
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlWm9tYmllSGludCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNb3ZIaW50QW5kQ2hl
Y2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQWRkKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoU3ViKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTXVsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoTmVnYXRlKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZVVJbnQzMlRvTnVtYmVyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrU3RydWN0dXJlKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUdldEJ5VmFsKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlQmFja3dhcmQpOgorICAgICAg
ICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVGb3J3YXJkKToKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6c3BlY3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6dGVybWluYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRG
R1RvTExWTTo6YmFja3dhcmRUeXBlQ2hlY2spOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpmb3J3YXJkVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6dHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6YXBw
ZW5kVHlwZUNoZWNrKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93SW50
MzIpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dDZWxsKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6bG93Qm9vbGVhbik6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZU9iamVjdCk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmlzTGl2ZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06OnVzZSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmluaXRpYWxp
emVPU1JFeGl0U3RhdGVGb3JCbG9jayk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xM
Vk06OmFwcGVuZE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjph
ZGRFeGl0QXJndW1lbnRGb3JOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExW
TTo6dHJ5VG9TZXRDb25zdGFudEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmFkZEV4aXRBcmd1bWVudCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJE
RkdUb0xMVk06OmxpbmtPU1JFeGl0c0FuZENvbXBsZXRlSW5pdGlhbGl6YXRpb25CbG9ja3MpOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpvYnNlcnZlTW92SGludCk6CisgICAg
ICAgICogZnRsL0ZUTE9TUkV4aXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAg
IChKU0M6OkZUTDo6T1NSRXhpdDo6T1NSRXhpdCk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhp
dDo6Y29kZUxvY2F0aW9uRm9yUmVwYXRjaCk6CisgICAgICAgIChKU0M6OkZUTDo6T1NSRXhpdDo6
Y29udmVydFRvRm9yd2FyZCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4aXQuaDogQWRkZWQuCisg
ICAgICAgIChGVEwpOgorICAgICAgICAoT1NSRXhpdCk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4
aXRDb21waWxhdGlvbkluZm8uaDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAgICAgICAoSlND
OjpGVEw6Ok9TUkV4aXRDb21waWxhdGlvbkluZm86Ok9TUkV4aXRDb21waWxhdGlvbkluZm8pOgor
ICAgICAgICAoT1NSRXhpdENvbXBpbGF0aW9uSW5mbyk6CisgICAgICAgICogZnRsL0ZUTE9TUkV4
aXRDb21waWxlci5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKEpTQzo6RlRM
Ojpjb21waWxlU3R1Yik6CisgICAgICAgIChKU0M6OkZUTDo6Y29tcGlsZUZUTE9TUkV4aXQpOgor
ICAgICAgICAqIGZ0bC9GVExPU1JFeGl0Q29tcGlsZXIuaDogQWRkZWQuCisgICAgICAgIChGVEwp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
Om5ld0Jsb2NrKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmludFRvUHRyKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvYWQpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
c3RvcmUpOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNh
bGwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6Y29udmVydFRvVGFpbENhbGwpOgorICAg
ICAgICAoRlRMKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKFN0YXRlKToK
KyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDogQWRkZWQuCisgICAgICAgIChGVEwpOgorICAg
ICAgICAoSlNDOjpGVEw6Om9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAg
ICAqIGZ0bC9GVExUaHVua3MuaDogQWRkZWQuCisgICAgICAgIChKU0MpOgorICAgICAgICAoRlRM
KToKKyAgICAgICAgKiBmdGwvRlRMVmFsdWVGb3JtYXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdU
Rik6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGZ0bC9GVExWYWx1
ZUZvcm1hdC5oOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChXVEYpOgorICAgICAg
ICAqIGZ0bC9GVExWYWx1ZVNvdXJjZS5jcHA6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6ZHVtcCk6CisgICAgICAgICogZnRsL0ZUTFZhbHVl
U291cmNlLmg6IEFkZGVkLgorICAgICAgICAoRlRMKToKKyAgICAgICAgKFZhbHVlU291cmNlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6VmFsdWVTb3VyY2UpOgorICAgICAgICAo
SlNDOjpGVEw6OlZhbHVlU291cmNlOjpraW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNv
dXJjZTo6b3BlcmF0b3IhKToKKyAgICAgICAgKEpTQzo6RlRMOjpWYWx1ZVNvdXJjZTo6bm9kZSk6
CisKIDIwMTMtMDQtMTIgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBmb3VydGhUaWVyOiBzd2l0Y2ggdG8gdXNpbmcgTUNKSVQgYW5kIGRpc2FibGUgZnJhbWUgcG9p
bnRlciBlbGltaW5hdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE0ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSwzMiBAQAog
CQkwRjIxQzI3QzE0QkU3Mjc2MDBBREM2NEIgLyogRXhlY3V0aW9uSGFybmVzcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyN0ExNEJFNzI3MzAw
QURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjIxQzI3RDE0QkU3MjdBMDBBREM2NEIgLyogQ29kZVNw
ZWNpYWxpemF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEYyMUMyNzkxNEJFNzI3MzAwQURDNjRCIC8qIENvZGVTcGVjaWFsaXphdGlvbktp
bmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjIxQzI3RjE0QkVBQTgyMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMUMyN0UxNEJFQUE4MDAw
QURDNjRCIC8qIEJ5dGVjb2RlQ29udmVudGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJEMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
Q0FyZ3VtZW50R2V0dGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMjM1QkJCMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIu
Y3BwICovOyB9OworCQkwRjIzNUJEMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0
dGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIz
NUJCQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0dGVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCRDMxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJCRDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFy
Z3VtZW50LmNwcCAqLzsgfTsKKwkJMEYyMzVCRDQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRB
cmd1bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjM1QkQ1MTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmNwcCAqLzsgfTsKKwkJMEYyMzVCRDYxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkMwMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCRDcxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRBcmd1bWVudExpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMjM1QkMxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRMaXN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVC
RDgxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDMjE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCAqLzsgfTsKKwkJMEYyMzVCRDkxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQzMxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CisJCTBGMjM1QkRBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
MzVCQzQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRWYWx1ZS5jcHAgKi87IH07CisJCTBGMjM1
QkRCMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkM1MTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExFeGl0VmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDNjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgKi87IH07CisJCTBGMjM1QkREMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExPU1JFeGl0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjIzNUJDNzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjM1QkRFMTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDODE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMjM1QkRGMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExPU1JFeGl0Q29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyMzVCQzkxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxl
ci5jcHAgKi87IH07CisJCTBGMjM1QkUwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29t
cGlsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjM1QkNBMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjIzNUJFMTE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMjM1QkNCMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3Bw
ICovOyB9OworCQkwRjIzNUJFMjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIzNUJDQzE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEYyMzVCRTMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9y
bWF0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MjM1QkNEMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5jcHAgKi87IH07CisJCTBG
MjM1QkU0MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCQ0UxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTFZhbHVlRm9ybWF0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMEYyMzVCRTUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFZhbHVlU291cmNl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1
QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5jcHAgKi87IH07CisJCTBGMjM1
QkU2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRDAxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTFZhbHVlU291cmNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKKwkJMEYyMzVCRUIxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMjM1QkU3
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgKi87IH07CisJCTBGMjM1QkVD
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRTgxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRCYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJMEYyMzVCRUQxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjIz
NUJFOTE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCAqLzsgfTsK
KwkJMEYyMzVCRUUxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyMzVCRUExNzE3
OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMjQyREE3MTNGM0IxRTgwMDdBREQ0
QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjI0MkRBNTEzRjNCMUJCMDA3QURENEMgLyogV2Vha1JlZmVy
ZW5jZUhhcnZlc3Rlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGMjU2QzM2MTYyN0IwQUQwMDdGMjc4MyAvKiBERkdDYWxsQXJyYXlBbGxvY2F0
b3JTbG93UGF0aEdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgzIC8qIERGR0NhbGxBcnJheUFsbG9j
YXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovOyB9OwpAQCAtMTAy
Miw2ICsxMDQ4LDMyIEBACiAJCTBGMjFDMjc5MTRCRTcyNzMwMEFEQzY0QiAvKiBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvZGVTcGVj
aWFsaXphdGlvbktpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyMUMyN0Ex
NEJFNzI3MzAwQURDNjRCIC8qIEV4ZWN1dGlvbkhhcm5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gRXhlY3V0aW9uSGFybmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjIxQzI3RTE0QkVBQTgwMDBBREM2NEIgLyogQnl0ZWNvZGVDb252ZW50aW9ucy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCeXRlY29kZUNvbnZlbnRpb25zLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkJCMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExDQXJndW1lbnRHZXR0ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcDsgcGF0aCA9IGZ0bC9GVExDQXJndW1lbnRHZXR0
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJCQzE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMQ0FyZ3VtZW50R2V0dGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTENBcmd1bWVudEdldHRlci5oOyBwYXRoID0gZnRsL0ZUTENBcmd1bWVudEdldHRl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJCRDE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMRXhpdEFyZ3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTEV4aXRBcmd1bWVudC5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdEFyZ3VtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdG
IC8qIEZUTEV4aXRBcmd1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExFeGl0QXJndW1lbnQuaDsgcGF0aCA9IGZ0bC9GVExFeGl0QXJndW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQkYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRB
cmd1bWVudEZvck9wZXJhbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdEFyZ3Vt
ZW50Rm9yT3BlcmFuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkMw
MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQuaDsgcGF0
aCA9IGZ0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjM1QkMxMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1lbnRMaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRBcmd1bWVudExpc3Qu
aDsgcGF0aCA9IGZ0bC9GVExFeGl0QXJndW1lbnRMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGMjM1QkMyMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VGh1bmtHZW5lcmF0
b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMRXhpdFRodW5r
R2VuZXJhdG9yLmNwcDsgcGF0aCA9IGZ0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDMzE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
RXhpdFRodW5rR2VuZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TEV4aXRUaHVua0dlbmVyYXRvci5oOyBwYXRoID0gZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDNDE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMRXhpdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEZUTEV4aXRWYWx1ZS5jcHA7IHBhdGggPSBmdGwvRlRMRXhpdFZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQzUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExFeGl0VmFsdWUuaDsg
cGF0aCA9IGZ0bC9GVExFeGl0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyMzVCQzYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMT1NSRXhpdC5jcHA7IHBhdGggPSBmdGwvRlRMT1NS
RXhpdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkM3MTcxNzhFMUMw
MDY5MEM3RiAvKiBGVExPU1JFeGl0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEZUTE9TUkV4aXQuaDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMjM1QkM4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE9TUkV4aXRD
b21waWxhdGlvbkluZm8uaDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkM5MTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExPU1JFeGl0Q29tcGlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gRlRMT1NSRXhpdENvbXBpbGVyLmNwcDsgcGF0aCA9IGZ0bC9GVExPU1JFeGl0Q29tcGls
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDQTE3MTc4RTFDMDA2
OTBDN0YgLyogRlRMT1NSRXhpdENvbXBpbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTE9TUkV4aXRDb21waWxlci5oOyBwYXRoID0gZnRsL0ZUTE9TUkV4aXRDb21waWxl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjIzNUJDQjE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMVGh1bmtzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEZUTFRodW5rcy5jcHA7IHBhdGggPSBmdGwvRlRMVGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQ0MxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExUaHVua3MuaDsgcGF0aCA9IGZ0bC9G
VExUaHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCQ0QxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEZUTFZhbHVlRm9ybWF0LmNwcDsgcGF0aCA9IGZ0bC9GVExWYWx1ZUZvcm1h
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkNFMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExWYWx1ZUZvcm1hdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBGVExWYWx1ZUZvcm1hdC5oOyBwYXRoID0gZnRsL0ZUTFZhbHVlRm9ybWF0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMjM1QkNGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZVNvdXJjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExWYWx1
ZVNvdXJjZS5jcHA7IHBhdGggPSBmdGwvRlRMVmFsdWVTb3VyY2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRjIzNUJEMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3Vy
Y2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVmFsdWVTb3VyY2UuaDsg
cGF0aCA9IGZ0bC9GVExWYWx1ZVNvdXJjZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRjIzNUJFNzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHT1NSRXhpdEJhc2UuY3BwOyBwYXRoID0g
ZGZnL0RGR09TUkV4aXRCYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
MzVCRTgxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRCYXNlLmg7IHBhdGggPSBkZmcvREZHT1NSRXhp
dEJhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyMzVCRTkxNzE3OEU3MzAw
NjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwOyBwYXRoID0gZGZnL0RG
R09TUkV4aXRQcmVwYXJhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
MjM1QkVBMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHBhdGgg
PSBkZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGMjQyREE1MTNGM0IxQkIwMDdBREQ0QyAvKiBXZWFrUmVmZXJlbmNlSGFydmVzdGVyLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyNTZDMzQxNjI3QjBBQTAwN0YyNzgz
IC8qIERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJh
dG9yLmg7IHBhdGggPSBkZmcvREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEw
IC8qIERGR0ZpeHVwUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gREZHRml4dXBQaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMDI1LDE3ICsyMDc3LDI4IEBACiAJCTBGRUEwOUZD
MTcwNTEzN0YwMEJCNzIyQyAvKiBmdGwgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNo
aWxkcmVuID0gKAorCQkJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAvKiBGVExBYmJyZXZpYXRp
b25zLmggKi8sCiAJCQkJMEZFQTBBMTcxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVh
cC5jcHAgKi8sCiAJCQkJMEZFQTBBMTgxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTEFic3RyYWN0SGVh
cC5oICovLAogCQkJCTBGRUEwQTE5MTcwOEIwMDcwMEJCNzIyQyAvKiBGVExBYnN0cmFjdEhlYXBS
ZXBvc2l0b3J5LmNwcCAqLywKIAkJCQkwRkVBMEExQTE3MDhCMDA3MDBCQjcyMkMgLyogRlRMQWJz
dHJhY3RIZWFwUmVwb3NpdG9yeS5oICovLAotCQkJCTBGRUEwOUZEMTcwNTEzREIwMEJCNzIyQyAv
KiBGVExBYmJyZXZpYXRpb25zLmggKi8sCiAJCQkJMEZFQTA5RkUxNzA1MTNEQjAwQkI3MjJDIC8q
IEZUTENhcGFiaWxpdGllcy5jcHAgKi8sCiAJCQkJMEZFQTA5RkYxNzA1MTNEQjAwQkI3MjJDIC8q
IEZUTENhcGFiaWxpdGllcy5oICovLAorCQkJCTBGMjM1QkJCMTcxNzhFMUMwMDY5MEM3RiAvKiBG
VExDQXJndW1lbnRHZXR0ZXIuY3BwICovLAorCQkJCTBGMjM1QkJDMTcxNzhFMUMwMDY5MEM3RiAv
KiBGVExDQXJndW1lbnRHZXR0ZXIuaCAqLywKIAkJCQkwRkVBMEEyNTE3MDk2MjNCMDBCQjcyMkMg
LyogRlRMQ29tbW9uVmFsdWVzLmNwcCAqLywKIAkJCQkwRkVBMEEyMTE3MDk2MDY5MDBCQjcyMkMg
LyogRlRMQ29tbW9uVmFsdWVzLmggKi8sCiAJCQkJMEZFQTBBMDAxNzA1MTNEQjAwQkI3MjJDIC8q
IEZUTENvbXBpbGUuY3BwICovLAogCQkJCTBGRUEwQTAxMTcwNTEzREIwMEJCNzIyQyAvKiBGVExD
b21waWxlLmggKi8sCisJCQkJMEYyMzVCQkQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1
bWVudC5jcHAgKi8sCisJCQkJMEYyMzVCQkUxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1
bWVudC5oICovLAorCQkJCTBGMjM1QkJGMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0QXJndW1l
bnRGb3JPcGVyYW5kLmNwcCAqLywKKwkJCQkwRjIzNUJDMDE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
RXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oICovLAorCQkJCTBGMjM1QkMxMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExFeGl0QXJndW1lbnRMaXN0LmggKi8sCisJCQkJMEYyMzVCQzIxNzE3OEUxQzAwNjkw
QzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAgKi8sCisJCQkJMEYyMzVCQzMxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTEV4aXRUaHVua0dlbmVyYXRvci5oICovLAorCQkJCTBGMjM1QkM0MTcx
NzhFMUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuY3BwICovLAorCQkJCTBGMjM1QkM1MTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExFeGl0VmFsdWUuaCAqLywKIAkJCQkwRkVBMEEyQjE3MEI2NjE5MDBC
QjcyMkMgLyogRlRMRm9ybWF0dGVkVmFsdWUuaCAqLywKIAkJCQkwRkVBMEEyNjE3MDk2MjNCMDBC
QjcyMkMgLyogRlRMSW50cmluc2ljUmVwb3NpdG9yeS5jcHAgKi8sCiAJCQkJMEZFQTBBMjIxNzA5
NjA2OTAwQkI3MjJDIC8qIEZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCAqLywKQEAgLTIwNDQsMTEg
KzIxMDcsMjIgQEAKIAkJCQkwRkVBMEExMzE3MDYzNjM2MDBCQjcyMkMgLyogRlRMTExWTUhlYWRl
cnMuaCAqLywKIAkJCQkwRkVBMEEwNDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xM
Vk0uY3BwICovLAogCQkJCTBGRUEwQTA1MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1Rv
TExWTS5oICovLAorCQkJCTBGMjM1QkM2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNw
cCAqLywKKwkJCQkwRjIzNUJDNzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oICovLAor
CQkJCTBGMjM1QkM4MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGlsYXRpb25JbmZv
LmggKi8sCisJCQkJMEYyMzVCQzkxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxl
ci5jcHAgKi8sCisJCQkJMEYyMzVCQ0ExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21w
aWxlci5oICovLAogCQkJCTBGRUEwQTI5MTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3Bw
ICovLAogCQkJCTBGRUEwQTA2MTcwNTEzREIwMEJCNzIyQyAvKiBGVExPdXRwdXQuaCAqLywKIAkJ
CQkwRkVBMEExNTE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwICovLAogCQkJCTBGRUEw
QTA3MTcwNTEzREIwMEJCNzIyQyAvKiBGVExTdGF0ZS5oICovLAorCQkJCTBGMjM1QkNCMTcxNzhF
MUMwMDY5MEM3RiAvKiBGVExUaHVua3MuY3BwICovLAorCQkJCTBGMjM1QkNDMTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExUaHVua3MuaCAqLywKIAkJCQkwRkVBMEExQjE3MDhCMDA3MDBCQjcyMkMgLyog
RlRMVHlwZWRQb2ludGVyLmggKi8sCisJCQkJMEYyMzVCQ0QxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TFZhbHVlRm9ybWF0LmNwcCAqLywKKwkJCQkwRjIzNUJDRTE3MTc4RTFDMDA2OTBDN0YgLyogRlRM
VmFsdWVGb3JtYXQuaCAqLywKKwkJCQkwRjIzNUJDRjE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFs
dWVTb3VyY2UuY3BwICovLAorCQkJCTBGMjM1QkQwMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1
ZVNvdXJjZS5oICovLAogCQkJKTsKIAkJCW5hbWUgPSBmdGw7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMjc5OCw2ICsyODcyLDggQEAKIAkJCQkwRkQ4MkU1MzE0MURBRURFMDAxNzlD
OTQgLyogREZHT1NSRW50cnkuaCAqLywKIAkJCQkwRkMwOTc4RTE0NkE2RjYzMDBDRjI0NDIgLyog
REZHT1NSRXhpdC5jcHAgKi8sCiAJCQkJMEZDMDk3NjgxNDY4QTZFRjAwQ0YyNDQyIC8qIERGR09T
UkV4aXQuaCAqLywKKwkJCQkwRjIzNUJFNzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJh
c2UuY3BwICovLAorCQkJCTBGMjM1QkU4MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFz
ZS5oICovLAogCQkJCTY1OTg3RjJDMTY3RkU4NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggKi8sCiAJCQkJMEZDMDk3OEYxNDZBNkY2MzAwQ0YyNDQyIC8qIERGR09TUkV4
aXRDb21waWxlci5jcHAgKi8sCiAJCQkJMEZDMDk3NkYxNDY5M0FFRjAwQ0YyNDQyIC8qIERGR09T
UkV4aXRDb21waWxlci5oICovLApAQCAtMjgwNyw2ICsyODgzLDggQEAKIAkJCQkwRjcwMjVBODE3
MTRCMEY4MDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggKi8sCiAJCQkJMEZF
RkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICov
LAogCQkJCTBGRUZDOUE4MTY4MUEzQjAwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9s
ZGVyLmggKi8sCisJCQkJMEYyMzVCRTkxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVw
YXJhdGlvbi5jcHAgKi8sCisJCQkJMEYyMzVCRUExNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4
aXRQcmVwYXJhdGlvbi5oICovLAogCQkJCTBGRkZDOTRGMTRFRjkwOTUwMEM3MjUzMiAvKiBERkdQ
aGFzZS5jcHAgKi8sCiAJCQkJMEZGRkM5NTAxNEVGOTA5NTAwQzcyNTMyIC8qIERGR1BoYXNlLmgg
Ki8sCiAJCQkJMEZCRTBGNkQxNkMxREIwMTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rp
b25QaGFzZS5jcHAgKi8sCkBAIC0zMTgzLDYgKzMyNjEsNyBAQAogCQkJCTBGNjIwMTc0MTQzRkNE
MzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFi
bGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCRDIxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTENBcmd1bWVudEdldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIxNTIyODA5
RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRUEwQTI0MTcwOTYwNjkwMEJCNzIyQyAvKiBGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVBMEEzMjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHQ29tbW9uRGF0
YS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjA3LDYgKzMyODYsNyBAQAogCQkJCUJDQkUyQ0FFMTRF
OTg1QUEwMDA1OTNBRCAvKiBHQ0Fzc2VydGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDMwMTVBOERDRTIwMDhGMzYzRSAvKiBHQ0F3YXJlSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUMyMjM5RDFCMTYyNjJCREQwMDVBQzVGRCAvKiBHQ1RocmVhZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEYyMzVCRTIxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTFRodW5rcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzIxMTIyRTIxNUREOUFCMzAwNzkwRTNBIC8qIEdDVGhyZWFkU2hhcmVk
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTAxNENBN0RDRDAwODVGM0M2IC8qIEdl
dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTM0MTM0RkYwQTYwMEFGQURC
NSAvKiBIYW5kbGUuaCBpbiBIZWFkZXJzICovLApAQCAtMzIzNyw2ICszMzE3LDcgQEAKIAkJCQlC
QzE4QzQxNDBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdENvcmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDE1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZVByZWZpeC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ5MzAwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCRDQxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1
bWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJ
VENvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBK
SVRDb21waWxhdGlvbkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkx
RjAwMEM4NDU1IC8qIEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMjUxLDYg
KzMzMzIsNyBAQAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Fj
dGl2YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg0MDQ4MDEzMTAyMUExRDkwMDhFN0YwMSAv
KiBKU0FQSVZhbHVlV3JhcHBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyMzVCRTQxNzE3OEUx
QzAwNjkwQzdGIC8qIEZUTFZhbHVlRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQx
NzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3
RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAt
MzMwOCw5ICszMzkwLDExIEBACiAJCQkJQzJDRjM5QzIxNkUxNUE4MTAwREQ2OUJFIC8qIEpTQVBJ
V3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0Iw
NzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEYyMzVCRDYxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE5MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBw
ZXJNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJFMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1dyYXBwZXJPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDM1MTVBRTI1M0IwMDhG
MzYzRSAvKiBKdW1wUmVwbGFjZW1lbnRXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDRkQ4QzkzMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MkZGRDY0MTM5OTg1QTgwMEU1MzY1QSAvKiBLZXl3b3JkTG9va3VwLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NjlBMDcyQTBFRDFDRTY5MDBGMUY2ODEgLyogTGFiZWwuaCBpbiBI
ZWFkZXJzICovLApAQCAtMzM0MSw2ICszNDI1LDcgQEAKIAkJCQk4NkMzNkVFQTBFRTEyODlEMDBC
M0RGNTkgLyogTWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RDNCMkM2MTAx
NTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBREQxNDYwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGMjM1QkRFMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0Q29tcGls
YXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM0QjE0QzE2RDQzRTBEMDAxQ0RBNUEg
LyogUG9seW1vcnBoaWNBY2Nlc3NTdHJ1Y3R1cmVMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJN
SVBTLmggaW4gSGVhZGVycyAqLywKQEAgLTMzODEsOCArMzQ2NiwxMCBAQAogCQkJCUJDMThDNDQ1
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPYmplY3RDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NDYwRTE2RjVDRDAwQjM0NDYwIC8qIE9iamVjdFByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJEOTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMRXhpdFRo
dW5rR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2
ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5
MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMjM1QkQ3MTcxNzhFMUMwMDY5
MEM3RiAvKiBGVExFeGl0QXJndW1lbnRMaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0
ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MjI4RUQxNDM2QUIyNzAwMTk2QzQ4IC8qIE9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDRCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzQw
OCw2ICszNDk1LDcgQEAKIAkJCQkwRkY3MjlDMDE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJP
cmlnaW5TdGFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1OEMxNjc1NDgzMzAwRjhBQjZF
IC8qIFByb2ZpbGVyT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTA1OEUxNjc1NDgz
QTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MjM1QkU2MTcxNzhFMUMwMDY5MEM3RiAvKiBGVExWYWx1ZVNvdXJjZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMzkxMkMxNjc3MUMzRDAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RkI2MTAwMTA0MEMzOEIwMDE3QTI4NiAvKiBQcm9w
ZXJ0eURlc2NyaXB0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDOTU0MzdEMEVCQTcwRkQwMDcy
QjZEMyAvKiBQcm9wZXJ0eU1hcEhhc2hUYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC0zNDIwLDYg
KzM1MDgsNyBAQAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlk
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyog
UHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJEQjE3MTc4RTFD
MDA2OTBDN0YgLyogRlRMRXhpdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0
RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMw
RTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNjBBQzIxNjc0MEY4MzAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtMzQ0NSw2ICszNTM0LDcgQEAKIAkJCQlDMjE2MEZFNzE1RjdFOTVFMDA5NDJERkMg
LyogU2xvdFZpc2l0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3
NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYy
MzVCRTAxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlk
ZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTM1MTksMTEgKzM2
MDksMTMgQEAKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMkM5MjQxNkQwMUVFOTAwQzc4MDNGIC8qIFN0
cnVjdHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlF
NEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJERDE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQx
NkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RkI5MjE4MTZEMDJFQjIwMDU1QTVEQiAvKiBERkdBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRkI5MjFBMTZEMDJFQzUwMDU1QTVEQiAvKiBERkdCYXNpY0Jsb2NrSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUIxNkQwMkYwMTAwNTVBNURCIC8qIERGR05vZGVBbGxv
Y2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjIzNUJFRTE3
MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZCOTIxRDE2RDAyRjMwMDA1NUE1REIgLyogREZHU2xvd1BhdGhHZW5lcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFFMTZEMDJGNDcwMDU1QTVEQiAvKiBERkdWYXJpYWRp
Y0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxRjE2RDAzMzA1MDA1NUE1REIg
LyogKG51bGwpIGluIEhlYWRlcnMgKi8sCkBAIC0zOTE3LDExICs0MDA5LDE0IEBACiAJCQkJMEY2
MjAxNzkxNDNGQ0Q0ODAwNjhCNzdDIC8qIERGR0Fic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYxNjAxNUQxNTYxOThDOTAwQzI1ODdDIC8qIERGR0FyZ3VtZW50c1NpbXBsaWZp
Y2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1
OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJENTE3MTc4
RTFDMDA2OTBDN0YgLyogRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkMwOTc2RTE0NjhBQjUxMDBDRjI0NDIgLyogREZHQXNzZW1ibHlIZWxwZXJzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjIzNUJEODE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMRXhpdFRodW5rR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgy
RTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNh
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMjM1QkQxMTcxNzhFMUMwMDY5MEM3
RiAvKiBGVExDQXJndW1lbnRHZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQzU1NzAx
NDczOEYzNTAwMTIxRTRGIC8qIERGR0NvZGVCbG9ja3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGMEYxOUQxNkI3MkEwODAwNURGOTVCIC8qIERGR0NvbW1vbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNCM0ExQTE1M0U2OEYyMDAzRUQwRkYgLyogREZHQ29uc3RhbnRGb2xkaW5nUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC0zOTMzLDEyICs0MDI4LDE0IEBACiAJCQkJMEZCQzBBRTcx
NDk2QzdDNDAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUMyQ0YzOUMxMTZFMTVBODEwMERENjlCRSAvKiBKU0FQSVdyYXBwZXJPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCREExNzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4
aXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcg
LyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMjcxNzA5NjIzQjAwQkI3
MjJDIC8qIEZUTENvbW1vblZhbHVlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURDQjEz
MjhERjgyMDAyQjJBRDcgLyogREZHSklUQ29tcGlsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGMEYxOTkxNkI3MjlGNjAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkJEQzREMTUyMjgxODYwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGMEYxOUMxNkI3MkEwMzAwNURGOTVCIC8qIERGR05v
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCRUQxNzE3OEU3MzAwNjkwQzdGIC8qIERG
R09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE1ODFCQTE1MEU5
NTJDMDBCOUEyRDkgLyogREZHTm9kZUZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5
RENGMTMyOERGODIwMDJCMkFENyAvKiBERkdPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRDgyRTU2MTQxREFGMDgwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTM5OTgsNiArNDA5NSw3IEBACiAJCQkJMTQyOUQ5MkYwRUQyMkQ3MDAwQjg5NjE5
IC8qIEpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkE5MEVEMDBFRTdENTFGMDBBQjM1MEQg
LyogSklUQXJpdGhtZXRpYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzU3MDZERTExOEEyQkNG
MDA1N0Y4OEYgLyogSklUQXJpdGhtZXRpYzMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
MjM1QkVCMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkNDODVBMzBFRTc5Qjc0MDAyODg2ODIgLyogSklUQ2FsbC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDZGRTUxMjExQTcxMDQzMDA4N0FFNjYgLyogSklUQ2FsbDMyXzY0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ0MTY2NzYzNTQwMEQ2MTk3MSAvKiBKSVRDb2RlLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNDAxNiw2ICs0MTE0LDcgQEAKIAkJCQkxNDA1NjZDNDEwN0VD
MjU1MDA1REJDOEQgLyogSlNBUElWYWx1ZVdyYXBwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5RDAxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQXJyYXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyMTM1OUIwQTY3N0Y0RjAwQTgxOTVFIC8qIEpTQmFzZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjIzNUJFNTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVmFsdWVTb3VyY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlND
YWxsYmFja0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhC
MTAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00
MDM3LDYgKzQxMzYsNyBAQAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNP
YmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGOTkzNjAwRkQ3MzI1MTAwQTBCMkQw
IC8qIEpTT05PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCREYxNzE3OEUxQzAw
NjkwQzdGIC8qIEZUTE9TUkV4aXRDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5NUY2
RTY5NTBFNUI1Rjk3MDA5MUU4NjAgLyogSlNQcm9maWxlclByaXZhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTcyN0ZGNkIwREEzMDkyMjAwRTU0OEQ3IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpT
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC00MTA1LDExICs0MjA1LDE0IEBACiAJCQkJMEY5
RkM4QzMxNEUxQjVGRTAwRDUyQUUwIC8qIFBvbHltb3JwaGljUHV0QnlJZExpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOTU3NDJGNjUwREQxMUY1QTAwMDkxN0ZCIC8qIFByb2ZpbGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJOTVDRDQ1NzYwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5l
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCRTMxNzE3OEUxQzAwNjkwQzdGIC8q
IEZUTFZhbHVlRm9ybWF0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk1QUI4MzU2MERBNDNDMzAw
MEJDODNGMyAvKiBQcm9maWxlTm9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRDE2
NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFByb2ZpbGVy
Qnl0ZWNvZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVD
MDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjIzNUJFMTE3MTc4RTFDMDA2OTBDN0YgLyogRlRMVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklU
Q29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2NkFEMzVDMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNDEzMSw2ICs0
MjM0LDcgQEAKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENh
Y2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3
QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEYyMzVCRDMx
NzE3OEUxQzAwNjkwQzdGIC8qIEZUTEV4aXRBcmd1bWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NjQyQzUxMjE1MUMwODNEMDA0NkQ0RUYgLyogUmVnRXhwTWF0Y2hlc0FycmF5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODQzMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDQxMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4
cFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZp
c2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODgsNiArODgsMTEgQEAgcHVibGlj
OgogICAgICAgICAgICAgLCBvZmZzZXQob2Zmc2V0KQogICAgICAgICB7CiAgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEFkZHJlc3Mgd2l0aE9mZnNldChpbnQzMl90IGFkZGl0aW9uYWxPZmZz
ZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBBZGRyZXNzKGJhc2UsIG9mZnNldCAr
IGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICB9CiAKICAgICAgICAgUmVnaXN0ZXJJRCBiYXNl
OwogICAgICAgICBpbnQzMl90IG9mZnNldDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTk5
LDYgKzE5OSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBseU9mZnNldChsYWJlbC5t
X2xhYmVsKS5tX29mZnNldDsKICAgICB9CiAKKyAgICB1bnNpZ25lZCBvZmZzZXRPZihQYXRjaGFi
bGVKdW1wIGp1bXApCisgICAgeworICAgICAgICByZXR1cm4gYXBwbHlPZmZzZXQoanVtcC5tX2p1
bXAubV9sYWJlbCkubV9vZmZzZXQ7CisgICAgfQorCiAgICAgLy8gVXBvbiBjb21wbGV0aW9uIG9m
IGFsbCBwYXRjaGluZyAnRklOQUxJWkVfQ09ERSgpJyBzaG91bGQgYmUgY2FsbGVkIG9uY2UgdG8K
ICAgICAvLyBjb21wbGV0ZSBnZW5lcmF0aW9uIG9mIHRoZSBjb2RlLiBBbHRlcm5hdGl2ZWx5LCBj
YWxsCiAgICAgLy8gZmluYWxpemVDb2RlV2l0aG91dERpc2Fzc2VtYmx5KCkgZGlyZWN0bHkgaWYg
eW91IGhhdmUgeW91ciBvd24gd2F5IG9mCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oCShyZXZpc2lv
biAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTkzLDYgKzkzLDcgQEAgcHVibGljOgog
ICAgICAgICBEb3VibGVDb25kaXRpb25CaXRzX3Nob3VsZF9ub3RfaW50ZXJmZXJlX3dpdGhfWDg2
QXNzZW1ibGVyX0NvbmRpdGlvbl9jb2Rlcyk7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IFg4NlJlZ2lzdGVyczo6ZXNwOworICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGZyYW1lUG9pbnRlclJlZ2lzdGVyID0gWDg2UmVnaXN0ZXJzOjplYnA7
CiAKICNpZiBFTkFCTEUoSklUX0NPTlNUQU5UX0JMSU5ESU5HKQogICAgIHN0YXRpYyBib29sIHNo
b3VsZEJsaW5kRm9yU3BlY2lmaWNBcmNoKHVpbnQzMl90IHZhbHVlKSB7IHJldHVybiB2YWx1ZSA+
PSAweDAwZmZmZmZmOyB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1Jl
cGF0Y2hCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL1JlcGF0Y2hCdWZmZXIuaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDE2
ICs0NiwyMiBAQCBjbGFzcyBSZXBhdGNoQnVmZmVyIHsKIHB1YmxpYzoKICAgICBSZXBhdGNoQnVm
ZmVyKENvZGVCbG9jayogY29kZUJsb2NrKQogICAgIHsKKyNpZiBFTkFCTEUoQVNTRU1CTEVSX1dY
X0VYQ0xVU0lWRSkKICAgICAgICAgUmVmUHRyPEpJVENvZGU+IGNvZGUgPSBjb2RlQmxvY2stPmdl
dEpJVENvZGUoKTsKICAgICAgICAgbV9zdGFydCA9IGNvZGUtPnN0YXJ0KCk7CiAgICAgICAgIG1f
c2l6ZSA9IGNvZGUtPnNpemUoKTsKIAogICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtl
V3JpdGFibGUobV9zdGFydCwgbV9zaXplKTsKKyNlbHNlCisgICAgICAgIFVOVVNFRF9QQVJBTShj
b2RlQmxvY2spOworI2VuZGlmCiAgICAgfQogCiAgICAgflJlcGF0Y2hCdWZmZXIoKQogICAgIHsK
KyNpZiBFTkFCTEUoQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSkKICAgICAgICAgRXhlY3V0YWJsZUFs
bG9jYXRvcjo6bWFrZUV4ZWN1dGFibGUobV9zdGFydCwgbV9zaXplKTsKKyNlbmRpZgogICAgIH0K
IAogICAgIHZvaWQgcmVsaW5rKENvZGVMb2NhdGlvbkp1bXAganVtcCwgQ29kZUxvY2F0aW9uTGFi
ZWwgZGVzdGluYXRpb24pCkBAIC0xNzAsOCArMTc2LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6CisjaWYgRU5BQkxFKEFTU0VNQkxFUl9XWF9FWENMVVNJVkUpCiAgICAgdm9pZCogbV9z
dGFydDsKICAgICBzaXplX3QgbV9zaXplOworI2VuZGlmCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBK
U0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkRG
R05vZGUuaCIKICNpbmNsdWRlICJERkdSZXBhdGNoLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIK
KyNpbmNsdWRlICJGVExKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNs
dWRlICJKSVQuaCIKICNpbmNsdWRlICJKSVRTdHVicy5oIgpAQCAtMzI1NCwxNiArMzI1NSw0NCBA
QCB2b2lkIENvZGVCbG9jazo6dGFsbHlGcmVxdWVudEV4aXRTaXRlcygpCiAgICAgCiAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gYWx0ZXJuYXRpdmUoKTsKICAgICAKLSAgICBERkc6OkpJ
VENvZGUqIGppdENvZGUgPSBtX2ppdENvZGUtPmRmZygpOwotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIERGRzo6T1NS
RXhpdCYgZXhpdCA9IGppdENvZGUtPm9zckV4aXRbaV07Ci0gICAgICAgIAotICAgICAgICBpZiAo
IWV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUodGhpcywgcHJvZmlsZWRCbG9j
aykpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBzd2l0Y2ggKGdldEpJVFR5cGUoKSkgewor
ICAgIGNhc2UgSklUQ29kZTo6REZHSklUOiB7CisgICAgICAgIERGRzo6SklUQ29kZSogaml0Q29k
ZSA9IG1faml0Q29kZS0+ZGZnKCk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBq
aXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBERkc6Ok9TUkV4aXQm
IGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoIWV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUodGhpcywgcHJvZmlsZWRC
bG9jaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyNpZiBERkdf
RU5BQkxFKERFQlVHX1ZFUkJPU0UpCisgICAgICAgICAgICBkYXRhTG9nKCJPU1IgZXhpdCAjIiwg
aSwgIiAoYmMjIiwgZXhpdC5tX2NvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgIiwgIiwgZXhpdC5t
X2tpbmQsICIpIGZvciAiLCAqdGhpcywgIiBvY2N1cnJlZCBmcmVxdWVudGx5OiBjb3VudGluZyBh
cyBmcmVxdWVudCBleGl0IHNpdGUuXG4iKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KICAgICAgICAgCisgICAgY2FzZSBKSVRDb2RlOjpGVExKSVQ6IHsKKyAgICAg
ICAgLy8gVGhlcmUgaXMgbm8gZWFzeSB3YXkgdG8gYXZvaWQgZHVwbGljYXRpbmcgdGhpcyBjb2Rl
IHNpbmNlIHRoZSBGVEw6OkpJVENvZGU6Om9zckV4aXQKKyAgICAgICAgLy8gdmVjdG9yIGNvbnRh
aW5zIGEgdG90YWxseSBkaWZmZXJlbnQgdHlwZSwgdGhhdCBqdXN0IHNvIGhhcHBlbnMgdG8gYmVo
YXZlIGxpa2UKKyAgICAgICAgLy8gREZHOjpKSVRDb2RlOjpvc3JFeGl0LgorCisgICAgICAgIEZU
TDo6SklUQ29kZSogaml0Q29kZSA9IG1faml0Q29kZS0+ZnRsKCk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBqaXRDb2RlLT5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBGVEw6Ok9TUkV4aXQmIGV4aXQgPSBqaXRDb2RlLT5vc3JFeGl0W2ldOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIWV4aXQuY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNp
dGUodGhpcywgcHJvZmlsZWRCbG9jaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgIGRhdGFMb2co
Ik9TUiBleGl0ICMiLCBpLCAiIChiYyMiLCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4
LCAiLCAiLCBleGl0Lm1fa2luZCwgIikgZm9yICIsICp0aGlzLCAiIG9jY3VycmVkIGZyZXF1ZW50
bHk6IGNvdW50aW5nIGFzIGZyZXF1ZW50IGV4aXQgc2l0ZS5cbiIpOworICAgICAgICAgICAgZGF0
YUxvZygiT1NSIGV4aXQgIyIsIGksICIgKGJjIyIsIGV4aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2Rl
SW5kZXgsICIsICIsIGV4aXQubV9raW5kLCAiKSBmb3IgIiwgKnRoaXMsICIgb2NjdXJyZWQgZnJl
cXVlbnRseTogY291bnRpbmcgYXMgZnJlcXVlbnQgZXhpdCBzaXRlLlxuIik7CiAjZW5kaWYKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9ICAgICAgICAKKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJl
YWs7CiAgICAgfQogfQogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgJKHJldmlzaW9uIDE0ODMxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGVyYW5kcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTcsNiArMjE3LDggQEAgcHVibGljOgogICAgICAgICAgICAgbV9sb2NhbHNbaV0gPSBUcmFp
dHM6OmRlZmF1bHRWYWx1ZSgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3Q7CisgICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxULCA4PiBtX2FyZ3Vt
ZW50czsKICAgICBWZWN0b3I8VCwgMTY+IG1fbG9jYWxzOwpAQCAtMjQwLDYgKzI0MiwxMiBAQCB2
b2lkIGR1bXBPcGVyYW5kcyhjb25zdCBPcGVyYW5kczxULCBUcmFpCiAgICAgfQogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBUcmFpdHM+CitpbmxpbmUgdm9pZCBPcGVyYW5kczxU
LCBUcmFpdHM+OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcE9wZXJh
bmRzKCp0aGlzLCBvdXQpOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIE9w
ZXJhbmRzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dFN0YXRlLmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsOCBAQCB2
b2lkIEFic3RyYWN0U3RhdGU6OmluaXRpYWxpemUoR3JhcGgmIGdyCiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGlj
dGlvbiA9IG5vZGUtPnZhcmlhYmxlQWNjZXNzRGF0YSgpLT5wcmVkaWN0aW9uKCk7CisgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPQorICAgICAgICAgICAgbm9kZS0+dmFyaWFibGVB
Y2Nlc3NEYXRhKCktPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIGlmIChpc0lu
dDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpCiAgICAgICAgICAgICByb290LT52YWx1ZXNBdEhl
YWQuYXJndW1lbnQoaSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGVsc2UgaWYgKGlzQm9vbGVh
blNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHUFJJbmZvLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdHUFJJbmZvLmgJKHJldmlzaW9uIDE0ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR1BSSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBACiBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKIHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXI6OlJlZ2lz
dGVySUQgR1BSUmVnOwotI2RlZmluZSBJbnZhbGlkR1BSUmVnICgoR1BSUmVnKS0xKQorI2RlZmlu
ZSBJbnZhbGlkR1BSUmVnICgoOjpKU0M6OkRGRzo6R1BSUmVnKS0xKQogCiAjaWYgVVNFKEpTVkFM
VUU2NCkKIGNsYXNzIEpTVmFsdWVSZWdzIHsKQEAgLTM2Nyw3ICszNjcsNyBAQCBwdWJsaWM6CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgcmVnaXN0ZXJGb3JJbmRleFtudW1iZXJPZkFyZ3Vt
ZW50UmVnaXN0ZXJzXSA9IHsgYXJndW1lbnRHUFIwLCBhcmd1bWVudEdQUjEsIGFyZ3VtZW50R1BS
MiwgYXJndW1lbnRHUFIzLCBhcmd1bWVudEdQUjQsIGFyZ3VtZW50R1BSNSB9OwogICAgICAgICBy
ZXR1cm4gcmVnaXN0ZXJGb3JJbmRleFtpbmRleF07CiAgICAgfQotCisgICAgCiAgICAgc3RhdGlj
IHVuc2lnbmVkIHRvSW5kZXgoR1BSUmVnIHJlZykKICAgICB7CiAgICAgICAgIEFTU0VSVChyZWcg
IT0gSW52YWxpZEdQUlJlZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR01p
bmlmaWVkTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
TWluaWZpZWROb2RlLmgJKHJldmlzaW9uIDE0ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTWluaWZpZWROb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAg
aW5saW5lIGJvb2wgYmVsb25nc0luTWluaWZpZWRHcmFwaChOb2RlVAogICAgIGNhc2UgUGhhbnRv
bUFyZ3VtZW50czoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUKCFuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmcodHlwZSkgJiYgIW5lZWRzT1NSRm9yd2Fy
ZFJld2lyaW5nKHR5cGUpKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDE0ODMxNikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMjg3LDYgKzI4NywyNSBAQCBpbmxpbmUgTm9kZUZsYWdzIGRlZmF1bHRGbGFncyhOb2Rl
VHlwZSBvCiAgICAgfQogfQogCitpbmxpbmUgYm9vbCBuZWVkc09TUkJhY2t3YXJkUmV3aXJpbmco
Tm9kZVR5cGUgb3ApCit7CisgICAgcmV0dXJuIG9wID09IFVJbnQzMlRvTnVtYmVyOworfQorCitp
bmxpbmUgYm9vbCBuZWVkc09TUkZvcndhcmRSZXdpcmluZyhOb2RlVHlwZSBvcCkKK3sKKyAgICBz
d2l0Y2ggKG9wKSB7CisgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgIGNhc2UgRm9yd2FyZElu
dDMyVG9Eb3VibGU6CisgICAgY2FzZSBWYWx1ZVRvSW50MzI6CisgICAgY2FzZSBVSW50MzJUb051
bWJlcjoKKyAgICBjYXNlIERvdWJsZUFzSW50MzI6CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpERkcKIAogI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCShyZXZpc2lvbiAxNDgzMTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxNSArMzYsMTIgQEAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIAogT1NS
RXhpdDo6T1NSRXhpdChFeGl0S2luZCBraW5kLCBKU1ZhbHVlU291cmNlIGpzVmFsdWVTb3VyY2Us
IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQcm9maWxlLCBTcGVjdWxhdGl2ZUpJ
VCogaml0LCB1bnNpZ25lZCBzdHJlYW1JbmRleCwgdW5zaWduZWQgcmVjb3ZlcnlJbmRleCkKLSAg
ICA6IG1fanNWYWx1ZVNvdXJjZShqc1ZhbHVlU291cmNlKQorICAgIDogT1NSRXhpdEJhc2Uoa2lu
ZCwgaml0LT5tX2NvZGVPcmlnaW5Gb3JPU1IpCisgICAgLCBtX2pzVmFsdWVTb3VyY2UoanNWYWx1
ZVNvdXJjZSkKICAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJvZmlsZSkKICAgICAsIG1fcGF0
Y2hhYmxlQ29kZU9mZnNldCgwKQotICAgICwgbV9jb2RlT3JpZ2luKGppdC0+bV9jb2RlT3JpZ2lu
Rm9yT1NSKQotICAgICwgbV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUobV9jb2RlT3JpZ2luKQog
ICAgICwgbV9yZWNvdmVyeUluZGV4KHJlY292ZXJ5SW5kZXgpCiAgICAgLCBtX3dhdGNocG9pbnRJ
bmRleChzdGQ6Om51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCi0gICAgLCBtX2tpbmQo
a2luZCkKLSAgICAsIG1fY291bnQoMCkKICAgICAsIG1fc3RyZWFtSW5kZXgoc3RyZWFtSW5kZXgp
CiAgICAgLCBtX2xhc3RTZXRPcGVyYW5kKGppdC0+bV9sYXN0U2V0T3BlcmFuZCkKIHsKQEAgLTcz
LDU3ICs3MCwxNSBAQCB2b2lkIE9TUkV4aXQ6OmNvcnJlY3RKdW1wKExpbmtCdWZmZXImIGxpCiAg
ICAgbV9wYXRjaGFibGVDb2RlT2Zmc2V0ID0gbGlua0J1ZmZlci5vZmZzZXRPZihsYWJlbCk7CiB9
CiAKLWJvb2wgT1NSRXhpdDo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENv
ZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQotewot
ICAgIGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5vc3JF
eGl0Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0
U2l0ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgRnJlcXVlbnRFeGl0U2l0
ZSBleGl0U2l0ZTsKLSAgICAKLSAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsK
LSAgICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdo
ZXJlIGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKLSAgICAgICAgLy8g
dGhlIGZhY3QgdGhhdCB0aGV5IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0aWN1
bGFyIGluc3RydWN0aW9uLgotICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9r
aW5kKTsKLSAgICB9IGVsc2UKLSAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1f
Y29kZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCk7Ci0gICAgCi0g
ICAgcmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2so
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJlcXVl
bnRFeGl0U2l0ZShleGl0U2l0ZSk7Ci19Ci0KIHZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2Fy
ZChCYXNpY0Jsb2NrKiBibG9jaywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRl
eCwgY29uc3QgVmFsdWVSZWNvdmVyeSYgdmFsdWVSZWNvdmVyeSkKIHsKLSAgICAvLyBDaGVjayB0
aGF0IGVpdGhlciB0aGUgY3VycmVudCBub2RlIGlzIGEgU2V0TG9jYWwsIG9yIHRoZSBwcmVjZWRp
bmcgbm9kZSB3YXMgYQotICAgIC8vIFNldExvY2FsIHdpdGggdGhlIHNhbWUgY29kZSBvcmlnaW4s
IG9yIHRoYXQgd2UndmUgcHJvdmlkZWQgYSB2YWx1ZVJlY292ZXJ5LgotICAgIGlmICghQVNTRVJU
X0RJU0FCTEVECi0gICAgICAgICYmICF2YWx1ZVJlY292ZXJ5Ci0gICAgICAgICYmICFjdXJyZW50
Tm9kZS0+Y29udGFpbnNNb3ZIaW50KCkpIHsKLSAgICAgICAgTm9kZSogc2V0TG9jYWwgPSBibG9j
ay0+YXQobm9kZUluZGV4IC0gMSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9jYWwsIHNl
dExvY2FsLT5jb250YWluc01vdkhpbnQoKSk7Ci0gICAgICAgIEFTU0VSVF9VTlVTRUQoc2V0TG9j
YWwsIHNldExvY2FsLT5jb2RlT3JpZ2luID09IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKTsKLSAg
ICB9Ci0gICAgCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qgbm9kZSBmb3IgdGhlIG5leHQgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24uIEFsc28gdHJhY2sgdGhlIGxhc3QgbW92IGhpbnQKLSAgICAvLyBvbiB0
aGlzIG5vZGUuCi0gICAgdW5zaWduZWQgaW5kZXhJbkJsb2NrID0gbm9kZUluZGV4ICsgMTsKLSAg
ICBOb2RlKiBub2RlID0gMDsKLSAgICBOb2RlKiBsYXN0TW92SGludCA9IDA7Ci0gICAgZm9yICg7
OykgewotICAgICAgICBpZiAoaW5kZXhJbkJsb2NrID09IGJsb2NrLT5zaXplKCkpIHsKLSAgICAg
ICAgICAgIC8vIFRoaXMgaXMgYW4gaW5saW5lIHJldHVybi4gR2l2ZSB1cCBhbmQgZG8gYSBiYWNr
d2FyZHMgc3BlY3VsYXRpb24uIFRoaXMgaXMgc2FmZQotICAgICAgICAgICAgLy8gYmVjYXVzZSBh
biBpbmxpbmUgcmV0dXJuIGhhcyBpdHMgb3duIGJ5dGVjb2RlIGluZGV4IGFuZCBpdCdzIGFsd2F5
cyBzYWZlIHRvCi0gICAgICAgICAgICAvLyByZWV4ZWN1dGUgdGhhdCBieXRlY29kZS4KLSAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IEp1bXApOwotICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICB9Ci0gICAgICAgIG5vZGUgPSBibG9jay0+YXQoaW5kZXhJbkJsb2NrKTsKLSAgICAg
ICAgaWYgKG5vZGUtPmNvbnRhaW5zTW92SGludCgpICYmIG5vZGUtPmNoaWxkMSgpID09IGN1cnJl
bnROb2RlKQotICAgICAgICAgICAgbGFzdE1vdkhpbnQgPSBub2RlOwotICAgICAgICBpZiAobm9k
ZS0+Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbikKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBpbmRleEluQmxvY2srKzsKLSAgICB9Ci0gICAgCisgICAgTm9kZSogbm9k
ZTsKKyAgICBOb2RlKiBsYXN0TW92SGludDsKKyAgICBpZiAoIWRvU2VhcmNoRm9yRm9yd2FyZENv
bnZlcnNpb24oYmxvY2ssIGN1cnJlbnROb2RlLCBub2RlSW5kZXgsICEhdmFsdWVSZWNvdmVyeSwg
bm9kZSwgbGFzdE1vdkhpbnQpKQorICAgICAgICByZXR1cm47CisKICAgICBBU1NFUlQobm9kZS0+
Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCiAgICAgbV9jb2Rl
T3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKICAgICAKICAgICBpZiAoIXZhbHVlUmVjb3Zlcnkp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuaAkocmV2aXNpb24gMTQ4
MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJERkdDb21tb24uaCIKICNpbmNsdWRlICJE
RkdFeGl0UHJvZmlsZS5oIgogI2luY2x1ZGUgIkRGR0dQUkluZm8uaCIKKyNpbmNsdWRlICJERkdP
U1JFeGl0QmFzZS5oIgogI2luY2x1ZGUgIkRGR1ZhbHVlUmVjb3ZlcnlPdmVycmlkZS5oIgogI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiTWV0aG9kT2ZHZXR0aW5nQVZhbHVl
UHJvZmlsZS5oIgpAQCAtODQsNyArODUsNyBAQCBwcml2YXRlOgogLy8KIC8vIFRoaXMgc3RydWN0
dXJlIGRlc2NyaWJlcyBob3cgdG8gZXhpdCB0aGUgc3BlY3VsYXRpdmUgcGF0aCBieQogLy8gZ29p
bmcgaW50byBiYXNlbGluZSBjb2RlLgotc3RydWN0IE9TUkV4aXQgeworc3RydWN0IE9TUkV4aXQg
OiBwdWJsaWMgT1NSRXhpdEJhc2UgewogICAgIE9TUkV4aXQoRXhpdEtpbmQsIEpTVmFsdWVTb3Vy
Y2UsIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUsIFNwZWN1bGF0aXZlSklUKiwgdW5zaWdu
ZWQgc3RyZWFtSW5kZXgsIHVuc2lnbmVkIHJlY292ZXJ5SW5kZXggPSBVSU5UX01BWCk7CiAgICAg
CiAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fY29kZTsKQEAgLTkzLDIyICs5NCwxMCBAQCBz
dHJ1Y3QgT1NSRXhpdCB7CiAgICAgTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3ZhbHVl
UHJvZmlsZTsKIAogICAgIHVuc2lnbmVkIG1fcGF0Y2hhYmxlQ29kZU9mZnNldDsKLSAgICBDb2Rl
T3JpZ2luIG1fY29kZU9yaWdpbjsKLSAgICBDb2RlT3JpZ2luIG1fY29kZU9yaWdpbkZvckV4aXRQ
cm9maWxlOwogICAgIAogICAgIHVuc2lnbmVkIG1fcmVjb3ZlcnlJbmRleDsKICAgICB1bnNpZ25l
ZCBtX3dhdGNocG9pbnRJbmRleDsKICAgICAKLSAgICBFeGl0S2luZCBtX2tpbmQ7Ci0gICAgdWlu
dDMyX3QgbV9jb3VudDsKLSAgICAKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4
aXRTaXRlKENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJs
b2NrKQotICAgIHsKLSAgICAgICAgaWYgKCFtX2NvdW50IHx8ICFleGl0S2luZElzQ291bnRhYmxl
KG1fa2luZCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiBjb25z
aWRlckFkZGluZ0FzRnJlcXVlbnRFeGl0U2l0ZVNsb3coZGZnQ29kZUJsb2NrLCBwcm9maWxlZENv
ZGVCbG9jayk7Ci0gICAgfQotCiAgICAgdm9pZCBzZXRQYXRjaGFibGVDb2RlT2Zmc2V0KE1hY3Jv
QXNzZW1ibGVyOjpQYXRjaGFibGVKdW1wKTsKICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBnZXRQ
YXRjaGFibGVDb2RlT2Zmc2V0QXNKdW1wKCkgY29uc3Q7CiAgICAgQ29kZUxvY2F0aW9uSnVtcCBj
b2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayopIGNvbnN0OwpAQCAtMTIwLDkgKzEwOSw2
IEBAIHN0cnVjdCBPU1JFeGl0IHsKICAgICBpbnQgbV9sYXN0U2V0T3BlcmFuZDsKICAgICAKICAg
ICBSZWZQdHI8VmFsdWVSZWNvdmVyeU92ZXJyaWRlPiBtX3ZhbHVlUmVjb3ZlcnlPdmVycmlkZTsK
LQotcHJpdmF0ZToKLSAgICBib29sIGNvbnNpZGVyQWRkaW5nQXNGcmVxdWVudEV4aXRTaXRlU2xv
dyhDb2RlQmxvY2sqIGRmZ0NvZGVCbG9jaywgQ29kZUJsb2NrKiBwcm9maWxlZENvZGVCbG9jayk7
CiB9OwogCiBzdHJ1Y3QgU3BlY3VsYXRpb25GYWlsdXJlRGVidWdJbmZvIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdEJhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdEJh
c2UuaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiREZHQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKKworYm9v
bCBPU1JFeGl0QmFzZTo6Y29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVC
bG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxvY2sqIHByb2ZpbGVkQ29kZUJsb2NrKQoreworICAg
IGlmIChzdGF0aWNfY2FzdDxkb3VibGU+KG1fY291bnQpIC8gZGZnQ29kZUJsb2NrLT5vc3JFeGl0
Q291bnRlcigpIDw9IE9wdGlvbnM6Om9zckV4aXRQcm9taW5lbmNlRm9yRnJlcXVlbnRFeGl0U2l0
ZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgRnJlcXVlbnRFeGl0U2l0ZSBl
eGl0U2l0ZTsKKyAgICAKKyAgICBpZiAobV9raW5kID09IEFyZ3VtZW50c0VzY2FwZWQpIHsKKyAg
ICAgICAgLy8gQ291bnQgdGhpcyBvbmUgZ2xvYmFsbHkuIEl0IGRvZXNuJ3QgbWF0dGVyIHdoZXJl
IGluIHRoZSBjb2RlIGJsb2NrIHRoZSBhcmd1bWVudHMgZXhjYXBlZDsKKyAgICAgICAgLy8gdGhl
IGZhY3QgdGhhdCB0aGV5IGRpZCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYXJ0aWN1bGFy
IGluc3RydWN0aW9uLgorICAgICAgICBleGl0U2l0ZSA9IEZyZXF1ZW50RXhpdFNpdGUobV9raW5k
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgZXhpdFNpdGUgPSBGcmVxdWVudEV4aXRTaXRlKG1fY29k
ZU9yaWdpbkZvckV4aXRQcm9maWxlLmJ5dGVjb2RlSW5kZXgsIG1fa2luZCk7CisgICAgCisgICAg
cmV0dXJuIGJhc2VsaW5lQ29kZUJsb2NrRm9yT3JpZ2luQW5kQmFzZWxpbmVDb2RlQmxvY2sobV9j
b2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUsIHByb2ZpbGVkQ29kZUJsb2NrKS0+YWRkRnJlcXVlbnRF
eGl0U2l0ZShleGl0U2l0ZSk7Cit9CisKK2Jvb2wgT1NSRXhpdEJhc2U6OmRvU2VhcmNoRm9yRm9y
d2FyZENvbnZlcnNpb24oCisgICAgQmFzaWNCbG9jayogYmxvY2ssIE5vZGUqIGN1cnJlbnROb2Rl
LCB1bnNpZ25lZCBub2RlSW5kZXgsIGJvb2wgaGFzVmFsdWVSZWNvdmVyeSwKKyAgICBOb2RlKiYg
bm9kZSwgTm9kZSomIGxhc3RNb3ZIaW50KQoreworICAgIC8vIENoZWNrIHRoYXQgZWl0aGVyIHRo
ZSBjdXJyZW50IG5vZGUgaXMgYSBTZXRMb2NhbCwgb3IgdGhlIHByZWNlZGluZyBub2RlIHdhcyBh
CisgICAgLy8gU2V0TG9jYWwgd2l0aCB0aGUgc2FtZSBjb2RlIG9yaWdpbiwgb3IgdGhhdCB3ZSd2
ZSBwcm92aWRlZCBhIHZhbHVlUmVjb3ZlcnkuCisgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQKKyAg
ICAgICAgJiYgIWhhc1ZhbHVlUmVjb3ZlcnkKKyAgICAgICAgJiYgIWN1cnJlbnROb2RlLT5jb250
YWluc01vdkhpbnQoKSkgeworICAgICAgICBOb2RlKiBzZXRMb2NhbCA9IGJsb2NrLT5hdChub2Rl
SW5kZXggLSAxKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9jYWwtPmNv
bnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChzZXRMb2NhbCwgc2V0TG9j
YWwtPmNvZGVPcmlnaW4gPT0gY3VycmVudE5vZGUtPmNvZGVPcmlnaW4pOworICAgIH0KKyAgICAK
KyAgICAvLyBGaW5kIHRoZSBmaXJzdCBub2RlIGZvciB0aGUgbmV4dCBieXRlY29kZSBpbnN0cnVj
dGlvbi4gQWxzbyB0cmFjayB0aGUgbGFzdCBtb3YgaGludAorICAgIC8vIG9uIHRoaXMgbm9kZS4K
KyAgICB1bnNpZ25lZCBpbmRleEluQmxvY2sgPSBub2RlSW5kZXggKyAxOworICAgIG5vZGUgPSAw
OworICAgIGxhc3RNb3ZIaW50ID0gMDsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChpbmRl
eEluQmxvY2sgPT0gYmxvY2stPnNpemUoKSkgeworICAgICAgICAgICAgLy8gVGhpcyBpcyBhbiBp
bmxpbmUgcmV0dXJuLiBHaXZlIHVwIGFuZCBkbyBhIGJhY2t3YXJkcyBzcGVjdWxhdGlvbi4gVGhp
cyBpcyBzYWZlCisgICAgICAgICAgICAvLyBiZWNhdXNlIGFuIGlubGluZSByZXR1cm4gaGFzIGl0
cyBvd24gYnl0ZWNvZGUgaW5kZXggYW5kIGl0J3MgYWx3YXlzIHNhZmUgdG8KKyAgICAgICAgICAg
IC8vIHJlZXhlY3V0ZSB0aGF0IGJ5dGVjb2RlLgorICAgICAgICAgICAgQVNTRVJUKG5vZGUtPm9w
KCkgPT0gSnVtcCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgbm9kZSA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICBpZiAobm9kZS0+Y29u
dGFpbnNNb3ZIaW50KCkgJiYgbm9kZS0+Y2hpbGQxKCkgPT0gY3VycmVudE5vZGUpCisgICAgICAg
ICAgICBsYXN0TW92SGludCA9IG5vZGU7CisgICAgICAgIGlmIChub2RlLT5jb2RlT3JpZ2luICE9
IGN1cnJlbnROb2RlLT5jb2RlT3JpZ2luKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlu
ZGV4SW5CbG9jaysrOworICAgIH0KKyAgICAKKyAgICBBU1NFUlQobm9kZS0+Y29kZU9yaWdpbiAh
PSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpERkcKKworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRCYXNlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0QmFzZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBERkdPU1JFeGl0QmFzZV9oCisjZGVmaW5lIERGR09TUkV4
aXRCYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKERGR19K
SVQpCisKKyNpbmNsdWRlICJDb2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiREZHRXhpdFByb2ZpbGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCitzdHJ1Y3QgQmFzaWNCbG9j
azsKK3N0cnVjdCBOb2RlOworCisvLyBQcm92aWRlcyBmb3IgdGhlIE9TUiBleGl0IHByb2ZpbGlu
ZyBmdW5jdGlvbmFsaXR5IHRoYXQgaXMgY29tbW9uIGJldHdlZW4gdGhlIERGRworLy8gYW5kIHRo
ZSBGVEwuCisKK3N0cnVjdCBPU1JFeGl0QmFzZSB7CisgICAgT1NSRXhpdEJhc2UoRXhpdEtpbmQg
a2luZCwgQ29kZU9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9raW5kKGtpbmQpCisgICAgICAg
ICwgbV9jb3VudCgwKQorICAgICAgICAsIG1fY29kZU9yaWdpbihvcmlnaW4pCisgICAgICAgICwg
bV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGUob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgRXhpdEtpbmQgbV9raW5kOworICAgIHVpbnQzMl90IG1fY291bnQ7CisgICAgCisgICAgQ29k
ZU9yaWdpbiBtX2NvZGVPcmlnaW47CisgICAgQ29kZU9yaWdpbiBtX2NvZGVPcmlnaW5Gb3JFeGl0
UHJvZmlsZTsKKworICAgIGJvb2wgY29uc2lkZXJBZGRpbmdBc0ZyZXF1ZW50RXhpdFNpdGUoQ29k
ZUJsb2NrKiBkZmdDb2RlQmxvY2ssIENvZGVCbG9jayogcHJvZmlsZWRDb2RlQmxvY2spCisgICAg
eworICAgICAgICBpZiAoIW1fY291bnQgfHwgIWV4aXRLaW5kSXNDb3VudGFibGUobV9raW5kKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGNvbnNpZGVyQWRkaW5n
QXNGcmVxdWVudEV4aXRTaXRlU2xvdyhkZmdDb2RlQmxvY2ssIHByb2ZpbGVkQ29kZUJsb2NrKTsK
KyAgICB9CisgICAgCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoZSBmb3J3YXJkIGNvbnZlcnNp
b24gaXMgcmVhbGx5IG5lZWRlZC4KKyAgICBib29sIGRvU2VhcmNoRm9yRm9yd2FyZENvbnZlcnNp
b24oCisgICAgICAgIEJhc2ljQmxvY2sqLCBOb2RlKiBjdXJyZW50Tm9kZSwgdW5zaWduZWQgbm9k
ZUluZGV4LCBib29sIGhhc1ZhbHVlUmVjb3ZlcnksCisgICAgICAgIE5vZGUqJiBuZXh0QkNOb2Rl
LCBOb2RlKiYgbGFzdE1vdkhpbnQpOworCitwcml2YXRlOgorICAgIGJvb2wgY29uc2lkZXJBZGRp
bmdBc0ZyZXF1ZW50RXhpdFNpdGVTbG93KENvZGVCbG9jayogZGZnQ29kZUJsb2NrLCBDb2RlQmxv
Y2sqIHByb2ZpbGVkQ29kZUJsb2NrKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcK
KworI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjZW5kaWYgLy8gREZHT1NSRXhpdEJhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlcjY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRD
b21waWxlcjY0LmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1Myw3ICs2
NTMsNyBAQCB2b2lkIE9TUkV4aXRDb21waWxlcjo6Y29tcGlsZUV4aXQoY29uc3QgCiAgICAgLy8g
MTYpIExvYWQgdGhlIHJlc3VsdCBvZiB0aGUgbGFzdCBieXRlY29kZSBvcGVyYXRpb24gaW50byBy
ZWdUMC4KICAgICAKICAgICBpZiAoZXhpdC5tX2xhc3RTZXRPcGVyYW5kICE9IHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpCi0gICAgICAgIG1faml0LmxvYWQ2NChBc3NlbWJseUhlbHBl
cnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilleGl0Lm1fbGFzdFNldE9wZXJhbmQpLCBH
UFJJbmZvOjpjYWNoZWRSZXN1bHRSZWdpc3Rlcik7CisgICAgICAgIG1faml0LmxvYWQ2NChBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRPcGVyYW5kKSwgR1BSSW5mbzo6
Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOwogICAgIAogICAgIC8vIDE3KSBBbmQgZmluaXNoLgogICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQ2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uLmgiCiAjaW5jbHVkZSAi
REZHSklUQ29kZS5oIgorI2luY2x1ZGUgIkRGR09TUkV4aXRQcmVwYXJhdGlvbi5oIgogI2luY2x1
ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiUmVw
YXRjaEJ1ZmZlci5oIgpAQCAtNTQsMjAgKzU1LDcgQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgdWludDMyX3QgZXhpdEluZGV4ID0gZ2xvYmFsRGF0YS0+b3NyRXhp
dEluZGV4OwogICAgIE9TUkV4aXQmIGV4aXQgPSBjb2RlQmxvY2stPmdldEpJVENvZGUoKS0+ZGZn
KCktPm9zckV4aXRbZXhpdEluZGV4XTsKICAgICAKLSAgICAvLyBNYWtlIHN1cmUgYWxsIGNvZGUg
b24gb3VyIGlubGluZSBzdGFjayBpcyBKSVQgY29tcGlsZWQuIFRoaXMgaXMgbmVjZXNzYXJ5IHNp
bmNlCi0gICAgLy8gd2UgbWF5IG9wdCB0byBpbmxpbmUgYSBjb2RlIGJsb2NrIGV2ZW4gYmVmb3Jl
IGl0IGhhZCBldmVyIGJlZW4gY29tcGlsZWQgYnkgdGhlCi0gICAgLy8gSklULCBidXQgb3VyIE9T
UiBleGl0IGluZnJhc3RydWN0dXJlIGN1cnJlbnRseSBvbmx5IHdvcmtzIGlmIHRoZSB0YXJnZXQg
b2YgdGhlCi0gICAgLy8gT1NSIGV4aXQgaXMgSklUIGNvZGUuIFRoaXMgY291bGQgYmUgY2hhbmdl
ZCBzaW5jZSB0aGVyZSBpcyBub3RoaW5nIHBhcnRpY3VsYXJseQotICAgIC8vIGhhcmQgYWJvdXQg
ZG9pbmcgYW4gT1NSIGV4aXQgaW50byB0aGUgaW50ZXJwcmV0ZXIsIGJ1dCBmb3Igbm93IHRoaXMg
c2VlbXMgdG8gbWFrZQotICAgIC8vIHNlbnNlIGluIHRoYXQgaWYgd2UncmUgT1NSIGV4aXRpbmcg
ZnJvbSBpbmxpbmVkIGNvZGUgb2YgYSBERkcgY29kZSBibG9jaywgdGhlbgotICAgIC8vIHByb2Jh
Ymx5IGl0J3MgYSBnb29kIHNpZ24gdGhhdCB0aGUgdGhpbmcgd2UncmUgZXhpdGluZyBpbnRvIGlz
IGhvdC4gRXZlbiBtb3JlCi0gICAgLy8gaW50ZXJlc3RpbmdseSwgc2luY2UgdGhlIGNvZGUgd2Fz
IGlubGluZWQsIGl0IG1heSBuZXZlciBvdGhlcndpc2UgZ2V0IEpJVAotICAgIC8vIGNvbXBpbGVk
IHNpbmNlIHRoZSBhY3Qgb2YgaW5saW5pbmcgaXQgbWF5IGVuc3VyZSB0aGF0IGl0IG90aGVyd2lz
ZSBuZXZlciBydW5zLgotICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2Nv
ZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAgICAgICBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5n
ZXQoKSkKLSAgICAgICAgICAgIC0+YmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmlzQ2FsbCA/IENvZGVGb3JDYWxsIDogQ29kZUZvckNvbnN0cnVjdCkKLSAg
ICAgICAgICAgIC0+aml0Q29tcGlsZShleGVjKTsKLSAgICB9CisgICAgcHJlcGFyZUNvZGVPcmln
aW5Gb3JPU1JFeGl0KGV4ZWMsIGV4aXQubV9jb2RlT3JpZ2luKTsKICAgICAKICAgICAvLyBDb21w
dXRlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLgogICAgIE9wZXJhbmRzPFZhbHVlUmVjb3Zlcnk+IG9w
ZXJhbmRzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGls
ZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsK
IAotdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0
JiBleGl0KQordm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBP
U1JFeGl0QmFzZSYgZXhpdCkKIHsKICAgICBqaXQuYWRkMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoMSksIEFzc2VtYmx5SGVscGVyczo6QWJzb2x1dGVBZGRyZXNzKCZleGl0Lm1fY291
bnQpKTsKICAgICAKQEAgLTczLDcgKzczLDcgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxs
SGVscGVycyYgaml0LAogICAgIGRvbmVBZGp1c3RpbmcubGluaygmaml0KTsKIH0KIAotdm9pZCBy
ZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0JiBl
eGl0KQordm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEFTU0VSVChq
aXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkJhc2VsaW5l
SklUKTsKQEAgLTE0Nyw3ICsxNDcsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0Nh
bGxIZWxwZXJzCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBw
YXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKIH0KIAotdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXQmIGV4aXQp
Cit2b2lkIGFkanVzdEFuZEp1bXBUb1RhcmdldChDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NS
RXhpdEJhc2UmIGV4aXQpCiB7CiAgICAgaWYgKGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSkKICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihl
eGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzUsOSArMzUsOSBAQAogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKLXZvaWQgaGFuZGxlRXhpdENvdW50cyhD
Q2FsbEhlbHBlcnMmLCBjb25zdCBPU1JFeGl0Jik7Ci12b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdCYpOwotdm9pZCBhZGp1c3RBbmRKdW1wVG9U
YXJnZXQoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdCYpOwordm9pZCBoYW5kbGVFeGl0Q291
bnRzKENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7Cit2b2lkIHJlaWZ5SW5saW5l
ZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiwgY29uc3QgT1NSRXhpdEJhc2UmKTsKK3ZvaWQgYWRq
dXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYsIGNvbnN0IE9TUkV4aXRCYXNlJik7CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJERkdPU1JF
eGl0UHJlcGFyYXRpb24uaCIKKworI2lmIEVOQUJMRShERkdfSklUKQorCisjaW5jbHVkZSAiQ29k
ZUJsb2NrLmgiCisjaW5jbHVkZSAiRXhlY3V0YWJsZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCit2b2lkIHByZXBhcmVDb2Rl
T3JpZ2luRm9yT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMsIENvZGVPcmlnaW4gY29kZU9yaWdpbikK
K3sKKyAgICBmb3IgKDsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgICAgIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlLmdldCgpKQorICAgICAgICAgICAgLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+aXNDYWxsID8gQ29kZUZvckNhbGwgOiBDb2RlRm9yQ29uc3RydWN0
KQorICAgICAgICAgICAgLT5qaXRDb21waWxlKGV4ZWMpOworICAgIH0KK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkRGRworCisjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBh
cmF0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIERGR09TUkV4aXRQcmVwYXJh
dGlvbl9oCisjZGVmaW5lIERGR09TUkV4aXRQcmVwYXJhdGlvbl9oCisKKyNpZiBFTkFCTEUoREZH
X0pJVCkKKworI2luY2x1ZGUgIkNhbGxGcmFtZS5oIgorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgeworCisvLyBNYWtlIHN1cmUgYWxsIGNv
ZGUgb24gb3VyIGlubGluZSBzdGFjayBpcyBKSVQgY29tcGlsZWQuIFRoaXMgaXMgbmVjZXNzYXJ5
IHNpbmNlCisvLyB3ZSBtYXkgb3B0IHRvIGlubGluZSBhIGNvZGUgYmxvY2sgZXZlbiBiZWZvcmUg
aXQgaGFkIGV2ZXIgYmVlbiBjb21waWxlZCBieSB0aGUKKy8vIEpJVCwgYnV0IG91ciBPU1IgZXhp
dCBpbmZyYXN0cnVjdHVyZSBjdXJyZW50bHkgb25seSB3b3JrcyBpZiB0aGUgdGFyZ2V0IG9mIHRo
ZQorLy8gT1NSIGV4aXQgaXMgSklUIGNvZGUuIFRoaXMgY291bGQgYmUgY2hhbmdlZCBzaW5jZSB0
aGVyZSBpcyBub3RoaW5nIHBhcnRpY3VsYXJseQorLy8gaGFyZCBhYm91dCBkb2luZyBhbiBPU1Ig
ZXhpdCBpbnRvIHRoZSBpbnRlcnByZXRlciwgYnV0IGZvciBub3cgdGhpcyBzZWVtcyB0byBtYWtl
CisvLyBzZW5zZSBpbiB0aGF0IGlmIHdlJ3JlIE9TUiBleGl0aW5nIGZyb20gaW5saW5lZCBjb2Rl
IG9mIGEgREZHIGNvZGUgYmxvY2ssIHRoZW4KKy8vIHByb2JhYmx5IGl0J3MgYSBnb29kIHNpZ24g
dGhhdCB0aGUgdGhpbmcgd2UncmUgZXhpdGluZyBpbnRvIGlzIGhvdC4gRXZlbiBtb3JlCisvLyBp
bnRlcmVzdGluZ2x5LCBzaW5jZSB0aGUgY29kZSB3YXMgaW5saW5lZCwgaXQgbWF5IG5ldmVyIG90
aGVyd2lzZSBnZXQgSklUCisvLyBjb21waWxlZCBzaW5jZSB0aGUgYWN0IG9mIGlubGluaW5nIGl0
IG1heSBlbnN1cmUgdGhhdCBpdCBvdGhlcndpc2UgbmV2ZXIgcnVucy4KK3ZvaWQgcHJlcGFyZUNv
ZGVPcmlnaW5Gb3JPU1JFeGl0KEV4ZWNTdGF0ZSosIENvZGVPcmlnaW4pOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6REZHCisKKyNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKKworI2VuZGlmIC8v
IERGR09TUkV4aXRQcmVwYXJhdGlvbl9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjg2
LDcgKzE2ODYsNyBAQCBleHRlcm4gIkMiIHZvaWQgREZHX09QRVJBVElPTiB0cmlnZ2VyUmVvCiAg
ICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVwbGFjZW1lbnQgbXVzdCBiZSBvcHRpbWl6ZWQgY29kZS4g
VXNlIHRoaXMgYXMgYW4gb3Bwb3J0dW5pdHkKICAgICAvLyB0byBjaGVjayBvdXIgbG9naWMuCiAg
ICAgQVNTRVJUKGNvZGVCbG9jay0+aGFzT3B0aW1pemVkUmVwbGFjZW1lbnQoKSk7Ci0gICAgQVNT
RVJUKGNvZGVCbG9jay0+cmVwbGFjZW1lbnQoKS0+Z2V0SklUVHlwZSgpID09IEpJVENvZGU6OkRG
R0pJVCk7CisgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChjb2RlQmxvY2stPnJl
cGxhY2VtZW50KCktPmdldEpJVFR5cGUoKSkpOwogCiAgICAgY29kZUJsb2NrLT5yZW9wdGltaXpl
KCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NzcsNyArMTc3Nyw3
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNoZWNrQXJndW1lbnRUeXBlcygKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZpcnR1YWxSZWdp
c3RlciA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGVkVHlwZSA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+cHJlZGljdGlvbigpOworICAg
ICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0ZWRUeXBlID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5h
cmd1bWVudEF3YXJlUHJlZGljdGlvbigpOwogCiAgICAgICAgIEpTVmFsdWVTb3VyY2UgdmFsdWVT
b3VyY2UgPSBKU1ZhbHVlU291cmNlKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxSZWdp
c3RlcikpOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFs
dWVTb3VyY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Zh
bHVlU291cmNlLmgJKHJldmlzaW9uIDE0ODMxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHVmFsdWVTb3VyY2UuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDcgKzEzMSw3IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoSW50MzJJbkpTU3RhY2spOwotICAgICAg
ICBpZiAoaXNBcnJheVNwZWN1bGF0aW9uKHByZWRpY3Rpb24pIHx8IGlzQ2VsbFNwZWN1bGF0aW9u
KHByZWRpY3Rpb24pKQorICAgICAgICBpZiAoaXNDZWxsU3BlY3VsYXRpb24ocHJlZGljdGlvbikp
CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVTb3VyY2UoQ2VsbEluSlNTdGFjayk7CiAgICAgICAg
IGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihwcmVkaWN0aW9uKSkKICAgICAgICAgICAgIHJldHVy
biBWYWx1ZVNvdXJjZShCb29sZWFuSW5KU1N0YWNrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyaWFibGVFdmVudFN0cmVhbS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmNwcAkocmV2aXNpb24g
MTQ4MzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJpYWJsZUV2ZW50U3Ry
ZWFtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgVmFyaWFibGVF
dmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICAKICAgICAgICAgICAgIGJvb2wg
Zm91bmQgPSBmYWxzZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKG5vZGUgJiYgbm9k
ZS0+b3AoKSA9PSBVSW50MzJUb051bWJlcikgeworICAgICAgICAgICAgaWYgKG5vZGUgJiYgbmVl
ZHNPU1JCYWNrd2FyZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7CiAgICAgICAgICAgICAgICAgTWlu
aWZpZWRJRCBpZCA9IG5vZGUtPmNoaWxkMSgpOwogICAgICAgICAgICAgICAgIGlmICh0cnlUb1Nl
dENvbnN0YW50UmVjb3ZlcnkodmFsdWVSZWNvdmVyaWVzW2ldLCBjb2RlQmxvY2ssIGdyYXBoLmF0
KGlkKSkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMjU3LDYgKzI1Nyw3IEBA
IHZvaWQgVmFyaWFibGVFdmVudFN0cmVhbTo6cmVjb25zdHJ1Y3QoCiAgICAgICAgICAgICAgICAg
ICAgICAgICBkb3VibGVBc0ludDMySUQgPSBpZDsKICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKCFuZWVkc09TUkZvcndhcmRSZXdpcmluZyhub2RlLT5vcCgpKSk7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0
aW9ucy5oCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODAsOSArODAsMTQgQEAgc3RhdGlj
IGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBlKExUeXBlIGVsZQogfQogCiBlbnVtIFZhcmlhZGljaXR5
IHsgTm90VmFyaWFkaWMsIFZhcmlhZGljIH07Ci1zdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9u
VHlwZShMVHlwZSByZXR1cm5UeXBlLCBMVHlwZSogcGFyYW1UeXBlcywgdW5zaWduZWQgcGFyYW1D
b3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0
aW9uVHlwZShMVHlwZSByZXR1cm5UeXBlLCBjb25zdCBMVHlwZSogcGFyYW1UeXBlcywgdW5zaWdu
ZWQgcGFyYW1Db3VudCwgVmFyaWFkaWNpdHkgdmFyaWFkaWNpdHkpCiB7Ci0gICAgcmV0dXJuIExM
Vk1GdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgcGFyYW1UeXBlcywgcGFyYW1Db3VudCwgdmFyaWFk
aWNpdHkgPT0gVmFyaWFkaWMpOworICAgIHJldHVybiBMTFZNRnVuY3Rpb25UeXBlKHJldHVyblR5
cGUsIGNvbnN0X2Nhc3Q8TFR5cGUqPihwYXJhbVR5cGVzKSwgcGFyYW1Db3VudCwgdmFyaWFkaWNp
dHkgPT0gVmFyaWFkaWMpOworfQordGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGlu
ZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgY29uc3QgVmVjdG9yVHlwZSYg
dmVjdG9yLCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIHJl
dHVybiBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgdmVjdG9yLmJlZ2luKCksIHZlY3Rvci5zaXpl
KCksIHZhcmlhZGljaXR5KTsKIH0KIHN0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExU
eXBlIHJldHVyblR5cGUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCiB7
CkBAIC05OCw2ICsxMDMsOCBAQCBzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlw
ZSByCiAgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCAyLCB2
YXJpYWRpY2l0eSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgTFR5cGUgdHlwZU9mKExWYWx1ZSB2YWx1
ZSkgeyByZXR1cm4gTExWTVR5cGVPZih2YWx1ZSk7IH0KKwogc3RhdGljIGlubGluZSB1bnNpZ25l
ZCBtZEtpbmRJRChjb25zdCBjaGFyKiBzdHJpbmcpIHsgcmV0dXJuIExMVk1HZXRNREtpbmRJRChz
dHJpbmcsIHN0cmxlbihzdHJpbmcpKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgbWRTdHJpbmco
Y29uc3QgY2hhciogc3RyaW5nLCB1bnNpZ25lZCBsZW5ndGgpIHsgcmV0dXJuIExMVk1NRFN0cmlu
ZyhzdHJpbmcsIGxlbmd0aCk7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIG1kU3RyaW5nKGNvbnN0
IGNoYXIqIHN0cmluZykgeyByZXR1cm4gbWRTdHJpbmcoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7
IH0KQEAgLTEzMCw4ICsxMzcsOCBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludChMVHlw
ZSB0eXBlCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludFRvUHRyKExWYWx1ZSB2YWx1ZSwg
TFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUNvbnN0SW50VG9QdHIodmFsdWUsIHR5cGUpOyB9CiBz
dGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEJpdENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBl
KSB7IHJldHVybiBMTFZNQ29uc3RCaXRDYXN0KHZhbHVlLCB0eXBlKTsgfQogCi1zdGF0aWMgaW5s
aW5lIExCYXNpY0Jsb2NrIGFwcGVuZEJhc2ljQmxvY2soTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVy
biBMTFZNQXBwZW5kQmFzaWNCbG9jayhmdW5jdGlvbiwgIiIpOyB9Ci1zdGF0aWMgaW5saW5lIExC
YXNpY0Jsb2NrIGluc2VydEJhc2ljQmxvY2soTEJhc2ljQmxvY2sgYmVmb3JlQmFzaWNCbG9jaykg
eyByZXR1cm4gTExWTUluc2VydEJhc2ljQmxvY2soYmVmb3JlQmFzaWNCbG9jaywgIiIpOyB9Citz
dGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGFwcGVuZEJhc2ljQmxvY2soTFZhbHVlIGZ1bmN0aW9u
LCBjb25zdCBjaGFyKiBuYW1lID0gIiIpIHsgcmV0dXJuIExMVk1BcHBlbmRCYXNpY0Jsb2NrKGZ1
bmN0aW9uLCBuYW1lKTsgfQorc3RhdGljIGlubGluZSBMQmFzaWNCbG9jayBpbnNlcnRCYXNpY0Js
b2NrKExCYXNpY0Jsb2NrIGJlZm9yZUJhc2ljQmxvY2ssIGNvbnN0IGNoYXIqIG5hbWUgPSAiIikg
eyByZXR1cm4gTExWTUluc2VydEJhc2ljQmxvY2soYmVmb3JlQmFzaWNCbG9jaywgbmFtZSk7IH0K
IAogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBbGxvY2EoTEJ1aWxkZXIgYnVpbGRlciwgTFR5
cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkQWxsb2NhKGJ1aWxkZXIsIHR5cGUsICIiKTsgfQog
c3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBZGQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxl
ZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkQWRkKGJ1aWxkZXIsIGxlZnQsIHJp
Z2h0LCAiIik7IH0KQEAgLTE1MSw5ICsxNTgsMTQgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRJbnRDYXN0KExCdWlsZAogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJbnRUb1B0cihMQnVp
bGRlciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWls
ZEludFRvUHRyKGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkUHRyVG9JbnQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0
eXBlKSB7IHJldHVybiBMTFZNQnVpbGRQdHJUb0ludChidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIp
OyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZElDbXAoTEJ1aWxkZXIgYnVpbGRlciwgTElu
dFByZWRpY2F0ZSBjb25kLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBMTFZN
QnVpbGRJQ21wKGJ1aWxkZXIsIGNvbmQsIGxlZnQsIHJpZ2h0LCAiIik7IH0KLXN0YXRpYyBpbmxp
bmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExW
YWx1ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykKK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxk
Q2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIGNvbnN0IExWYWx1ZSogYXJn
cywgdW5zaWduZWQgbnVtQXJncykKK3sKKyAgICByZXR1cm4gTExWTUJ1aWxkQ2FsbChidWlsZGVy
LCBmdW5jdGlvbiwgY29uc3RfY2FzdDxMVmFsdWUqPihhcmdzKSwgbnVtQXJncywgIiIpOworfQor
dGVtcGxhdGU8dHlwZW5hbWUgVmVjdG9yVHlwZT4KK2lubGluZSBMVmFsdWUgYnVpbGRDYWxsKExC
dWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbiwgY29uc3QgVmVjdG9yVHlwZSYgdmVjdG9y
KQogewotICAgIHJldHVybiBMTFZNQnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCBhcmdzLCBu
dW1BcmdzLCAiIik7CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgdmVj
dG9yLmJlZ2luKCksIHZlY3Rvci5zaXplKCkpOwogfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVp
bGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikKIHsKQEAgLTE2OCw2ICsx
ODAsOCBAQCBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgCiAgICAgTFZh
bHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiB9OwogICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIGFyZ3MsIDIpOwogfQorZW51bSBUYWlsQ2FsbE1vZGUgeyBJc05vdFRhaWxD
YWxsLCBJc1RhaWxDYWxsIH07CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0VGFpbENhbGwoTFZhbHVl
IGNhbGwsIFRhaWxDYWxsTW9kZSBtb2RlKSB7IExMVk1TZXRUYWlsQ2FsbChjYWxsLCBtb2RlID09
IElzVGFpbENhbGwpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEV4dHJhY3RWYWx1ZShM
QnVpbGRlciBidWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
TExWTUJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgsICIiKTsgfQogc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGNv
bmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIExMVk1CdWls
ZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtlbiwgIiIpOyB9CiBzdGF0
aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExCdWlsZGVyIGJ1aWxkZXIsIExCYXNpY0Jsb2NrIGRl
c3RpbmF0aW9uKSB7IHJldHVybiBMTFZNQnVpbGRCcihidWlsZGVyLCBkZXN0aW5hdGlvbik7IH0K
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1bWVudEdldHRl
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENBcmd1
bWVudEdldHRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRlRMQ0FyZ3VtZW50R2V0dGVyLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2luZyBuYW1lc3BhY2UgREZH
OworCit2b2lkIENBcmd1bWVudEdldHRlcjo6bG9hZE5leHRBbmRCb3goVmFsdWVGb3JtYXQgZm9y
bWF0LCBHUFJSZWcgZGVzdGluYXRpb24sIEdQUlJlZyBzY3JhdGNoKQoreworICAgIGlmIChzY3Jh
dGNoID09IEludmFsaWRHUFJSZWcpIHsKKyAgICAgICAgaWYgKGRlc3RpbmF0aW9uID09IEdQUklu
Zm86Om5vbkFyZ0dQUjApCisgICAgICAgICAgICBzY3JhdGNoID0gR1BSSW5mbzo6bm9uQXJnR1BS
MTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc2NyYXRjaCA9IEdQUkluZm86Om5vbkFyZ0dQ
UjA7CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBWYWx1ZUZv
cm1hdEludDMyOiB7CisgICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOworICAgICAgICBt
X2ppdC5vcjY0KEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgZGVzdGluYXRpb24pOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0
VUludDMyOiB7CisgICAgICAgIGxvYWROZXh0MzIoZGVzdGluYXRpb24pOworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6SnVtcCBpc0ludCA9IG1faml0LmJyYW5jaDMyKAorICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9u
LCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgICAgIAorICAgICAg
ICBtX2ppdC5tb3ZlRG91YmxlVG82NChGUFJJbmZvOjpmcFJlZ1QwLCBzY3JhdGNoKTsKKyAgICAg
ICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoZGVzdGluYXRpb24sIEZQUkluZm86OmZwUmVn
VDApOworICAgICAgICBtX2ppdC5ib3hEb3VibGUoRlBSSW5mbzo6ZnBSZWdUMCwgZGVzdGluYXRp
b24pOworICAgICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShzY3JhdGNoLCBGUFJJbmZvOjpmcFJl
Z1QwKTsKKyAgICAgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0g
bV9qaXQuanVtcCgpOworICAgICAgICAgICAgCisgICAgICAgIGlzSW50LmxpbmsoJm1faml0KTsK
KyAgICAgICAgbV9qaXQub3I2NChHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIGRlc3Rp
bmF0aW9uKTsKKyAgICAgICAgICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgICAgICAgICAgCisgICAgY2FzZSBWYWx1ZUZvcm1hdEJvb2xl
YW46IHsKKyAgICAgICAgbG9hZE5leHQ4KGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbV9qaXQub3Iz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBkZXN0aW5hdGlvbik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGNhc2UgVmFsdWVGb3Jt
YXRKU1ZhbHVlOiB7CisgICAgICAgIGxvYWROZXh0NjQoZGVzdGluYXRpb24pOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgICAgICAgICAKKyAgICBjYXNlIFZhbHVlRm9ybWF0RG91YmxlOiB7
CisgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KEZQUkluZm86OmZwUmVnVDAsIHNjcmF0Y2gp
OworICAgICAgICBsb2FkTmV4dERvdWJsZShGUFJJbmZvOjpmcFJlZ1QwKTsKKyAgICAgICAgbV9q
aXQuYm94RG91YmxlKEZQUkluZm86OmZwUmVnVDAsIGRlc3RpbmF0aW9uKTsKKyAgICAgICAgbV9q
aXQubW92ZTY0VG9Eb3VibGUoc2NyYXRjaCwgRlBSSW5mbzo6ZnBSZWdUMCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICAgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDQXJndW1lbnRHZXR0ZXIuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ0FyZ3VtZW50R2V0dGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExDQXJndW1lbnRHZXR0ZXJfaAor
I2RlZmluZSBGVExDQXJndW1lbnRHZXR0ZXJfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+
CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR0Fzc2VtYmx5SGVscGVycy5o
IgorI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworLy8gVGhpcyBjdXJyZW50bHkgb25seSB1bmRlcnN0YW5kcyBob3cgdG8gZ2V0
IGFyZ3VtZW50cyBvbiBYODYtNjQgY2RlY2wuIFRoaXMgaXMgYWxzbworLy8gbm90IHBhcnRpY3Vs
YXJseSBlZmZpY2llbnQuIEl0IHdpbGwgZ2VuZXJhdGUgc29tZSByZWR1bmRhbnQgbW92ZXMuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIFJlZ2lzdGVyS2luZD4KK2Jvb2wgaXNBcmd1bWVudFJlZ2lzdGVy
KHR5cGVuYW1lIFJlZ2lzdGVyS2luZDo6UmVnaXN0ZXJUeXBlIHJlZykKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgUmVnaXN0ZXJLaW5kOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJz
OyArK2kpIHsKKyAgICAgICAgaWYgKFJlZ2lzdGVyS2luZDo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkp
ID09IHJlZykKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2NsYXNzIENBcmd1bWVudEdldHRlciB7CitwdWJsaWM6CisgICAgLy8gUGVlayBv
ZmZzZXQgaXMgdGhlIG51bWJlciBvZiB0aGluZ3Mgb24gdGhlIHN0YWNrIGJlbG93IHRoZSBmaXJz
dCBhcmd1bWVudC4KKyAgICAvLyBJdCB3aWxsIGJlIDEgaWYgeW91IGhhdmVuJ3QgcHVzaGVkIG9y
IHBvcHBlZCBhZnRlciB0aGUgY2FsbDsgaS5lLiB0aGUgb25seQorICAgIC8vIHRoaW5nIGlzIHRo
ZSByZXR1cm4gYWRkcmVzcy4KKyAgICBDQXJndW1lbnRHZXR0ZXIoREZHOjpBc3NlbWJseUhlbHBl
cnMmIGppdCwgaW50IHBlZWtPZmZzZXQgPSAxKQorICAgICAgICA6IG1faml0KGppdCkKKyAgICAg
ICAgLCBtX3BlZWtPZmZzZXQocGVla09mZnNldCkKKyAgICAgICAgLCBtX2dwckFyZ3VtZW50SW5k
ZXgoMCkKKyAgICAgICAgLCBtX2ZwckFyZ3VtZW50SW5kZXgoMCkKKyAgICAgICAgLCBtX3N0YWNr
QXJndW1lbnRJbmRleCgwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkTmV4dDgo
REZHOjpHUFJSZWcgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIWlzQXJndW1l
bnRSZWdpc3RlcjxERkc6OkdQUkluZm8+KGRlc3RpbmF0aW9uKSk7CisgICAgICAgIGlmIChtX2dw
ckFyZ3VtZW50SW5kZXggPCBERkc6OkdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMp
IHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoREZHOjpHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0
ZXIobV9ncHJBcmd1bWVudEluZGV4KyspLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWQ4KG5leHRBZGRyZXNz
KCksIGRlc3RpbmF0aW9uKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBsb2FkTmV4dDMyKERGRzo6
R1BSUmVnIGRlc3RpbmF0aW9uKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFpc0FyZ3VtZW50UmVn
aXN0ZXI8REZHOjpHUFJJbmZvPihkZXN0aW5hdGlvbikpOworICAgICAgICBpZiAobV9ncHJBcmd1
bWVudEluZGV4IDwgREZHOjpHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzKSB7Cisg
ICAgICAgICAgICBtX2ppdC5tb3ZlKERGRzo6R1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKG1f
Z3ByQXJndW1lbnRJbmRleCsrKSwgZGVzdGluYXRpb24pOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX2ppdC5sb2FkMzIobmV4dEFkZHJlc3MoKSwg
ZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxvYWROZXh0NjQoREZHOjpHUFJS
ZWcgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBBU1NFUlQoIWlzQXJndW1lbnRSZWdpc3Rl
cjxERkc6OkdQUkluZm8+KGRlc3RpbmF0aW9uKSk7CisgICAgICAgIGlmIChtX2dwckFyZ3VtZW50
SW5kZXggPCBERkc6OkdQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3RlcnMpIHsKKyAgICAg
ICAgICAgIG1faml0Lm1vdmUoREZHOjpHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIobV9ncHJB
cmd1bWVudEluZGV4KyspLCBkZXN0aW5hdGlvbik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWQ2NChuZXh0QWRkcmVzcygpLCBkZXN0
aW5hdGlvbik7CisgICAgfQorICAgIAorICAgIHZvaWQgbG9hZE5leHRQdHIoREZHOjpHUFJSZWcg
ZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBsb2FkTmV4dDY0KGRlc3RpbmF0aW9uKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBsb2FkTmV4dERvdWJsZShERkc6OkZQUlJlZyBkZXN0aW5hdGlv
bikKKyAgICB7CisgICAgICAgIEFTU0VSVCgKKyAgICAgICAgICAgICFpc0FyZ3VtZW50UmVnaXN0
ZXI8REZHOjpGUFJJbmZvPihkZXN0aW5hdGlvbikKKyAgICAgICAgICAgIHx8IGRlc3RpbmF0aW9u
ID09IERGRzo6RlBSSW5mbzo6YXJndW1lbnRGUFIwKTsKKyAgICAgICAgCisgICAgICAgIGlmICht
X2ZwckFyZ3VtZW50SW5kZXggPCBERkc6OkZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdpc3Rl
cnMpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGUoREZHOjpGUFJJbmZvOjp0b0FyZ3Vt
ZW50UmVnaXN0ZXIobV9mcHJBcmd1bWVudEluZGV4KyspLCBkZXN0aW5hdGlvbik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1faml0LmxvYWREb3Vi
bGUobmV4dEFkZHJlc3MoKSwgZGVzdGluYXRpb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGxv
YWROZXh0QW5kQm94KAorICAgICAgICBWYWx1ZUZvcm1hdCBmb3JtYXQsIERGRzo6R1BSUmVnIGRl
c3RpbmF0aW9uLCBERkc6OkdQUlJlZyBzY3JhdGNoID0gSW52YWxpZEdQUlJlZyk7CisKK3ByaXZh
dGU6CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgbmV4dEFkZHJlc3MoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKAorICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLAorICAgICAgICAgICAgKG1fcGVla09mZnNl
dCArIG1fc3RhY2tBcmd1bWVudEluZGV4KyspICogc2l6ZW9mKHZvaWQqKSk7CisgICAgfQorICAg
ICAgICAgICAgCisgICAgREZHOjpBc3NlbWJseUhlbHBlcnMmIG1faml0OworICAgIHVuc2lnbmVk
IG1fcGVla09mZnNldDsKKyAgICB1bnNpZ25lZCBtX2dwckFyZ3VtZW50SW5kZXg7CisgICAgdW5z
aWduZWQgbV9mcHJBcmd1bWVudEluZGV4OworICAgIHVuc2lnbmVkIG1fc3RhY2tBcmd1bWVudElu
ZGV4OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxF
KEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExDQXJndW1lbnRHZXR0ZXJfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE0ODMxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTg3LDkgKzg3LDkgQEAgdm9pZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6
SgogICAgIC8vIEZJWE1FOiBUaGlzIGlzIGEgdG90YWwga2x1ZGdlIC0gTExWTSBzaG91bGQganVz
dCB1c2Ugb3VyIGNhbGxpbmcgY29udmVudGlvbi4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIxCiAgICAgQ0NhbGxIZWxwZXJzIGppdCgmc3RhdGUu
Z3JhcGgubV9nbG9iYWxEYXRhLCBzdGF0ZS5ncmFwaC5tX2NvZGVCbG9jayk7Ci0gICAgICAgIAor
ICAgIAogICAgIGNvbXBpbGVFbnRyeShqaXQpOwotICAgICAgICAKKyAgICAKICAgICAvLyBUaGlz
IHBhcnQgaXMgb25seSBuZWNlc3NhcnkgZm9yIGZ1bmN0aW9ucy4gV2UgY3VycmVudGx5IG9ubHkg
Y29tcGlsZSBmdW5jdGlvbnMuCiAgICAgICAgIAogICAgIENDYWxsSGVscGVyczo6TGFiZWwgZnJv
bUFyaXR5Q2hlY2sgPSBqaXQubGFiZWwoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMRXhpdEFyZ3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50LmgiCisKKyNpZiBF
TkFCTEUoRlRMX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lk
IEV4aXRBcmd1bWVudDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiYXJnIiwgYXJndW1lbnQoKSwgIiBhcyAiLCBmb3JtYXQoKSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRBcmd1bWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExFeGl0QXJndW1lbnRfaAorI2RlZmluZSBGVExFeGl0
QXJndW1lbnRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRM
X0pJVCkKKworI2luY2x1ZGUgIkZUTFZhbHVlRm9ybWF0LmgiCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworc3RydWN0IEV4
aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIHsKKyAgICBWYWx1ZUZvcm1hdCBmb3JtYXQ7CisgICAg
dW5zaWduZWQgYXJndW1lbnQ7Cit9OworCitjbGFzcyBFeGl0QXJndW1lbnQgeworcHVibGljOgor
ICAgIEV4aXRBcmd1bWVudCgpCisgICAgeworICAgICAgICBtX3JlcHJlc2VudGF0aW9uLmZvcm1h
dCA9IEludmFsaWRWYWx1ZUZvcm1hdDsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3VtZW50KFZh
bHVlRm9ybWF0IGZvcm1hdCwgdW5zaWduZWQgYXJndW1lbnQpCisgICAgeworICAgICAgICBtX3Jl
cHJlc2VudGF0aW9uLmZvcm1hdCA9IGZvcm1hdDsKKyAgICAgICAgbV9yZXByZXNlbnRhdGlvbi5h
cmd1bWVudCA9IGFyZ3VtZW50OworICAgIH0KKyAgICAKKyAgICBleHBsaWNpdCBFeGl0QXJndW1l
bnQoRXhpdEFyZ3VtZW50UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24pCisgICAgeworICAg
ICAgICBtX3JlcHJlc2VudGF0aW9uID0gcmVwcmVzZW50YXRpb247CisgICAgfQorICAgIAorICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gbV9yZXByZXNlbnRhdGlvbi5mb3JtYXQg
PT0gSW52YWxpZFZhbHVlRm9ybWF0OyB9CisgICAgCisgICAgVmFsdWVGb3JtYXQgZm9ybWF0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVCgqdGhpcyk7CisgICAgICAgIHJldHVybiBtX3Jl
cHJlc2VudGF0aW9uLmZvcm1hdDsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgYXJndW1lbnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKCp0aGlzKTsKKyAgICAgICAgcmV0dXJuIG1f
cmVwcmVzZW50YXRpb24uYXJndW1lbnQ7CisgICAgfQorICAgIAorICAgIEV4aXRBcmd1bWVudCB3
aXRoRm9ybWF0KFZhbHVlRm9ybWF0IGZvcm1hdCkKKyAgICB7CisgICAgICAgIHJldHVybiBFeGl0
QXJndW1lbnQoZm9ybWF0LCBhcmd1bWVudCgpKTsKKyAgICB9CisgICAgCisgICAgRXhpdEFyZ3Vt
ZW50UmVwcmVzZW50YXRpb24gcmVwcmVzZW50YXRpb24oKSBjb25zdCB7IHJldHVybiBtX3JlcHJl
c2VudGF0aW9uOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIEV4aXRBcmd1bWVudFJlcHJlc2VudGF0aW9uIG1fcmVwcmVzZW50
YXRpb247Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEV4aXRBcmd1bWVudF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVy
YW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZC5oIgorCisjaWYg
RU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordm9p
ZCBFeGl0QXJndW1lbnRGb3JPcGVyYW5kOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KG1fZXhpdEFyZ3VtZW50LCAiIGZvciByIiwgbV9vcGVyYW5kKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFyZ3VtZW50Rm9yT3Bl
cmFuZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdEFy
Z3VtZW50Rm9yT3BlcmFuZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExFeGl0QXJndW1lbnRGb3JPcGVyYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTEV4aXRBcmd1bWVudEZvck9wZXJhbmRfaAorI2RlZmluZSBGVExFeGl0QXJndW1l
bnRGb3JPcGVyYW5kX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxF
KEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExFeGl0QXJndW1lbnQuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBFeGl0QXJndW1lbnRGb3JPcGVyYW5kIHsKK3B1
YmxpYzoKKyAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5kKCkKKyAgICAgICAgOiBtX29wZXJhbmQo
LTEpCisgICAgeworICAgIH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnRGb3JPcGVyYW5kKEV4aXRB
cmd1bWVudCBleGl0QXJndW1lbnQsIGludCBvcGVyYW5kKQorICAgICAgICA6IG1fZXhpdEFyZ3Vt
ZW50KGV4aXRBcmd1bWVudCkKKyAgICAgICAgLCBtX29wZXJhbmQob3BlcmFuZCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIW1fZXhpdEFy
Z3VtZW50OyB9CisgICAgCisgICAgY29uc3QgRXhpdEFyZ3VtZW50JiBleGl0QXJndW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2V4aXRBcmd1bWVudDsgfQorICAgIGludCBvcGVyYW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGVyYW5kOyB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIEV4aXRBcmd1bWVudCBtX2V4aXRBcmd1bWVudDsK
KyAgICBpbnQgbV9vcGVyYW5kOworfTsKKworaW5saW5lIGJvb2wgbGVzc2VyQXJndW1lbnRJbmRl
eCgKKyAgICBjb25zdCBFeGl0QXJndW1lbnRGb3JPcGVyYW5kJiBhLCBjb25zdCBFeGl0QXJndW1l
bnRGb3JPcGVyYW5kJiBiKQoreworICAgIHJldHVybiBhLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50
KCkgPCBiLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhp
dEFyZ3VtZW50Rm9yT3BlcmFuZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdEFyZ3VtZW50TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMRXhpdEFyZ3VtZW50TGlzdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExFeGl0QXJndW1lbnRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTEV4aXRBcmd1bWVudExpc3RfaAorI2RlZmluZSBGVExFeGl0QXJndW1lbnRM
aXN0X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQp
CisKKyNpbmNsdWRlICJGVExBYmJyZXZpYXRpb25zLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3R5cGVkZWYgVmVjdG9yPExW
YWx1ZSwgMTY+IEV4aXRBcmd1bWVudExpc3Q7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMRXhpdEFyZ3VtZW50
TGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMRXhpdFRodW5rR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4
aXRUaHVua0dlbmVyYXRvci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFRodW5rR2VuZXJhdG9yLmgiCisK
KyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxhdGlvbklu
Zm8uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkRGRzsKKworRXhpdFRodW5rR2VuZXJhdG9y
OjpFeGl0VGh1bmtHZW5lcmF0b3IoU3RhdGUmIHN0YXRlKQorICAgIDogQ0NhbGxIZWxwZXJzKCZz
dGF0ZS5ncmFwaC5tX2dsb2JhbERhdGEsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrKQorICAgICwg
bV9zdGF0ZShzdGF0ZSkKKyAgICAsIG1fZGlkVGhpbmdzKGZhbHNlKQoreworfQorCitFeGl0VGh1
bmtHZW5lcmF0b3I6On5FeGl0VGh1bmtHZW5lcmF0b3IoKQoreworfQorCit2b2lkIEV4aXRUaHVu
a0dlbmVyYXRvcjo6ZW1pdFRodW5rKHVuc2lnbmVkIGluZGV4KQoreworICAgIE9TUkV4aXRDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBtX3N0YXRlLm9zckV4aXRbaW5kZXhdOworICAgIAorICAgIGlu
Zm8ubV90aHVua0xhYmVsID0gbGFiZWwoKTsKKyAgICBtb3ZlKFRydXN0ZWRJbW0zMihpbmRleCks
IEdQUkluZm86Om5vbkFyZ0dQUjApOworICAgIGluZm8ubV90aHVua0p1bXAgPSBwYXRjaGFibGVK
dW1wKCk7CisgICAgCisgICAgbV9kaWRUaGluZ3MgPSB0cnVlOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEV4aXRUaHVua0dlbmVyYXRvci5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExFeGl0VGh1bmtHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMRXhpdFRodW5rR2VuZXJhdG9y
X2gKKyNkZWZpbmUgRlRMRXhpdFRodW5rR2VuZXJhdG9yX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdDQ2FsbEhlbHBl
cnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBTdGF0ZTsK
K3N0cnVjdCBPU1JFeGl0Q29tcGlsYXRpb25JbmZvOworCitjbGFzcyBFeGl0VGh1bmtHZW5lcmF0
b3IgOiBwdWJsaWMgREZHOjpDQ2FsbEhlbHBlcnMgeworcHVibGljOgorICAgIEV4aXRUaHVua0dl
bmVyYXRvcihTdGF0ZSYgc3RhdGUpOworICAgIH5FeGl0VGh1bmtHZW5lcmF0b3IoKTsKKyAgICAK
KyAgICB2b2lkIGVtaXRUaHVuayh1bnNpZ25lZCBpbmRleCk7CisgICAgCisgICAgYm9vbCBkaWRU
aGluZ3MoKSBjb25zdCB7IHJldHVybiBtX2RpZFRoaW5nczsgfQorCitwcml2YXRlOgorICAgIFN0
YXRlJiBtX3N0YXRlOworICAgIGJvb2wgbV9kaWRUaGluZ3M7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8vIEZU
TEV4aXRUaHVua0dlbmVyYXRvcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMRXhpdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEV4aXRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEV4aXRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit2b2lkIEV4aXRWYWx1ZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAg
Y2FzZSBJbnZhbGlkRXhpdFZhbHVlOgorICAgICAgICBvdXQucHJpbnQoIkludmFsaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRXhpdFZhbHVlRGVhZDoKKyAgICAgICAgb3V0LnByaW50
KCJEZWFkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50Ogor
ICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50KCIsIGV4aXRBcmd1bWVudCgpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgb3V0LnBy
aW50KCJDb25zdGFudCgiLCBjb25zdGFudCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6Cisg
ICAgICAgIG91dC5wcmludCgiSW5KU1N0YWNrQXNJbnQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJJ
bkpTU3RhY2tBc0RvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRXhpdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEV4aXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
RlRMRXhpdFZhbHVlX2gKKyNkZWZpbmUgRlRMRXhpdFZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExFeGl0QXJn
dW1lbnQuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGhpcyBpcyBs
aWtlIFZhbHVlUmVjb3ZlcnksIGJ1dCByZXNwZWN0cyB0aGUgd2F5IHRoYXQgdGhlIEZUTCBkb2Vz
IE9TUgorLy8gZXhpdDogdGhlIGxpdmUgbm9uLWNvbnN0YW50IG5vbi1mbHVzaGVkIHZhbHVlcyBh
cmUgcGFzc2VkIGFzIGFyZ3VtZW50cworLy8gdG8gYSBub3JldHVybiB0YWlsIGNhbGwuIEV4aXRW
YWx1ZSBpcyBoZW5jZSBtb3N0bHkgcmVzcG9uc2libGUgZm9yCisvLyB0ZWxsaW5nIHVzIHRoZSBt
YXBwaW5nIGJldHdlZW4gb3BlcmFuZHMgaW4gYnl0ZWNvZGUgYW5kIHRoZSBhcmd1bWVudHMgdG8K
Ky8vIHRoZSBjYWxsLgorCitlbnVtIEV4aXRWYWx1ZUtpbmQgeworICAgIEludmFsaWRFeGl0VmFs
dWUsCisgICAgRXhpdFZhbHVlRGVhZCwKKyAgICBFeGl0VmFsdWVBcmd1bWVudCwKKyAgICBFeGl0
VmFsdWVDb25zdGFudCwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2ssCisgICAgRXhpdFZhbHVlSW5K
U1N0YWNrQXNJbnQzMiwKKyAgICBFeGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZQorfTsKKworY2xh
c3MgRXhpdFZhbHVlIHsKK3B1YmxpYzoKKyAgICBFeGl0VmFsdWUoKQorICAgICAgICA6IG1fa2lu
ZChJbnZhbGlkRXhpdFZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gSW52YWxpZEV4aXRWYWx1ZTsgfQorICAgIAor
ICAgIHN0YXRpYyBFeGl0VmFsdWUgZGVhZCgpCisgICAgeworICAgICAgICBFeGl0VmFsdWUgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlRGVhZDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3RhY2so
KQorICAgIHsKKyAgICAgICAgRXhpdFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IEV4aXRWYWx1ZUluSlNTdGFjazsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9Cisg
ICAgCisgICAgc3RhdGljIEV4aXRWYWx1ZSBpbkpTU3RhY2tBc0ludDMyKCkKKyAgICB7CisgICAg
ICAgIEV4aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJ
bkpTU3RhY2tBc0ludDMyOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgRXhpdFZhbHVlIGluSlNTdGFja0FzRG91YmxlKCkKKyAgICB7CisgICAgICAgIEV4
aXRWYWx1ZSByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBFeGl0VmFsdWVJbkpTU3Rh
Y2tBc0RvdWJsZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgc3Rh
dGljIEV4aXRWYWx1ZSBjb25zdGFudChKU1ZhbHVlIHZhbHVlKQorICAgIHsKKyAgICAgICAgRXhp
dFZhbHVlIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEV4aXRWYWx1ZUNvbnN0YW50
OworICAgICAgICByZXN1bHQudS5jb25zdGFudCA9IEpTVmFsdWU6OmVuY29kZSh2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIHN0YXRpYyBFeGl0VmFsdWUg
ZXhpdEFyZ3VtZW50KGNvbnN0IEV4aXRBcmd1bWVudCYgYXJndW1lbnQpCisgICAgeworICAgICAg
ICBFeGl0VmFsdWUgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gRXhpdFZhbHVlQXJn
dW1lbnQ7CisgICAgICAgIHJlc3VsdC51LmFyZ3VtZW50ID0gYXJndW1lbnQucmVwcmVzZW50YXRp
b24oKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgRXhpdFZhbHVl
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgCisgICAgYm9vbCBpc0Rl
YWQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlRGVhZDsgfQorICAgIGJvb2wg
aXNJbkpTU3RhY2tTb21laG93KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgp
KSB7CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAgICAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrQXNE
b3VibGU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBib29sIGlzQ29uc3Rh
bnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQ29uc3RhbnQ7IH0KKyAgICBi
b29sIGlzQXJndW1lbnQoKSBjb25zdCB7IHJldHVybiBraW5kKCkgPT0gRXhpdFZhbHVlQXJndW1l
bnQ7IH0KKyAgICAKKyAgICBFeGl0QXJndW1lbnQgZXhpdEFyZ3VtZW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0FyZ3VtZW50KCkpOworICAgICAgICByZXR1cm4gRXhpdEFyZ3Vt
ZW50KHUuYXJndW1lbnQpOworICAgIH0KKyAgICAKKyAgICBKU1ZhbHVlIGNvbnN0YW50KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0NvbnN0YW50KCkpOworICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZGVjb2RlKHUuY29uc3RhbnQpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgRXhpdFZhbHVlS2luZCBt
X2tpbmQ7CisgICAgdW5pb24geworICAgICAgICBFeGl0QXJndW1lbnRSZXByZXNlbnRhdGlvbiBh
cmd1bWVudDsKKyAgICAgICAgRW5jb2RlZEpTVmFsdWUgY29uc3RhbnQ7CisgICAgfSB1OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKKyNlbmRpZiAvLyBGVExFeGl0VmFsdWVfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMRm9ybWF0dGVkVmFsdWUuaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExGb3JtYXR0ZWRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw2ICszMSw3IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJGVExBYmJy
ZXZpYXRpb25zLmgiCisjaW5jbHVkZSAiRlRMVmFsdWVGb3JtYXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBGVEwgewogCkBAIC00MSwxOCArNDIsNiBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAvLyB1c2UgdGhpcyBpbiBzaXR1YXRpb25zIHdoZXJlIHRoZXJlIGlz
IG5vIGdvb2Qgd2F5IHRvIHNheSB3aGF0IG5vZGUgdGhlIHZhbHVlIGNhbWUKIC8vIGZyb20uCiAK
LS8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBzaW1pbGFyIHRvIERhdGFGb3JtYXQgaW4g
b3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAotLy8gdW5saWtlIERhdGFGb3JtYXQgYW5k
IGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vpc2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQg
SW50MzIuCi0KLWVudW0gVmFsdWVGb3JtYXQgewotICAgIEludmFsaWRWYWx1ZUZvcm1hdCwKLSAg
ICBWYWx1ZUZvcm1hdEludDMyLAotICAgIFZhbHVlRm9ybWF0VUludDMyLAotICAgIFZhbHVlRm9y
bWF0Qm9vbGVhbiwKLSAgICBWYWx1ZUZvcm1hdEpTVmFsdWUsCi0gICAgVmFsdWVGb3JtYXREb3Vi
bGUKLX07Ci0KIGNsYXNzIEZvcm1hdHRlZFZhbHVlIHsKIHB1YmxpYzoKICAgICBGb3JtYXR0ZWRW
YWx1ZSgpCkBAIC04MSw2ICs3MCwxMyBAQCBwcml2YXRlOgogICAgIExWYWx1ZSBtX3ZhbHVlOwog
fTsKIAorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBub1ZhbHVlKCkgeyByZXR1cm4gRm9y
bWF0dGVkVmFsdWUoKTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBpbnQzMlZhbHVl
KExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRJbnQzMiwg
dmFsdWUpOyB9CitzdGF0aWMgaW5saW5lIEZvcm1hdHRlZFZhbHVlIHVJbnQzMlZhbHVlKExWYWx1
ZSB2YWx1ZSkgeyByZXR1cm4gRm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRVSW50MzIsIHZhbHVl
KTsgfQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBib29sZWFuVmFsdWUoTFZhbHVlIHZh
bHVlKSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEJvb2xlYW4sIHZhbHVlKTsg
fQorc3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBqc1ZhbHVlVmFsdWUoTFZhbHVlIHZhbHVl
KSB7IHJldHVybiBGb3JtYXR0ZWRWYWx1ZShWYWx1ZUZvcm1hdEpTVmFsdWUsIHZhbHVlKTsgfQor
c3RhdGljIGlubGluZSBGb3JtYXR0ZWRWYWx1ZSBkb3VibGVWYWx1ZShMVmFsdWUgdmFsdWUpIHsg
cmV0dXJuIEZvcm1hdHRlZFZhbHVlKFZhbHVlRm9ybWF0RG91YmxlLCB2YWx1ZSk7IH0KKwogfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHJldmlzaW9uIDE0ODMx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDYgKzQyLDExIEBAIEpJVENvZGU6On5KSVRDb2RlKCkKICAgICAgICAgTExW
TURpc3Bvc2VFeGVjdXRpb25FbmdpbmUobV9lbmdpbmUpOwogfQogCit2b2lkIEpJVENvZGU6Omlu
aXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYgZXhpdFRodW5rcykKK3sKKyAgICBtX2V4aXRUaHVu
a3MgPSBleGl0VGh1bmtzOworfQorCiB2b2lkIEpJVENvZGU6OmluaXRpYWxpemVDb2RlKExMVk1F
eGVjdXRpb25FbmdpbmVSZWYgZW5naW5lLCBDb2RlUmVmIGVudHJ5cG9pbnQpCiB7CiAgICAgbV9l
bmdpbmUgPSBlbmdpbmU7CkBAIC05Nyw2ICsxMDIsMTEgQEAgYm9vbCBKSVRDb2RlOjpjb250YWlu
cyh2b2lkKikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK0pJVENvZGU6OkNvZGVQdHIgSklUQ29k
ZTo6ZXhpdFRodW5rcygpCit7CisgICAgcmV0dXJuIG1fZXhpdFRodW5rcy5jb2RlKCk7Cit9CisK
IEpJVENvZGUqIEpJVENvZGU6OmZ0bCgpCiB7CiAgICAgcmV0dXJuIHRoaXM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJGVExM
TFZNSGVhZGVycy5oIgorI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKICNpbmNsdWRlICJKSVRDb2Rl
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQ4LDEyICs0OSwxNiBA
QCBwdWJsaWM6CiAgICAgc2l6ZV90IHNpemUoKTsKICAgICBib29sIGNvbnRhaW5zKHZvaWQqKTsK
ICAgICAKKyAgICB2b2lkIGluaXRpYWxpemVFeGl0VGh1bmtzKENvZGVSZWYpOwogICAgIHZvaWQg
aW5pdGlhbGl6ZUNvZGUoTExWTUV4ZWN1dGlvbkVuZ2luZVJlZiwgQ29kZVJlZiBlbnRyeXBvaW50
KTsKICAgICAKKyAgICBDb2RlUHRyIGV4aXRUaHVua3MoKTsKKyAgICAKICAgICBKSVRDb2RlKiBm
dGwoKTsKICAgICBERkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbigpOwogICAgIAogICAgIERGRzo6
Q29tbW9uRGF0YSBjb21tb247CisgICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4
aXQ7CiAgICAgCiBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBMTFZNIHNob3VsZCB1c2Ugb3VyIG93
biBKSVQgbWVtb3J5IGFsbG9jYXRvciwgYW5kIHdlIHNob3VsZG4ndCBoYXZlIHRvCkBAIC02MSw2
ICs2Niw3IEBAIHByaXZhdGU6CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTExMzYxOQogICAgIExMVk1FeGVjdXRpb25FbmdpbmVSZWYgbV9lbmdpbmU7CiAg
ICAgQ29kZVJlZiBtX2VudHJ5cG9pbnQ7CisgICAgQ29kZVJlZiBtX2V4aXRUaHVua3M7CiB9Owog
CiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTQ4MzE2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDEwICsyOCwxNSBAQAogCiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKKyNpbmNsdWRl
ICJDb2RlQmxvY2tXaXRoSklUVHlwZS5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0U3RhdGUuaCIK
ICNpbmNsdWRlICJGVExBYnN0cmFjdEhlYXBSZXBvc2l0b3J5LmgiCisjaW5jbHVkZSAiRlRMRXhp
dFRodW5rR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNs
dWRlICJGVExPdXRwdXQuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJGVExW
YWx1ZVNvdXJjZS5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKICNpbmNsdWRlICJPcGVyYXRp
b25zLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQxLDcgKzQ2LDcg
QEAgdXNpbmcgbmFtZXNwYWNlIERGRzsKIC8vIFVzaW5nIHRoaXMgaW5zdGVhZCBvZiB0eXBlQ2hl
Y2soKSBoZWxwcyB0byByZWR1Y2UgdGhlIGxvYWQgb24gTExWTSwgYnkgY3JlYXRpbmcKIC8vIHNp
Z25pZmljYW50bHkgbGVzcyBkZWFkIGNvZGUuCiAjZGVmaW5lIEZUTF9UWVBFX0NIRUNLKGxvd1Zh
bHVlLCBoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbikgZG8geyBc
Ci0gICAgICAgIExWYWx1ZSBfZnRjX2xvd1ZhbHVlID0gKGxvd1ZhbHVlKTsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZvcm1hdHRlZFZhbHVlIF9mdGNfbG93VmFsdWUg
PSAobG93VmFsdWUpOyAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAgIEVkZ2UgX2Z0Y19o
aWdoVmFsdWUgPSAoaGlnaFZhbHVlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIF9mdGNfdHlwZXNQYXNzZWRUaHJvdWdoID0gKHR5cGVzUGFz
c2VkVGhyb3VnaCk7ICBcCiAgICAgICAgIGlmICghbV9zdGF0ZS5uZWVkc1R5cGVDaGVjayhfZnRj
X2hpZ2hWYWx1ZSwgX2Z0Y190eXBlc1Bhc3NlZFRocm91Z2gpKSBcCkBAIC01Nyw2ICs2Miw5IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2xvY2Fsc0Jvb2xlYW4oT3BlcmFuZHNMaWtlLCBzdGF0ZS5n
cmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQogICAgICAgICAsIG1fbG9jYWxzMzIo
T3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1swXS0+dmFyaWFibGVzQXRIZWFkKQog
ICAgICAgICAsIG1fbG9jYWxzNjQoT3BlcmFuZHNMaWtlLCBzdGF0ZS5ncmFwaC5tX2Jsb2Nrc1sw
XS0+dmFyaWFibGVzQXRIZWFkKQorICAgICAgICAsIG1fdmFsdWVTb3VyY2VzKE9wZXJhbmRzTGlr
ZSwgc3RhdGUuZ3JhcGgubV9ibG9ja3NbMF0tPnZhcmlhYmxlc0F0SGVhZCkKKyAgICAgICAgLCBt
X2xhc3RTZXRPcGVyYW5kKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgICAg
ICwgbV9leGl0VGh1bmtHZW5lcmF0b3Ioc3RhdGUpCiAgICAgICAgICwgbV9zdGF0ZShzdGF0ZS5n
cmFwaCkKICAgICB7CiAgICAgfQpAQCAtODAsMjUgKzg4LDI0IEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1fbG9jYWxzNjRbaW5kZXhdID0gYnVpbGRBbGxvY2EobV9vdXQubV9idWlsZGVyLCBtX291
dC5pbnQ2NCk7CiAgICAgICAgIH0KICAgICAgICAgCisgICAgICAgIG1faW5pdGlhbGl6YXRpb24g
PSBhcHBlbmRCYXNpY0Jsb2NrKG1fZnRsU3RhdGUuZnVuY3Rpb24pOworICAgICAgICBtX2FyZ3Vt
ZW50Q2hlY2tzID0gYXBwZW5kQmFzaWNCbG9jayhtX2Z0bFN0YXRlLmZ1bmN0aW9uKTsKKwogICAg
ICAgICBtX2NhbGxGcmFtZSA9IG1fb3V0LnBhcmFtKDApOwogICAgICAgICBtX3RhZ1R5cGVOdW1i
ZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwogICAgICAgICBtX3RhZ01hc2sg
PSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOwogICAgICAgICAKLSAgICAgICAgbV9hYm9ydEZ1
bmN0aW9uID0gY29uc3RJbnRUb1B0cigKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKGFi
b3J0KSwKLSAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlw
ZSkpKTsKLSAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAg
ICAgICAgICAgIG1faGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQo
KTsKICAgICAgICAgICAgIGlmICghbV9oaWdoQmxvY2spCiAgICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBtX2Jsb2Nrcy5hZGQobV9oaWdoQmxvY2ssIGFwcGVuZEJhc2ljQmxv
Y2sobV9mdGxTdGF0ZS5mdW5jdGlvbikpOworICAgICAgICAgICAgbV9ibG9ja3MuYWRkKG1faGln
aEJsb2NrLCBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkJsb2NrICMiLCBibG9ja0luZGV4KSkpOwog
ICAgICAgICAgICAgYWRkRmx1c2hlZExvY2FsT3BSb290cygpOwogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKTsKLQotICAgICAgICBtX291dC5h
cHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQo
KSkpOworICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9hcmd1bWVudENoZWNrcywg
bV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkpKTsKIAogICAgICAgICB0cmFu
c2ZlckFuZENoZWNrQXJndW1lbnRzKCk7CiAgICAgICAgIApAQCAtMTA2LDYgKzExMyw5IEBAIHB1
YmxpYzoKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsg
YmxvY2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAg
ICAgICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAgIAorICAgICAgICAvLyBB
bmQgbm93IGNvbXBsZXRlIHRoZSBpbml0aWFsaXphdGlvbiBibG9jay4KKyAgICAgICAgbGlua09T
UkV4aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrcygpOwogCiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBtX2Z0bFN0YXRlLmR1bXBT
dGF0ZSgiYWZ0ZXIgbG93ZXJpbmciKTsKQEAgLTE1MSw4ICsxNjEsMTIgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKQogICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IFNldCB1cCB0aGUgT1NSIHN0b3J5IGhlcmUuCi0gICAgICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2MjMKKyAgICAgICAgLy8gV2hpbGUg
Y2hlY2tpbmcgYXJndW1lbnRzLCBldmVyeXRoaW5nIGlzIGluIHRoZSBzdGFjay4KKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV92YWx1ZVNvdXJjZXMuc2l6ZSgpOyBpLS07KQorICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CisgICAg
ICAgIAorICAgICAgICBtX2NvZGVPcmlnaW4gPSBDb2RlT3JpZ2luKDApOworICAgICAgICBtX25v
ZGUgPSAwOwogICAgICAgICAKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX2dyYXBoLm1f
Y29kZUJsb2NrLT5udW1QYXJhbWV0ZXJzKCk7ICsraSkgewogICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CkBAIC0xNzAsMjEgKzE4NCwyMSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewog
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKCF2YXJpYWJsZS0+c2hvdWxkVXNlRG91Ymxl
Rm9ybWF0KCkpOwogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRp
Y3Rpb24oKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNJbnQzMlNw
ZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0ZUJh
Y2t3YXJkKEJhZFR5cGUsIGpzVmFsdWUsIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOworICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBqc1ZhbHVlVmFsdWUo
anNWYWx1ZSksIG5vZGUsIGlzTm90SW50MzIoanNWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAg
ICBtX291dC5zZXQodW5ib3hJbnQzMihqc1ZhbHVlKSwgbV9sb2NhbHMzMi5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoaXNDZWxsU3Bl
Y3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFj
a3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwgaXNOb3RDZWxsKGpzVmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpz
VmFsdWUpLCBub2RlLCBpc05vdENlbGwoanNWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBt
X291dC5zZXQoanNWYWx1ZSwgbV9sb2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICBpZiAoaXNCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKLSAgICAg
ICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFja3dhcmQoQmFkVHlwZSwganNWYWx1ZSwgbm9kZSwg
aXNOb3RCb29sZWFuKGpzVmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXRlQmFj
a3dhcmQoQmFkVHlwZSwganNWYWx1ZVZhbHVlKGpzVmFsdWUpLCBub2RlLCBpc05vdEJvb2xlYW4o
anNWYWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBtX291dC5zZXQodW5ib3hCb29sZWFuKGpz
VmFsdWUpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkpOwogICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMTYsMzMg
KzIzMCwzMSBAQCBwcml2YXRlOgogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVhc2llciB0byBy
ZWFkLgogICAgICAgICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbV9uZXh0TG93QmxvY2spOwog
ICAgICAgICAKLSAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCB0cmFjayB0aGUgT1NSIHNpdHVh
dGlvbiBoZXJlLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTEzNjIzCisgICAgICAgIGluaXRpYWxpemVPU1JFeGl0U3RhdGVGb3JCbG9jaygpOwog
ICAgICAgICAKICAgICAgICAgbV9pbnQzMlZhbHVlcy5jbGVhcigpOwogICAgICAgICBtX2pzVmFs
dWVWYWx1ZXMuY2xlYXIoKTsKICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmNsZWFyKCk7CiAgICAg
ICAgIG1fc3RvcmFnZVZhbHVlcy5jbGVhcigpOworICAgICAgICBtX3RpbWVUb0xpdmUuY2xlYXIo
KTsKICAgICAgICAgCiAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgbV9zdGF0ZS5i
ZWdpbkJhc2ljQmxvY2sobV9oaWdoQmxvY2spOwogICAgICAgICAKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBub2RlSW5kZXggPSAwOyBub2RlSW5kZXggPCBtX2hpZ2hCbG9jay0+c2l6ZSgpOyArK25v
ZGVJbmRleCkKLSAgICAgICAgICAgIGNvbXBpbGVOb2RlKG5vZGVJbmRleCk7CisgICAgICAgIGZv
ciAobV9ub2RlSW5kZXggPSAwOyBtX25vZGVJbmRleCA8IG1faGlnaEJsb2NrLT5zaXplKCk7ICsr
bV9ub2RlSW5kZXgpCisgICAgICAgICAgICBjb21waWxlTm9kZShtX25vZGVJbmRleCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgY29tcGlsZU5vZGUodW5zaWduZWQgbm9kZUluZGV4KQogICAgIHsK
ICAgICAgICAgbV9ub2RlID0gbV9oaWdoQmxvY2stPmF0KG5vZGVJbmRleCk7CisgICAgICAgIG1f
Y29kZU9yaWdpbiA9IG1fbm9kZS0+Y29kZU9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGlmICh2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCiAgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmlu
ZyAiLCBtX25vZGUsICJcbiIpOwogICAgICAgICAKICAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRl
RWZmZWN0cyA9IG1fc3RhdGUuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKICAgICAgICAgCi0gICAg
ICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQotICAgICAgICAgICAgcmV0dXJuOyAv
LyBGSVhNRTogSW1wbGVtZW50IE9TUiBtYWdpYyBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCi0gICAgICAgIAogICAgICAgICBtX2RpcmVjdGlvbiA9
IChtX25vZGUtPmZsYWdzKCkgJiBOb2RlRXhpdHNGb3J3YXJkKSA/IEZvcndhcmRTcGVjdWxhdGlv
biA6IEJhY2t3YXJkU3BlY3VsYXRpb247CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1fbm9k
ZS0+b3AoKSkgewpAQCAtMjU4LDYgKzI3MCwxMiBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFNl
dExvY2FsOgogICAgICAgICAgICAgY29tcGlsZVNldExvY2FsKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNb3ZIaW50OgorICAgICAgICAgICAgY29tcGlsZU1vdkhpbnQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFpvbWJpZUhpbnQ6CisgICAgICAgICAg
ICBjb21waWxlWm9tYmllSGludCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
TW92SGludEFuZENoZWNrOgogICAgICAgICAgICAgY29tcGlsZU1vdkhpbnRBbmRDaGVjaygpOwog
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTIsNiArMzcwLDEyIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICAKKyAgICAgICAgaWYgKG1fbm9kZS0+c2hv
dWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgIERGR19OT0RFX0RPX1RPX0NISUxEUkVOKG1fZ3Jh
cGgsIG1fbm9kZSwgdXNlKTsKKyAgICAgICAgCisgICAgICAgIGlmIChtX25vZGUtPmhhc1Jlc3Vs
dCgpKQorICAgICAgICAgICAgbV90aW1lVG9MaXZlLmFkZChtX25vZGUsIG1fbm9kZS0+YWRqdXN0
ZWRSZWZDb3VudCgpKTsKKyAgICAgICAgCiAgICAgICAgIGlmIChzaG91bGRFeGVjdXRlRWZmZWN0
cykKICAgICAgICAgICAgIG1fc3RhdGUuZXhlY3V0ZUVmZmVjdHMobm9kZUluZGV4KTsKICAgICB9
CkBAIC0zNjgsOCArMzkyLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlR2V0
TG9jYWwoKQogICAgIHsKKyAgICAgICAgLy8gR2V0TG9jYWwgaXMgb25lIG9mIHRoZSBmZXcgbm9k
ZXMgdGhhdCBtYXkgYmUgbGVmdCBiZWhpbmQsIHdpdGggIXNob3VsZEdlbmVyYXRlKCkuCisgICAg
ICAgIGlmICghbV9ub2RlLT5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAKICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZSA9IG1fbm9kZS0+
dmFyaWFibGVBY2Nlc3NEYXRhKCk7Ci0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24g
PSB2YXJpYWJsZS0+cHJlZGljdGlvbigpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gdmFyaWFibGUtPmFyZ3VtZW50QXdhcmVQcmVkaWN0aW9uKCk7CiAgICAgICAgIEFic3Ry
YWN0VmFsdWUmIHZhbHVlID0gbV9zdGF0ZS52YXJpYWJsZXMoKS5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7
CkBAIC00MjAsMTMgKzQ0OCwxMiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZVNl
dExvY2FsKCkKICAgICB7CisgICAgICAgIG9ic2VydmVNb3ZIaW50KG1fbm9kZSk7CisgICAgICAg
IAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlID0gbV9ub2RlLT52YXJpYWJs
ZUFjY2Vzc0RhdGEoKTsKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IHZhcmlh
YmxlLT5wcmVkaWN0aW9uKCk7CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2
YXJpYWJsZS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgYm9vbCBuZWVkc0Zs
dXNoaW5nID0gbV9mbHVzaGVkTG9jYWxPcHMuY29udGFpbnMobV9ub2RlKTsKICAgICAgICAgCi0g
ICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4KLSAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwotICAgICAgICAK
ICAgICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgewogICAgICAg
ICAgICAgaWYgKHZhcmlhYmxlLT5zaG91bGRVc2VEb3VibGVGb3JtYXQoKSkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgZG91YmxlcyBpbiBGVEwuCkBAIC00MzgsMjEgKzQ2
NSwyNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGlzSW50MzJTcGVjdWxhdGlvbihwcmVk
aWN0aW9uKSkgewogICAgICAgICAgICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpOwogICAgICAgICAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9sb2NhbHMz
Mi5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgICAgICAgICAgaWYgKG5lZWRz
Rmx1c2hpbmcpCisgICAgICAgICAgICAgICAgaWYgKG5lZWRzRmx1c2hpbmcpIHsKICAgICAgICAg
ICAgICAgICAgICAgbV9vdXQuc3RvcmUzMih2YWx1ZSwgcGF5bG9hZEZvcih2YXJpYWJsZS0+bG9j
YWwoKSkpOworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlh
YmxlLT5sb2NhbCgpKSA9IFZhbHVlU291cmNlKEludDMySW5KU1N0YWNrKTsKKyAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGlzQ2VsbFNwZWN1bGF0aW9uKHByZWRpY3Rpb24pKSB7CiAgICAgICAgICAgICAgICAg
TFZhbHVlIHZhbHVlID0gbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAg
ICBtX291dC5zZXQodmFsdWUsIG1fbG9jYWxzNjQub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkp
OwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgICAgIGlm
IChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQodmFs
dWUsIGFkZHJlc3NGb3IodmFyaWFibGUtPmxvY2FsKCkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShW
YWx1ZUluSlNTdGFjayk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlvbihw
cmVkaWN0aW9uKSkgewogICAgICAgICAgICAgICAgIG1fb3V0LnNldChsb3dCb29sZWFuKG1fbm9k
ZS0+Y2hpbGQxKCkpLCBtX2xvY2Fsc0Jvb2xlYW4ub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkp
OwotICAgICAgICAgICAgICAgIGlmIChuZWVkc0ZsdXNoaW5nKQorICAgICAgICAgICAgICAgIGlm
IChuZWVkc0ZsdXNoaW5nKSB7CiAgICAgICAgICAgICAgICAgICAgIG1fb3V0LnN0b3JlNjQobG93
SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkp
OworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlcy5vcGVyYW5kKHZhcmlhYmxlLT5s
b2NhbCgpKSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC00
NjAsMTggKzQ5MywzMiBAQCBwcml2YXRlOgogICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1Zh
bHVlKG1fbm9kZS0+Y2hpbGQxKCkpOwogICAgICAgICBpZiAodmFyaWFibGUtPmlzQ2FwdHVyZWQo
KSkgewogICAgICAgICAgICAgbV9vdXQuc3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJs
ZS0+bG9jYWwoKSkpOworICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJs
ZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJjZShWYWx1ZUluSlNTdGFjayk7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIG1fb3V0LnNldCh2YWx1ZSwgbV9s
b2NhbHM2NC5vcGVyYW5kKHZhcmlhYmxlLT5sb2NhbCgpKSk7Ci0gICAgICAgIGlmIChuZWVkc0Zs
dXNoaW5nKQorICAgICAgICBpZiAobmVlZHNGbHVzaGluZykgewogICAgICAgICAgICAgbV9vdXQu
c3RvcmU2NCh2YWx1ZSwgYWRkcmVzc0Zvcih2YXJpYWJsZS0+bG9jYWwoKSkpOworICAgICAgICAg
ICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZCh2YXJpYWJsZS0+bG9jYWwoKSkgPSBWYWx1ZVNvdXJj
ZShWYWx1ZUluSlNTdGFjayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjb21w
aWxlTW92SGludCgpCisgICAgeworICAgICAgICBvYnNlcnZlTW92SGludChtX25vZGUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVab21iaWVIaW50KCkKKyAgICB7CisgICAgICAgIFZh
cmlhYmxlQWNjZXNzRGF0YSogZGF0YSA9IG1fbm9kZS0+dmFyaWFibGVBY2Nlc3NEYXRhKCk7Cisg
ICAgICAgIG1fbGFzdFNldE9wZXJhbmQgPSBkYXRhLT5sb2NhbCgpOworICAgICAgICBtX3ZhbHVl
U291cmNlcy5vcGVyYW5kKGRhdGEtPmxvY2FsKCkpID0gVmFsdWVTb3VyY2UoU291cmNlSXNEZWFk
KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTW92SGludEFuZENoZWNrKCkKICAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgdGhlIE1vdkhpbnQgZm9yIE9TUi4KLSAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAg
ICBvYnNlcnZlTW92SGludChtX25vZGUpOwogICAgICAgICBzcGVjdWxhdGUobV9ub2RlLT5jaGls
ZDEoKSk7CiAgICAgfQogICAgIApAQCAtNTAwLDcgKzU0Nyw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5h
ZGRXaXRoT3ZlcmZsb3czMihsZWZ0LCByaWdodCk7Ci0gICAgICAgICAgICBzcGVjdWxhdGUoT3Zl
cmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKKyAgICAgICAgICAg
IHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgpLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVz
dWx0LCAxKSk7CiAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmV4
dHJhY3RWYWx1ZShyZXN1bHQsIDApKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CkBA
IC01MjQsNyArNTcxLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LnN1YldpdGhPdmVyZmxvdzMyKGxlZnQs
IHJpZ2h0KTsKLSAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgMCwgMCwgbV9vdXQuZXh0
cmFjdFZhbHVlKHJlc3VsdCwgMSkpOworICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJmbG93LCBu
b1ZhbHVlKCksIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKICAgICAgICAgICAg
IG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTU0NywxNyArNTk0LDE3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubXVsKGxlZnQsIHJpZ2h0KTsK
ICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3Vs
dCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jl
c3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShPdmVyZmxvdywgbm9WYWx1ZSgp
LCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKICAgICAgICAgICAg
ICAgICByZXN1bHQgPSBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDApOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAoIW5vZGVDYW5JZ25vcmVO
ZWdhdGl2ZVplcm8obV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkgewotICAgICAgICAgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3QmxvY2soKTsKLSAgICAgICAgICAgICAg
ICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAg
ICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0
aE11bCBzbG93IGNhc2UiKSk7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aE11bCBjb250aW51YXRpb24iKSk7CiAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBt
X291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgICAgICAgICBz
cGVjdWxhdGUoTmVnYXRpdmVaZXJvLCAwLCAwLCBtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5p
bnQzMlplcm8pKTsKLSAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCAwLCAw
LCBtX291dC5sZXNzVGhhbihyaWdodCwgbV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAg
ICAgc3BlY3VsYXRlKE5lZ2F0aXZlWmVybywgbm9WYWx1ZSgpLCAwLCBtX291dC5sZXNzVGhhbihs
ZWZ0LCBtX291dC5pbnQzMlplcm8pKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRp
dmVaZXJvLCBub1ZhbHVlKCksIDAsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQzMlpl
cm8pKTsKICAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAg
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAg
ICAgICB9CkBAIC01ODUsNyArNjMyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAvLyBX
ZSBkb24ndCBoYXZlIGEgbmVnYXRlLXdpdGgtb3ZlcmZsb3cgaW50cmluc2ljLiBIb3BlZnVsbHkg
dGhpcwogICAgICAgICAgICAgICAgIC8vIGRvZXMgdGhlIHRyaWNrLCB0aG91Z2guCiAgICAgICAg
ICAgICAgICAgTFZhbHVlIG92ZXJmbG93UmVzdWx0ID0gbV9vdXQuc3ViV2l0aE92ZXJmbG93MzIo
bV9vdXQuaW50MzJaZXJvLCB2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKE92ZXJm
bG93LCAwLCAwLCBtX291dC5leHRyYWN0VmFsdWUob3ZlcmZsb3dSZXN1bHQsIDEpKTsKKyAgICAg
ICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIG5vVmFsdWUoKSwgMCwgbV9vdXQuZXh0cmFj
dFZhbHVlKG92ZXJmbG93UmVzdWx0LCAxKSk7CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9v
dXQuZXh0cmFjdFZhbHVlKG92ZXJmbG93UmVzdWx0LCAwKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIApAQCAtNjU2LDcgKzcwMyw3IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBM
VmFsdWUgdmFsdWUgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgc3BlY3Vs
YXRlRm9yd2FyZCgKLSAgICAgICAgICAgIE92ZXJmbG93LCAwLCAwLCBtX291dC5sZXNzVGhhbih2
YWx1ZSwgbV9vdXQuaW50MzJaZXJvKSwKKyAgICAgICAgICAgIE92ZXJmbG93LCBub1ZhbHVlKCks
IDAsIG1fb3V0Lmxlc3NUaGFuKHZhbHVlLCBtX291dC5pbnQzMlplcm8pLAogICAgICAgICAgICAg
Rm9ybWF0dGVkVmFsdWUoVmFsdWVGb3JtYXRVSW50MzIsIHZhbHVlKSk7CiAgICAgICAgIG1faW50
MzJWYWx1ZXMuYWRkKG1fbm9kZSwgdmFsdWUpOwogICAgIH0KQEAgLTY3NSwxNiArNzIyLDE2IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpZiAobV9ub2RlLT5zdHJ1Y3R1cmVTZXQoKS5z
aXplKCkgPT0gMSkgewogICAgICAgICAgICAgc3BlY3VsYXRlKAotICAgICAgICAgICAgICAgIGV4
aXRLaW5kLCBjZWxsLCAwLAorICAgICAgICAgICAgICAgIGV4aXRLaW5kLCBqc1ZhbHVlVmFsdWUo
Y2VsbCksIDAsCiAgICAgICAgICAgICAgICAgbV9vdXQubm90RXF1YWwoc3RydWN0dXJlLCB3ZWFr
UG9pbnRlcihtX25vZGUtPnN0cnVjdHVyZVNldCgpWzBdKSkpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24g
PSBtX291dC5uZXdCbG9jaygpOworICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIkNoZWNrU3RydWN0dXJlIGNvbnRpbnVhdGlvbiIpKTsKICAg
ICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuaW5zZXJ0TmV3Qmxv
Y2tzQmVmb3JlKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBtX25vZGUtPnN0cnVjdHVyZVNldCgpLnNpemUoKSAtIDE7ICsraSkgewotICAgICAgICAgICAg
TEJhc2ljQmxvY2sgbmV4dFN0cnVjdHVyZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAg
ICBMQmFzaWNCbG9jayBuZXh0U3RydWN0dXJlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDaGVj
a1N0cnVjdHVyZSBuZXh0U3RydWN0dXJlIikpOwogICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAog
ICAgICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9ub2Rl
LT5zdHJ1Y3R1cmVTZXQoKVtpXSkpLAogICAgICAgICAgICAgICAgIGNvbnRpbnVhdGlvbiwgbmV4
dFN0cnVjdHVyZSk7CkBAIC02OTIsOSArNzM5LDEwIEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHNwZWN1bGF0ZSgKLSAgICAgICAgICAgIGV4aXRLaW5kLCBjZWxsLCAw
LAorICAgICAgICAgICAgZXhpdEtpbmQsIGpzVmFsdWVWYWx1ZShjZWxsKSwgMCwKICAgICAgICAg
ICAgIG1fb3V0Lm5vdEVxdWFsKHN0cnVjdHVyZSwgd2Vha1BvaW50ZXIobV9ub2RlLT5zdHJ1Y3R1
cmVTZXQoKS5sYXN0KCkpKSk7CiAgICAgICAgIAorICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwog
ICAgIH0KICAgICAKQEAgLTc1NSw3ICs4MDMsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFy
cmF5OjpDb250aWd1b3VzOiB7CiAgICAgICAgICAgICBpZiAobV9ub2RlLT5hcnJheU1vZGUoKS5p
c0luQm91bmRzKCkpIHsKICAgICAgICAgICAgICAgICBzcGVjdWxhdGUoCi0gICAgICAgICAgICAg
ICAgICAgIE91dE9mQm91bmRzLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICBPdXRPZkJvdW5k
cywgbm9WYWx1ZSgpLCAwLAogICAgICAgICAgICAgICAgICAgICBtX291dC5hYm92ZU9yRXF1YWwo
CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwgbV9vdXQubG9hZDMyKHN0b3JhZ2UsIG1f
aGVhcHMuQnV0dGVyZmx5X3B1YmxpY0xlbmd0aCkpKTsKICAgICAgICAgICAgICAgICAKQEAgLTc2
NCw3ICs4MTIsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9oZWFwcy5p
bmRleGVkSW50MzJQcm9wZXJ0aWVzIDogbV9oZWFwcy5pbmRleGVkQ29udGlndW91c1Byb3BlcnRp
ZXMsCiAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UsIG1fb3V0Lnplcm9FeHQoaW5kZXgsIG1f
b3V0LmludFB0ciksCiAgICAgICAgICAgICAgICAgICAgIG1fc3RhdGUuZm9yTm9kZShtX25vZGUt
PmNoaWxkMigpKS5tX3ZhbHVlKSk7Ci0gICAgICAgICAgICAgICAgc3BlY3VsYXRlKExvYWRGcm9t
SG9sZSwgMCwgMCwgbV9vdXQuaXNaZXJvNjQocmVzdWx0KSk7CisgICAgICAgICAgICAgICAgc3Bl
Y3VsYXRlKExvYWRGcm9tSG9sZSwgbm9WYWx1ZSgpLCAwLCBtX291dC5pc1plcm82NChyZXN1bHQp
KTsKICAgICAgICAgICAgICAgICBtX2pzVmFsdWVWYWx1ZXMuYWRkKG1fbm9kZSwgcmVzdWx0KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTg2NSw2MCArOTEzLDY5
IEBAIHByaXZhdGU6CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgdm9pZCBzcGVjdWxhdGVC
YWNrd2FyZChFeGl0S2luZCwgTFZhbHVlLCBOb2RlKiwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisg
ICAgdm9pZCBzcGVjdWxhdGVCYWNrd2FyZCgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0
dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24p
CiAgICAgewotICAgICAgICBMQmFzaWNCbG9jayBmYWlsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7
Ci0gICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7Ci0g
ICAgICAgIAotICAgICAgICBtX291dC5icmFuY2goZmFpbENvbmRpdGlvbiwgZmFpbENhc2UsIGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5k
VG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
T1NSIGV4aXQuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMTM2MjMKLSAgICAgICAgbV9vdXQuY2FsbChtX2Fib3J0RnVuY3Rpb24pOwotICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgYXBwZW5kT1NSRXhpdCgKKyAgICAgICAgICAgIGtpbmQs
IGxvd1ZhbHVlLCBoaWdoVmFsdWUsIGZhaWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24s
IEZvcm1hdHRlZFZhbHVlKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHNwZWN1bGF0ZUZvcndh
cmQoRXhpdEtpbmQga2luZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1
ZSBmYWlsQ29uZGl0aW9uLCBjb25zdCBGb3JtYXR0ZWRWYWx1ZSYpCisgICAgdm9pZCBzcGVjdWxh
dGVGb3J3YXJkKAorICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1
ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbiwKKyAgICAgICAgY29uc3Qg
Rm9ybWF0dGVkVmFsdWUmIHJlY292ZXJ5KQogICAgIHsKLSAgICAgICAgc3BlY3VsYXRlQmFja3dh
cmQoa2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIC8v
IEZJWE1FOiBJbXBsZW1lbnQgcmV3aXJpbmcgb2YgT1NSIGV4aXQgdG8gZm9yd2FyZC4KLSAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAg
ICAgICBhcHBlbmRPU1JFeGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1
ZSwgZmFpbENvbmRpdGlvbiwgRm9yd2FyZFNwZWN1bGF0aW9uLCByZWNvdmVyeSk7CiAgICAgfQog
ICAgIAotICAgIHZvaWQgc3BlY3VsYXRlKEV4aXRLaW5kIGtpbmQsIExWYWx1ZSBsb3dWYWx1ZSwg
Tm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIHNwZWN1bGF0
ZSgKKyAgICAgICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUq
IGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewotICAgICAgICBzcGVjdWxh
dGVCYWNrd2FyZChraW5kLCBsb3dWYWx1ZSwgaGlnaFZhbHVlLCBmYWlsQ29uZGl0aW9uKTsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyB0aGUgT1NSIGV4aXQgdG8gZm9yd2Fy
ZCwgaWYgbV9kaXJlY3Rpb24gPT0gRm9yd2FyZERpcmVjdGlvbi4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBhcHBlbmRP
U1JFeGl0KAorICAgICAgICAgICAga2luZCwgbG93VmFsdWUsIGhpZ2hWYWx1ZSwgZmFpbENvbmRp
dGlvbiwgbV9kaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVlKCkpOwogICAgIH0KICAgICAKICAgICB2
b2lkIHRlcm1pbmF0ZShFeGl0S2luZCBraW5kKQogICAgIHsKLSAgICAgICAgc3BlY3VsYXRlKGtp
bmQsIDAsIDAsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgc3BlY3VsYXRlKGtpbmQsIG5v
VmFsdWUoKSwgMCwgbV9vdXQuYm9vbGVhblRydWUpOwogICAgIH0KICAgICAKLSAgICB2b2lkIGJh
Y2t3YXJkVHlwZUNoZWNrKExWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0
ZWRUeXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwgTFZhbHVlIGZhaWxDb25kaXRpb24pCisgICAgdm9p
ZCBiYWNrd2FyZFR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVk
Z2UgaGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAg
IExWYWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgaWYgKCFtX3N0YXRlLm5lZWRz
VHlwZUNoZWNrKGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgQVNTRVJUKG1heUhhdmVUeXBlQ2hlY2soaGlnaFZhbHVlLnVzZUtpbmQo
KSkpOwotICAgICAgICBzcGVjdWxhdGVCYWNrd2FyZChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZh
bHVlLm5vZGUoKSwgZmFpbENvbmRpdGlvbik7Ci0gICAgICAgIG1fc3RhdGUuZm9yTm9kZShoaWdo
VmFsdWUpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOworICAgICAgICBhcHBlbmRUeXBlQ2hl
Y2soCisgICAgICAgICAgICBsb3dWYWx1ZSwgaGlnaFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gs
IGZhaWxDb25kaXRpb24sIEJhY2t3YXJkU3BlY3VsYXRpb24sCisgICAgICAgICAgICBGb3JtYXR0
ZWRWYWx1ZSgpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmb3J3YXJkVHlwZUNoZWNrKAorICAg
ICAgICBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgRWRnZSBoaWdoVmFsdWUsIFNwZWN1bGF0ZWRU
eXBlIHR5cGVzUGFzc2VkVGhyb3VnaCwKKyAgICAgICAgTFZhbHVlIGZhaWxDb25kaXRpb24pCisg
ICAgeworICAgICAgICBhcHBlbmRUeXBlQ2hlY2soCisgICAgICAgICAgICBsb3dWYWx1ZSwgaGln
aFZhbHVlLCB0eXBlc1Bhc3NlZFRocm91Z2gsIGZhaWxDb25kaXRpb24sIEZvcndhcmRTcGVjdWxh
dGlvbiwKKyAgICAgICAgICAgIEZvcm1hdHRlZFZhbHVlKCkpOwogICAgIH0KICAgICAKLSAgICB2
b2lkIGZvcndhcmRUeXBlQ2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3Bl
Y3VsYXRlZFR5cGUgdHlwZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAg
ICB2b2lkIHR5cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2Ug
aGlnaFZhbHVlLCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExW
YWx1ZSBmYWlsQ29uZGl0aW9uKQogICAgIHsKLSAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93
VmFsdWUsIGhpZ2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKLSAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJk
LgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEz
NjIzCisgICAgICAgIGFwcGVuZFR5cGVDaGVjaygKKyAgICAgICAgICAgIGxvd1ZhbHVlLCBoaWdo
VmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCwgZmFpbENvbmRpdGlvbiwgbV9kaXJlY3Rpb24sCisg
ICAgICAgICAgICBGb3JtYXR0ZWRWYWx1ZSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCB0eXBl
Q2hlY2soTFZhbHVlIGxvd1ZhbHVlLCBFZGdlIGhpZ2hWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgdHlw
ZXNQYXNzZWRUaHJvdWdoLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKKyAgICB2b2lkIGFwcGVuZFR5
cGVDaGVjaygKKyAgICAgICAgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIEVkZ2UgaGlnaFZhbHVl
LCBTcGVjdWxhdGVkVHlwZSB0eXBlc1Bhc3NlZFRocm91Z2gsCisgICAgICAgIExWYWx1ZSBmYWls
Q29uZGl0aW9uLCBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24sIEZvcm1hdHRlZFZhbHVl
IHJlY292ZXJ5KQogICAgIHsKLSAgICAgICAgYmFja3dhcmRUeXBlQ2hlY2sobG93VmFsdWUsIGhp
Z2hWYWx1ZSwgdHlwZXNQYXNzZWRUaHJvdWdoLCBmYWlsQ29uZGl0aW9uKTsKLSAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCByZXdpcmluZyBvZiBPU1IgZXhpdCB0byBmb3J3YXJkLCBpZiBtX2Rp
cmVjdGlvbiA9PSBGb3J3YXJkRGlyZWN0aW9uLgotICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEzNjIzCisgICAgICAgIGlmICghbV9zdGF0ZS5uZWVk
c1R5cGVDaGVjayhoaWdoVmFsdWUsIHR5cGVzUGFzc2VkVGhyb3VnaCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIEFTU0VSVChtYXlIYXZlVHlwZUNoZWNrKGhpZ2hWYWx1ZS51c2VLaW5k
KCkpKTsKKyAgICAgICAgYXBwZW5kT1NSRXhpdChCYWRUeXBlLCBsb3dWYWx1ZSwgaGlnaFZhbHVl
Lm5vZGUoKSwgZmFpbENvbmRpdGlvbiwgZGlyZWN0aW9uLCByZWNvdmVyeSk7CisgICAgICAgIG1f
c3RhdGUuZm9yTm9kZShoaWdoVmFsdWUpLmZpbHRlcih0eXBlc1Bhc3NlZFRocm91Z2gpOwogICAg
IH0KICAgICAKICAgICBMVmFsdWUgbG93SW50MzIoRWRnZSBlZGdlLCBPcGVyYW5kU3BlY3VsYXRp
b25Nb2RlIG1vZGUgPSBBdXRvbWF0aWNPcGVyYW5kU3BlY3VsYXRpb24pCkBAIC05MjksNyArOTg2
LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIAogICAg
ICAgICBpZiAoTFZhbHVlIGJveGVkUmVzdWx0ID0gbV9qc1ZhbHVlVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSkpIHsKLSAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKGJveGVkUmVzdWx0LCBlZGdlLCBT
cGVjSW50MzIsIGlzTm90SW50MzIoYm94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBF
X0NIRUNLKAorICAgICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZShib3hlZFJlc3VsdCksIGVkZ2Us
IFNwZWNJbnQzMiwgaXNOb3RJbnQzMihib3hlZFJlc3VsdCkpOwogICAgICAgICAgICAgTFZhbHVl
IHJlc3VsdCA9IHVuYm94SW50MzIoYm94ZWRSZXN1bHQpOwogICAgICAgICAgICAgbV9pbnQzMlZh
bHVlcy5hZGQoZWRnZS5ub2RlKCksIHJlc3VsdCk7CiAgICAgICAgICAgICByZXR1cm4gcmVzdWx0
OwpAQCAtOTQ1LDcgKzEwMDMsOCBAQCBwcml2YXRlOgogICAgICAgICBBU1NFUlRfVU5VU0VEKG1v
ZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGlzQ2VsbChlZGdlLnVzZUtp
bmQoKSkpOwogICAgICAgICAKICAgICAgICAgaWYgKExWYWx1ZSB1bmNoZWNrZWRSZXN1bHQgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewotICAgICAgICAgICAgRlRMX1RZUEVf
Q0hFQ0sodW5jaGVja2VkUmVzdWx0LCBlZGdlLCBTcGVjQ2VsbCwgaXNOb3RDZWxsKHVuY2hlY2tl
ZFJlc3VsdCkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCisgICAgICAgICAgICAgICAg
anNWYWx1ZVZhbHVlKHVuY2hlY2tlZFJlc3VsdCksIGVkZ2UsIFNwZWNDZWxsLCBpc05vdENlbGwo
dW5jaGVja2VkUmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm4gdW5jaGVja2VkUmVzdWx0Owog
ICAgICAgICB9CiAgICAgICAgIApAQCAtOTcxLDcgKzEwMzAsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgCiAgICAgICAgIGlmIChMVmFsdWUgdW5ib3hl
ZFJlc3VsdCA9IG1fanNWYWx1ZVZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpKSB7Ci0gICAgICAgICAg
ICBGVExfVFlQRV9DSEVDSyh1bmJveGVkUmVzdWx0LCBlZGdlLCBTcGVjQm9vbGVhbiwgaXNOb3RC
b29sZWFuKHVuYm94ZWRSZXN1bHQpKTsKKyAgICAgICAgICAgIEZUTF9UWVBFX0NIRUNLKAorICAg
ICAgICAgICAgICAgIGpzVmFsdWVWYWx1ZSh1bmJveGVkUmVzdWx0KSwgZWRnZSwgU3BlY0Jvb2xl
YW4sIGlzTm90Qm9vbGVhbih1bmJveGVkUmVzdWx0KSk7CiAgICAgICAgICAgICBMVmFsdWUgcmVz
dWx0ID0gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1bHQpOwogICAgICAgICAgICAgbV9ib29sZWFu
VmFsdWVzLmFkZChlZGdlLm5vZGUoKSwgcmVzdWx0KTsKICAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CkBAIC0xMDk0LDcgKzExNTQsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc3BlY3VsYXRlT2Jq
ZWN0KEVkZ2UgZWRnZSwgTFZhbHVlIGNlbGwpCiAgICAgewogICAgICAgICBGVExfVFlQRV9DSEVD
SygKLSAgICAgICAgICAgIGNlbGwsIGVkZ2UsIFNwZWNPYmplY3QsCisgICAgICAgICAgICBqc1Zh
bHVlVmFsdWUoY2VsbCksIGVkZ2UsIFNwZWNPYmplY3QsCiAgICAgICAgICAgICBtX291dC5lcXVh
bCgKICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKGNlbGwsIG1faGVhcHMuSlNDZWxsX3N0
cnVjdHVyZSksCiAgICAgICAgICAgICAgICAgbV9vdXQuY29uc3RJbnRQdHIoZ2xvYmFsRGF0YSgp
LnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkpKTsKQEAgLTExMDUsNiArMTE2NSwzODAgQEAgcHJpdmF0
ZToKICAgICAgICAgc3BlY3VsYXRlT2JqZWN0KGVkZ2UsIGxvd0NlbGwoZWRnZSkpOwogICAgIH0K
ICAgICAKKyAgICBib29sIGlzTGl2ZShOb2RlKiBub2RlKQorICAgIHsKKyAgICAgICAgSGFzaE1h
cDxOb2RlKiwgdW5zaWduZWQ+OjppdGVyYXRvciBpdGVyID0gbV90aW1lVG9MaXZlLmZpbmQobm9k
ZSk7CisgICAgICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7CisgICAgICAg
IHJldHVybiAhIWl0ZXItPnZhbHVlOworICAgIH0KKyAgICAKKyAgICB2b2lkIHVzZShFZGdlIGVk
Z2UpCisgICAgeworICAgICAgICBpZiAoIWVkZ2UtPmhhc1Jlc3VsdCgpKSB7CisgICAgICAgICAg
ICBBU1NFUlQoZWRnZS0+aGFzVmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25l
ZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuZmluZChlZGdlLm5vZGUoKSk7CisgICAg
ICAgIEFTU0VSVChpdGVyICE9IG1fdGltZVRvTGl2ZS5lbmQoKSk7CisgICAgICAgIEFTU0VSVChp
dGVyLT52YWx1ZSk7CisgICAgICAgIGl0ZXItPnZhbHVlLS07CisgICAgfQorICAgIAorICAgIC8v
IFdyYXBwZXIgdXNlZCBvbmx5IGZvciBERkdfTk9ERV9ET19UT19DSElMRFJFTgorICAgIHZvaWQg
dXNlKE5vZGUqLCBFZGdlIGVkZ2UpCisgICAgeworICAgICAgICB1c2UoZWRnZSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgaW5pdGlhbGl6ZU9TUkV4aXRTdGF0ZUZvckJsb2NrKCkKKyAgICB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1fdmFsdWVTb3VyY2VzLnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgTm9kZSogbm9kZSA9IG1faGlnaEJsb2NrLT52YXJpYWJsZXNBdEhlYWRbaV07
CisgICAgICAgICAgICBpZiAoIW5vZGUpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNl
c1tpXSA9IFZhbHVlU291cmNlKFNvdXJjZUlzRGVhZCk7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGUgPSBub2RlLT52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKKyAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSB2YXJpYWJsZS0+YXJndW1lbnRBd2FyZVBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxlLT5pc0Fy
Z3VtZW50c0FsaWFzKCkpIHsKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZh
bHVlU291cmNlKEFyZ3VtZW50c1NvdXJjZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbm9kZS0+c2hvdWxk
R2VuZXJhdGUoKSkgeworICAgICAgICAgICAgICAgIG1fdmFsdWVTb3VyY2VzW2ldID0gVmFsdWVT
b3VyY2UoU291cmNlSXNEZWFkKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG1fZmx1c2hlZExvY2FsT3BzLmNv
bnRhaW5zKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyB2YWx1ZSB3aWxsIGhhdmUg
YmVlbiBmbHVzaGVkIHRvIHRoZSBKU1N0YWNrIGluIHNvbWUgZm9ybSBvcgorICAgICAgICAgICAg
ICAgIC8vIGFub3RoZXIuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHZh
cmlhYmxlLT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAodmFyaWFibGUtPnNob3VsZFVzZURvdWJsZUZvcm1hdCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9IFZhbHVlU291cmNlKERvdWJsZUluSlNTdGFjayk7
CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluSlNTdGFjayk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tp
XSA9IFZhbHVlU291cmNlKFZhbHVlSW5KU1N0YWNrKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZhcmlhYmxl
LT5zaG91bGRVbmJveElmUG9zc2libGUoKSkgeworICAgICAgICAgICAgICAgIGlmICh2YXJpYWJs
ZS0+c2hvdWxkVXNlRG91YmxlRm9ybWF0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV92YWx1
ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24ocHJlZGljdGlvbikpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShJbnQzMkluTG9j
YWxzKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIChpc0Jvb2xlYW5TcGVjdWxhdGlv
bihwcmVkaWN0aW9uKSkgeworICAgICAgICAgICAgICAgICAgICBtX3ZhbHVlU291cmNlc1tpXSA9
IFZhbHVlU291cmNlKEJvb2xlYW5JbkxvY2Fscyk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbV92YWx1ZVNvdXJjZXNbaV0gPSBWYWx1ZVNvdXJjZShWYWx1ZUluTG9jYWxzKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFwcGVuZE9TUkV4aXQoCisgICAgICAg
IEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRlZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUs
IExWYWx1ZSBmYWlsQ29uZGl0aW9uLAorICAgICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBkaXJl
Y3Rpb24sIEZvcm1hdHRlZFZhbHVlIHJlY292ZXJ5KQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICBPU1IgZXhp
dCB3aXRoIHZhbHVlIHNvdXJjZXM6ICIsIG1fdmFsdWVTb3VyY2VzLCAiXG4iKTsKKyAgICAgICAg
CisgICAgICAgIEFTU0VSVChtX2Z0bFN0YXRlLmppdENvZGUtPm9zckV4aXQuc2l6ZSgpID09IG1f
ZnRsU3RhdGUub3NyRXhpdC5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBpbmRleCA9IG1fZnRs
U3RhdGUub3NyRXhpdC5zaXplKCk7CisgICAgICAgIAorICAgICAgICBtX2Z0bFN0YXRlLmppdENv
ZGUtPm9zckV4aXQuYXBwZW5kKAorICAgICAgICAgICAgT1NSRXhpdCgKKyAgICAgICAgICAgICAg
ICBraW5kLCBsb3dWYWx1ZS5mb3JtYXQoKSwgbV9ncmFwaC5tZXRob2RPZkdldHRpbmdBVmFsdWVQ
cm9maWxlRm9yKGhpZ2hWYWx1ZSksCisgICAgICAgICAgICAgICAgbV9jb2RlT3JpZ2luLCBtX2xh
c3RTZXRPcGVyYW5kLCBtX3ZhbHVlU291cmNlcy5udW1iZXJPZkFyZ3VtZW50cygpLAorICAgICAg
ICAgICAgICAgIG1fdmFsdWVTb3VyY2VzLm51bWJlck9mTG9jYWxzKCkpKTsKKyAgICAgICAgbV9m
dGxTdGF0ZS5vc3JFeGl0LmFwcGVuZChPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkpOworICAgICAg
ICAKKyAgICAgICAgT1NSRXhpdCYgZXhpdCA9IG1fZnRsU3RhdGUuaml0Q29kZS0+b3NyRXhpdC5s
YXN0KCk7CisgICAgICAgIE9TUkV4aXRDb21waWxhdGlvbkluZm8mIGluZm8gPSBtX2Z0bFN0YXRl
Lm9zckV4aXQubGFzdCgpOworCisgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBmYWlsQ2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJPU1IgZXhpdCBjb250aW51
YXRpb24iKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5icmFuY2goZmFpbENvbmRpdGlvbiwg
ZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIAorICAgICAgICBtX291dC5hcHBlbmRU
byhtX3Byb2xvZ3VlKTsKKyAgICAgICAgaW5mby5tX3RodW5rQWRkcmVzcyA9IGJ1aWxkQWxsb2Nh
KG1fb3V0Lm1fYnVpbGRlciwgbV9vdXQuaW50UHRyKTsKKyAgICAgICAgCisgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7
CisgICAgICAgIAorICAgICAgICBFeGl0QXJndW1lbnRMaXN0IGFyZ3VtZW50czsKKyAgICAgICAg
YXJndW1lbnRzLmFwcGVuZChtX2NhbGxGcmFtZSk7CisgICAgICAgIGlmICghIWxvd1ZhbHVlKQor
ICAgICAgICAgICAgYXJndW1lbnRzLmFwcGVuZChsb3dWYWx1ZS52YWx1ZSgpKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBleGl0Lm1fdmFsdWVzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICBWYWx1ZVNvdXJjZSBzb3VyY2UgPSBtX3ZhbHVlU291cmNlc1tp
XTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3dpdGNoIChzb3VyY2Uua2luZCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFZhbHVlSW5KU1N0YWNrOgorICAgICAgICAgICAgICAgIGV4aXQubV92
YWx1ZXNbaV0gPSBFeGl0VmFsdWU6OmluSlNTdGFjaygpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKKyAgICAgICAgICAgICAgICBleGl0
Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0ludDMyKCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZUluSlNTdGFjazoKKyAgICAgICAg
ICAgICAgICBleGl0Lm1fdmFsdWVzW2ldID0gRXhpdFZhbHVlOjppbkpTU3RhY2tBc0RvdWJsZSgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWYWx1ZUluTG9jYWxz
OgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudCgKKyAgICAgICAgICAgICAgICAgICAg
ZXhpdCwgYXJndW1lbnRzLCBpLCBWYWx1ZUZvcm1hdEpTVmFsdWUsIG1fb3V0LmdldChtX2xvY2Fs
czY0W2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEludDMy
SW5Mb2NhbHM6CisgICAgICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KAorICAgICAgICAgICAg
ICAgICAgICBleGl0LCBhcmd1bWVudHMsIGksIFZhbHVlRm9ybWF0SW50MzIsIG1fb3V0LmdldCht
X2xvY2FsczMyW2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IEJvb2xlYW5JbkxvY2FsczoKKyAgICAgICAgICAgICAgICBhZGRFeGl0QXJndW1lbnQoCisgICAg
ICAgICAgICAgICAgICAgIGV4aXQsIGFyZ3VtZW50cywgaSwgVmFsdWVGb3JtYXRCb29sZWFuLCBt
X291dC5nZXQobV9sb2NhbHNCb29sZWFuW2ldKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIERvdWJsZUluTG9jYWxzOgorICAgICAgICAgICAgICAgIC8vIEZJWE1F
OiBpbXBsZW1lbnQgZG91YmxlcyBpbiBGVEwuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNAorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEFyZ3VtZW50c1NvdXJjZToKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
aW1wbGVtZW50IFBoYW50b21Bcmd1bWVudHMuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzk4NgorICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFNvdXJjZUlzRGVhZDoKKyAgICAgICAgICAgICAgICBleGl0Lm1fdmFsdWVz
W2ldID0gRXhpdFZhbHVlOjpkZWFkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEhhdmVOb2RlOgorICAgICAgICAgICAgICAgIGFkZEV4aXRBcmd1bWVudEZvck5v
ZGUoZXhpdCwgYXJndW1lbnRzLCBpLCBzb3VyY2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAgICAgICAgRXhpdCB2YWx1ZXM6ICIsIGV4aXQu
bV92YWx1ZXMsICJcbiIpOworICAgICAgICAKKyAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSBGb3J3
YXJkU3BlY3VsYXRpb24pIHsKKyAgICAgICAgICAgIEFTU0VSVChtX25vZGUpOworICAgICAgICAg
ICAgZXhpdC5jb252ZXJ0VG9Gb3J3YXJkKG1faGlnaEJsb2NrLCBtX25vZGUsIG1fbm9kZUluZGV4
LCByZWNvdmVyeSwgYXJndW1lbnRzKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8g
U28sIHRoZSByZWFsbHkgbGFtZSB0aGluZyBoZXJlIGlzIHRoYXQgd2UgaGF2ZSB0byBidWlsZCBh
biBMTFZNIGZ1bmN0aW9uIHR5cGUuCisgICAgICAgIC8vIEJvb28uCisgICAgICAgIFZlY3RvcjxM
VHlwZSwgMTY+IGFyZ3VtZW50VHlwZXM7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhcmd1bWVudHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBhcmd1bWVudFR5cGVzLmFwcGVu
ZCh0eXBlT2YoYXJndW1lbnRzW2ldKSk7CisgICAgICAgIAorICAgICAgICBtX291dC5jYWxsKAor
ICAgICAgICAgICAgbV9vdXQuaW50VG9QdHIoCisgICAgICAgICAgICAgICAgbV9vdXQuZ2V0KGlu
Zm8ubV90aHVua0FkZHJlc3MpLAorICAgICAgICAgICAgICAgIHBvaW50ZXJUeXBlKGZ1bmN0aW9u
VHlwZShtX291dC52b2lkVHlwZSwgYXJndW1lbnRUeXBlcykpKSwKKyAgICAgICAgICAgIGFyZ3Vt
ZW50cyk7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAgIAorICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgCisgICAgICAg
IG1fZXhpdFRodW5rR2VuZXJhdG9yLmVtaXRUaHVuayhpbmRleCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgYWRkRXhpdEFyZ3VtZW50Rm9yTm9kZSgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhp
dEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgTm9kZSogbm9kZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNT
RVJUKG5vZGUtPmhhc1Jlc3VsdCgpKTsKKworICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4
aXRBcmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIAorICAgICAgICBpZiAoIWlzTGl2ZShub2RlKSkgeworICAgICAgICAgICAgYm9vbCBmb3Vu
ZCA9IGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobmVlZHNPU1JCYWNrd2Fy
ZFJld2lyaW5nKG5vZGUtPm9wKCkpKSB7CisgICAgICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmNo
aWxkMSgpLm5vZGUoKTsKKyAgICAgICAgICAgICAgICBpZiAodHJ5VG9TZXRDb25zdGFudEV4aXRB
cmd1bWVudChleGl0LCBpbmRleCwgbm9kZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICBpZiAoaXNMaXZlKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICBm
b3VuZCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
ICghZm91bmQpIHsKKyAgICAgICAgICAgICAgICBOb2RlKiBpbnQzMlRvRG91YmxlID0gMDsKKyAg
ICAgICAgICAgICAgICBOb2RlKiB2YWx1ZVRvSW50MzIgPSAwOworICAgICAgICAgICAgICAgIE5v
ZGUqIHVpbnQzMlRvTnVtYmVyID0gMDsKKyAgICAgICAgICAgICAgICBOb2RlKiBkb3VibGVBc0lu
dDMyID0gMDsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBIYXNoTWFwPE5vZGUq
LCB1bnNpZ25lZD46Oml0ZXJhdG9yIGl0ZXIgPSBtX3RpbWVUb0xpdmUuYmVnaW4oKTsKKyAgICAg
ICAgICAgICAgICBIYXNoTWFwPE5vZGUqLCB1bnNpZ25lZD46Oml0ZXJhdG9yIGVuZCA9IG1fdGlt
ZVRvTGl2ZS5lbmQoKTsKKyAgICAgICAgICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRl
cikgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWl0ZXItPnZhbHVlKQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0
ZSA9IGl0ZXItPmtleTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYW5kaWRhdGUtPmNoaWxk
MSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjYW5kaWRhdGUtPmNoaWxkMSgpICE9IG5vZGUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChjYW5kaWRhdGUtPm9w
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlIEZvcndhcmRJbnQzMlRvRG91YmxlOgorICAgICAgICAgICAgICAgICAg
ICAgICAgaW50MzJUb0RvdWJsZSA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlVG9JbnQzMiA9IGNhbmRpZGF0ZTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIFVJbnQzMlRvTnVtYmVy
OgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBjYW5kaWRhdGU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBE
b3VibGVBc0ludDMyOgorICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyVG9OdW1iZXIgPSBj
YW5kaWRhdGU7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCghbmVlZHNPU1JG
b3J3YXJkUmV3aXJpbmcoY2FuZGlkYXRlLT5vcCgpKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoZG91YmxlQXNJbnQzMikKKyAgICAgICAg
ICAgICAgICAgICAgbm9kZSA9IGRvdWJsZUFzSW50MzI7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoaW50MzJUb0RvdWJsZSkKKyAgICAgICAgICAgICAgICAgICAgbm9kZSA9IGludDMyVG9Eb3Vi
bGU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAodmFsdWVUb0ludDMyKQorICAgICAgICAgICAg
ICAgICAgICBub2RlID0gdmFsdWVUb0ludDMyOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKHVp
bnQzMlRvTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICBub2RlID0gdWludDMyVG9OdW1iZXI7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKGlzTGl2ZShub2RlKSkKKyAg
ICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIWZvdW5kKSB7CisgICAgICAgICAgICAgICAgZXhpdC5tX3Zh
bHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmRlYWQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFTU0VSVChpc0xp
dmUobm9kZSkpOworICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQgPSBtX2ludDMy
VmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50KGV4aXQsIGFy
Z3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0SW50MzIsIHJlc3VsdCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChMVmFsdWUgcmVzdWx0ID0g
bV9ib29sZWFuVmFsdWVzLmdldChub2RlKSkgeworICAgICAgICAgICAgYWRkRXhpdEFyZ3VtZW50
KGV4aXQsIGFyZ3VtZW50cywgaW5kZXgsIFZhbHVlRm9ybWF0Qm9vbGVhbiwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1
ZSByZXN1bHQgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KG5vZGUpKSB7CisgICAgICAgICAgICBhZGRF
eGl0QXJndW1lbnQoZXhpdCwgYXJndW1lbnRzLCBpbmRleCwgVmFsdWVGb3JtYXRKU1ZhbHVlLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IGRvdWJsZXMgaW4gdGhlIEZUTC4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyNAorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBib29sIHRyeVRvU2V0
Q29uc3RhbnRFeGl0QXJndW1lbnQoT1NSRXhpdCYgZXhpdCwgdW5zaWduZWQgaW5kZXgsIE5vZGUq
IG5vZGUpCisgICAgeworICAgICAgICBpZiAoIW5vZGUpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2Fz
ZSBKU0NvbnN0YW50OgorICAgICAgICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgICAgICAgICAg
ZXhpdC5tX3ZhbHVlc1tpbmRleF0gPSBFeGl0VmFsdWU6OmNvbnN0YW50KG1fZ3JhcGgudmFsdWVP
ZkpTQ29uc3RhbnQobm9kZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgUGhh
bnRvbUFyZ3VtZW50cy4KKyAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMTM5ODYKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGFk
ZEV4aXRBcmd1bWVudCgKKyAgICAgICAgT1NSRXhpdCYgZXhpdCwgRXhpdEFyZ3VtZW50TGlzdCYg
YXJndW1lbnRzLCB1bnNpZ25lZCBpbmRleCwgVmFsdWVGb3JtYXQgZm9ybWF0LAorICAgICAgICBM
VmFsdWUgdmFsdWUpCisgICAgeworICAgICAgICBleGl0Lm1fdmFsdWVzW2luZGV4XSA9IEV4aXRW
YWx1ZTo6ZXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5zaXplKCkp
KTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgfQorICAgIAorICAgIHZv
aWQgbGlua09TUkV4aXRzQW5kQ29tcGxldGVJbml0aWFsaXphdGlvbkJsb2NrcygpCisgICAgewor
ICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdFRodW5rID0KKyAgICAgICAgICAg
IGdsb2JhbERhdGEoKS5nZXRDVElTdHViKG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Ip
OworICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCB0YXJnZXQgPSBDb2RlTG9jYXRpb25MYWJlbChv
c3JFeGl0VGh1bmsuY29kZSgpKTsKKyAgICAgICAgCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG1f
cHJvbG9ndWUpOworICAgICAgICBtX291dC5qdW1wKG1faW5pdGlhbGl6YXRpb24pOworICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8obV9pbml0aWFsaXphdGlvbik7CisgICAgICAgIAor
ICAgICAgICBpZiAobV9leGl0VGh1bmtHZW5lcmF0b3IuZGlkVGhpbmdzKCkpIHsKKyAgICAgICAg
ICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigKKyAgICAgICAgICAgICAgICBnbG9iYWxEYXRhKCks
ICZtX2V4aXRUaHVua0dlbmVyYXRvciwgbV9mdGxTdGF0ZS5ncmFwaC5tX2NvZGVCbG9jaywKKyAg
ICAgICAgICAgICAgICBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICAgICAgCisgICAg
ICAgICAgICBBU1NFUlQobV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKSA9PSBtX2Z0bFN0YXRlLmpp
dENvZGUtPm9zckV4aXQuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbV9mdGxTdGF0ZS5vc3JFeGl0LnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICAgICAgT1NSRXhpdENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fZnRsU3RhdGUub3NyRXhp
dFtpXTsKKyAgICAgICAgICAgICAgICBPU1JFeGl0JiBleGl0ID0gbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5vc3JFeGl0W2ldOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5s
aW5rKGluZm8ubV90aHVua0p1bXAsIHRhcmdldCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX291dC5zZXQoCisgICAgICAgICAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5sb2NhdGlvbk9mKGluZm8ubV90aHVu
a0xhYmVsKS5leGVjdXRhYmxlQWRkcmVzcygpKSwKKyAgICAgICAgICAgICAgICAgICAgaW5mby5t
X3RodW5rQWRkcmVzcyk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBleGl0Lm1fcGF0
Y2hhYmxlQ29kZU9mZnNldCA9IGxpbmtCdWZmZXIub2Zmc2V0T2YoaW5mby5tX3RodW5rSnVtcCk7
CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2Rl
LT5pbml0aWFsaXplRXhpdFRodW5rcygKKyAgICAgICAgICAgICAgICBGSU5BTElaRV9ERkdfQ09E
RSgKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
KCJGVEwgZXhpdCB0aHVua3MgZm9yICVzIiwgdG9DU3RyaW5nKENvZGVCbG9ja1dpdGhKSVRUeXBl
KG1fZnRsU3RhdGUuZ3JhcGgubV9jb2RlQmxvY2ssSklUQ29kZTo6RlRMSklUKSkuZGF0YSgpKSkp
OworICAgICAgICB9CisKKyAgICAgICAgbV9vdXQuanVtcChtX2FyZ3VtZW50Q2hlY2tzKTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBvYnNlcnZlTW92SGludChOb2RlKiBub2RlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG5vZGUtPmNvbnRhaW5zTW92SGludCgpKTsKKyAgICAgICAgQVNTRVJUKG5v
ZGUtPm9wKCkgIT0gWm9tYmllSGludCk7CisgICAgICAgIAorICAgICAgICBpbnQgb3BlcmFuZCA9
IG5vZGUtPmxvY2FsKCk7CisgICAgICAgIAorICAgICAgICBtX2xhc3RTZXRPcGVyYW5kID0gb3Bl
cmFuZDsKKyAgICAgICAgbV92YWx1ZVNvdXJjZXMub3BlcmFuZChvcGVyYW5kKSA9IFZhbHVlU291
cmNlKG5vZGUtPmNoaWxkMSgpLm5vZGUoKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgYWRkV2Vh
a1JlZmVyZW5jZShKU0NlbGwqIHRhcmdldCkKICAgICB7CiAgICAgICAgIG1fZnRsU3RhdGUuaml0
Q29kZS0+Y29tbW9uLndlYWtSZWZlcmVuY2VzLmFwcGVuZCgKQEAgLTExNTEsMTIgKzE1ODUsMTMg
QEAgcHJpdmF0ZToKICAgICBPdXRwdXQgbV9vdXQ7CiAgICAgCiAgICAgTEJhc2ljQmxvY2sgbV9w
cm9sb2d1ZTsKKyAgICBMQmFzaWNCbG9jayBtX2luaXRpYWxpemF0aW9uOworICAgIExCYXNpY0Js
b2NrIG1fYXJndW1lbnRDaGVja3M7CiAgICAgSGFzaE1hcDxCYXNpY0Jsb2NrKiwgTEJhc2ljQmxv
Y2s+IG1fYmxvY2tzOwogICAgIAogICAgIExWYWx1ZSBtX2NhbGxGcmFtZTsKICAgICBMVmFsdWUg
bV90YWdUeXBlTnVtYmVyOwogICAgIExWYWx1ZSBtX3RhZ01hc2s7Ci0gICAgTFZhbHVlIG1fYWJv
cnRGdW5jdGlvbjsKICAgICAKICAgICBIYXNoU2V0PE5vZGUqPiBtX2ZsdXNoZWRMb2NhbE9wczsK
ICAgICBWZWN0b3I8Tm9kZSo+IG1fZmx1c2hlZExvY2FsT3BXb3JrbGlzdDsKQEAgLTExNjUsMTUg
KzE2MDAsMjMgQEAgcHJpdmF0ZToKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fanNWYWx1
ZVZhbHVlczsKICAgICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fYm9vbGVhblZhbHVlczsKICAg
ICBIYXNoTWFwPE5vZGUqLCBMVmFsdWU+IG1fc3RvcmFnZVZhbHVlczsKKyAgICBIYXNoTWFwPE5v
ZGUqLCB1bnNpZ25lZD4gbV90aW1lVG9MaXZlOwogICAgIAogICAgIE9wZXJhbmRzPExWYWx1ZT4g
bV9sb2NhbHNCb29sZWFuOwogICAgIE9wZXJhbmRzPExWYWx1ZT4gbV9sb2NhbHMzMjsKICAgICBP
cGVyYW5kczxMVmFsdWU+IG1fbG9jYWxzNjQ7CiAgICAgCisgICAgT3BlcmFuZHM8VmFsdWVTb3Vy
Y2U+IG1fdmFsdWVTb3VyY2VzOworICAgIGludCBtX2xhc3RTZXRPcGVyYW5kOworICAgIEV4aXRU
aHVua0dlbmVyYXRvciBtX2V4aXRUaHVua0dlbmVyYXRvcjsKKyAgICAKICAgICBBYnN0cmFjdFN0
YXRlIG1fc3RhdGU7CiAgICAgQmFzaWNCbG9jayogbV9oaWdoQmxvY2s7CiAgICAgQmFzaWNCbG9j
ayogbV9uZXh0SGlnaEJsb2NrOwogICAgIExCYXNpY0Jsb2NrIG1fbmV4dExvd0Jsb2NrOworICAg
IAorICAgIENvZGVPcmlnaW4gbV9jb2RlT3JpZ2luOworICAgIHVuc2lnbmVkIG1fbm9kZUluZGV4
OwogICAgIE5vZGUqIG1fbm9kZTsKICAgICBTcGVjdWxhdGlvbkRpcmVjdGlvbiBtX2RpcmVjdGlv
bjsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExP
U1JFeGl0LmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1ZGUgIkNvZGVCbG9jay5o
IgorI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5j
bHVkZSAiRlRMRXhpdEFyZ3VtZW50LmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50TGlzdC5o
IgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJPcGVyYXRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERGRzsKKwor
T1NSRXhpdDo6T1NSRXhpdCgKKyAgICBFeGl0S2luZCBleGl0S2luZCwgVmFsdWVGb3JtYXQgcHJv
ZmlsZVZhbHVlRm9ybWF0LAorICAgIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgdmFsdWVQ
cm9maWxlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCisgICAgaW50IGxhc3RTZXRPcGVyYW5kLCB1
bnNpZ25lZCBudW1iZXJPZkFyZ3VtZW50cywgdW5zaWduZWQgbnVtYmVyT2ZMb2NhbHMpCisgICAg
OiBPU1JFeGl0QmFzZShleGl0S2luZCwgY29kZU9yaWdpbikKKyAgICAsIG1fcHJvZmlsZVZhbHVl
Rm9ybWF0KHByb2ZpbGVWYWx1ZUZvcm1hdCkKKyAgICAsIG1fdmFsdWVQcm9maWxlKHZhbHVlUHJv
ZmlsZSkKKyAgICAsIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCgwKQorICAgICwgbV9sYXN0U2V0T3Bl
cmFuZChsYXN0U2V0T3BlcmFuZCkKKyAgICAsIG1fdmFsdWVzKG51bWJlck9mQXJndW1lbnRzLCBu
dW1iZXJPZkxvY2FscykKK3sKK30KKworQ29kZUxvY2F0aW9uSnVtcCBPU1JFeGl0Ojpjb2RlTG9j
YXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRsQ29kZUJsb2NrKSBjb25zdAoreworICAgIHJl
dHVybiBDb2RlTG9jYXRpb25KdW1wKAorICAgICAgICByZWludGVycHJldF9jYXN0PGNoYXIqPigK
KyAgICAgICAgICAgIGZ0bENvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5mdGwoKS0+ZXhpdFRodW5r
cygpLmRhdGFMb2NhdGlvbigpKSArCisgICAgICAgIG1fcGF0Y2hhYmxlQ29kZU9mZnNldCk7Cit9
CisKK3ZvaWQgT1NSRXhpdDo6Y29udmVydFRvRm9yd2FyZCgKKyAgICBCYXNpY0Jsb2NrKiBibG9j
aywgTm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5vZGVJbmRleCwKKyAgICBjb25zdCBGb3Jt
YXR0ZWRWYWx1ZSAmdmFsdWUsIEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cykKK3sKKyAgICBO
b2RlKiBub2RlOworICAgIE5vZGUqIGxhc3RNb3ZIaW50OworICAgIGlmICghZG9TZWFyY2hGb3JG
b3J3YXJkQ29udmVyc2lvbihibG9jaywgY3VycmVudE5vZGUsIG5vZGVJbmRleCwgISF2YWx1ZSwg
bm9kZSwgbGFzdE1vdkhpbnQpKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQobm9kZS0+
Y29kZU9yaWdpbiAhPSBjdXJyZW50Tm9kZS0+Y29kZU9yaWdpbik7CisgICAgCisgICAgbV9jb2Rl
T3JpZ2luID0gbm9kZS0+Y29kZU9yaWdpbjsKKyAgICAKKyAgICBpZiAoIXZhbHVlKQorICAgICAg
ICByZXR1cm47CisgICAgCisgICAgaW50IG92ZXJyaWRkZW5PcGVyYW5kID0gbGFzdE1vdkhpbnQt
PmxvY2FsKCk7CisgICAgbV9sYXN0U2V0T3BlcmFuZCA9IG92ZXJyaWRkZW5PcGVyYW5kOworICAg
IAorICAgIC8vIElzIHRoZSB2YWx1ZSBmb3IgdGhpcyBvcGVyYW5kIGJlaW5nIHBhc3NlZCBhcyBh
biBhcmd1bWVudCB0byB0aGUgZXhpdCwgb3IgaXMKKyAgICAvLyBpdCBzb21ldGhpbmcgZWxzZT8g
SWYgaXQncyBhbiBhcmd1bWVudCBhbHJlYWR5LCB0aGVuIHJlcGxhY2UgdGhhdCBhcmd1bWVudDsK
KyAgICAvLyBvdGhlcndpc2UgYWRkIGFub3RoZXIgYXJndW1lbnQuCisgICAgaWYgKG1fdmFsdWVz
W292ZXJyaWRkZW5PcGVyYW5kXS5pc0FyZ3VtZW50KCkpIHsKKyAgICAgICAgRXhpdEFyZ3VtZW50
IGV4aXRBcmd1bWVudCA9IG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXS5leGl0QXJndW1lbnQo
KTsKKyAgICAgICAgYXJndW1lbnRzW2V4aXRBcmd1bWVudC5hcmd1bWVudCgpXSA9IHZhbHVlLnZh
bHVlKCk7CisgICAgICAgIG1fdmFsdWVzW292ZXJyaWRkZW5PcGVyYW5kXSA9IEV4aXRWYWx1ZTo6
ZXhpdEFyZ3VtZW50KAorICAgICAgICAgICAgZXhpdEFyZ3VtZW50LndpdGhGb3JtYXQodmFsdWUu
Zm9ybWF0KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBh
cmd1bWVudCA9IGFyZ3VtZW50cy5zaXplKCk7CisgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZS52
YWx1ZSgpKTsKKyAgICBtX3ZhbHVlc1ttX2xhc3RTZXRPcGVyYW5kXSA9IEV4aXRWYWx1ZTo6ZXhp
dEFyZ3VtZW50KAorICAgICAgICBFeGl0QXJndW1lbnQodmFsdWUuZm9ybWF0KCksIGFyZ3VtZW50
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShG
VExfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT1NSRXhpdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NSRXhpdF9oCisjZGVmaW5lIEZUTE9TUkV4
aXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkK
KworI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJERkdFeGl0UHJvZmlsZS5oIgor
I2luY2x1ZGUgIkRGR09TUkV4aXRCYXNlLmgiCisjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5o
IgorI2luY2x1ZGUgIkZUTEV4aXRBcmd1bWVudExpc3QuaCIKKyNpbmNsdWRlICJGVExFeGl0VmFs
dWUuaCIKKyNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgorI2luY2x1ZGUgIk1ldGhvZE9m
R2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCIKKyNpbmNsdWRlICJPcGVyYW5kcy5oIgorI2luY2x1ZGUg
IlZhbHVlUHJvZmlsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8v
IFRyYWNrcyBvbmUgT1NSIGV4aXQgc2l0ZSB3aXRoaW4gdGhlIEZUTCBKSVQuIE9TUiBleGl0IGlu
IEZUTCB3b3JrcyBieSBkZWNvbnN0cnVjdGluZworLy8gdGhlIGNyYXp5IHRoYXQgaXMgT1NSIGRv
d24gdG8gc2ltcGxlIFNTQSBDRkcgcHJpbWl0aXZlcyB0aGF0IGFueSBjb21waWxlciBiYWNrZW5k
CisvLyAoaW5jbHVkaW5nIG9mIGNvdXJzZSBMTFZNKSBjYW4gZ3JvayBhbmQgZG8gbWVhbmluZ2Z1
bCB0aGluZ3MgdG8uIEV4Y2VwdCBmb3IKKy8vIHdhdGNocG9pbnQtYmFzZWQgZXhpdHMsIHdoaWNo
IGhhdmVuJ3QgeWV0IGJlZW4gaW1wbGVtZW50ZWQgKHNlZSB3ZWJraXQub3JnL2IvMTEzNjQ3KSwK
Ky8vIGFuIGV4aXQgaXMganVzdCBhIGNvbmRpdGlvbmFsIGJyYW5jaCBpbiB0aGUgZW1pdHRlZCBj
b2RlIHdoZXJlIG9uZSBkZXN0aW5hdGlvbiBpcyB0aGUKKy8vIGNvbnRpbnVhdGlvbiBhbmQgdGhl
IG90aGVyIGlzIGEgYmFzaWMgYmxvY2sgdGhhdCBwZXJmb3JtcyBhIG5vLXJldHVybiB0YWlsLWNh
bGwgdG8gYW4KKy8vIGV4aXQgdGh1bmsuIFRoaXMgdGh1bmsgdGFrZXMgYXMgaXRzIGFyZ3VtZW50
cyB0aGUgbGl2ZSBub24tY29uc3RhbnQKKy8vIG5vdC1hbHJlYWR5LWFjY291bnRlZC1mb3IgYnl0
ZWNvZGUgc3RhdGUuIFRvIGFwcHJlY2lhdGUgaG93IHRoaXMgd29ya3MgY29uc2lkZXIgdGhlCisv
LyBmb2xsb3dpbmcgSmF2YVNjcmlwdCBwcm9ncmFtLCBhbmQgaXRzIGxvd2VyaW5nIGRvd24gdG8g
TExWTSBJUiBpbmNsdWRpbmcgdGhlIHJlbGV2YW50CisvLyBleGl0czoKKy8vCisvLyBmdW5jdGlv
biBmb28obykgeworLy8gICAgIHZhciBhID0gby5hOyAvLyBwcmVkaWN0ZWQgaW50CisvLyAgICAg
dmFyIGIgPSBvLmI7CisvLyAgICAgdmFyIGMgPSBvLmM7IC8vIE5CIHRoaXMgaXMgZGVhZAorLy8g
ICAgIGEgPSBhIHwgNTsgLy8gb3VyIGV4YW1wbGUgT1NSIGV4aXQ6IG5lZWQgdG8gY2hlY2sgaWYg
YSBpcyBhbiBpbnQKKy8vICAgICByZXR1cm4gYSArIGI7CisvLyB9CisvLworLy8gSnVzdCBjb25z
aWRlciB0aGUgImEgfCA1Ii4gSW4gdGhlIERGRyBJUiwgdGhpcyBsb29rcyBsaWtlOgorLy8KKy8v
IEJpdE9yKENoZWNrOkludDMyOkBhLCBJbnQzMjo1KQorLy8KKy8vIFdoZXJlIEBhIGlzIHRoZSBu
b2RlIGZvciB0aGUgR2V0TG9jYWwgbm9kZSB0aGF0IGdldHMgdGhlIHZhbHVlIG9mIHRoZSAnYScg
dmFyaWFibGUuCisvLyBDb25jZXB0dWFsbHksIHRoaXMgbm9kZSBjYW4gYmUgZnVydGhlciBicm9r
ZW4gZG93biB0byB0aGUgZm9sbG93aW5nIChub3RlIHRoYXQgdGhpcworLy8gcGFydGljdWxhciBs
b3dlcmluZyBuZXZlciBhY3R1YWxseSBoYXBwZW5zIC0gd2Ugc2tpcCB0aGlzIHN0ZXAgYW5kIGdv
IHN0cmFpZ2h0IHRvCisvLyBMTFZNIElSIC0gYnV0IGl0J3Mgc3RpbGwgdXNlZnVsIHRvIHNlZSB0
aGlzKToKKy8vCisvLyBleGl0SWYoQGEgaXMgbm90IGludDMyKTsKKy8vIGNvbnRpbnVhdGlvbjsK
Ky8vCisvLyBXaGVyZSAnZXhpdElmKCknIGlzIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGV4aXQgaWYg
dGhlIGFyZ3VtZW50IGlzIHRydWUsIGFuZAorLy8gJ2NvbnRpbnVhdGlvbicgaXMgdGhlIHN0dWZm
IHRoYXQgd2Ugd2lsbCBkbyBhZnRlciB0aGUgZXhpdElmKCkgY2hlY2suIChOb3RlIHRoYXQKKy8v
IEZUTCByZWZlcnMgdG8gJ2V4aXRJZigpJyBhcyAnc3BlY3VsYXRlKCknLCB3aGljaCBpcyBpbiBs
aW5lIHdpdGggREZHIHRlcm1pbm9sb2d5LikKKy8vIFRoaXMgdGhlbiBnZXRzIGJyb2tlbiBkb3du
IHRvIHRoZSBmb2xsb3dpbmcgTExWTSBJUiwgYXNzdW1pbmcgdGhhdCAlMCBpcyB0aGUgTExWTQor
Ly8gdmFsdWUgY29ycmVzcG9uZGluZyB0byB2YXJpYWJsZSAnYScsIGFuZCAlMSBpcyB0aGUgTExW
TSB2YWx1ZSBmb3IgdmFyaWFibGUgJ2InOgorLy8KKy8vICAgJTIgPSAuLi4gLy8gdGhlIHByZWRp
Y3RhdGUgY29ycmVzcG9uZGluZyB0byAnQGEgaXMgbm90IGludDMyJworLy8gICBiciBpMSAlMiwg
bGFiZWwgJTMsIGxhYmVsICU0CisvLyA7IDxsYWJlbD46MworLy8gICBjYWxsIHZvaWQgZXhpdFRo
dW5rMSglMCwgJTEpIC8vIHBhc3MgJ2EnIGFuZCAnYicsIHNpbmNlIHRoZXkncmUgYm90aCBsaXZl
LWluLWJ5dGVjb2RlCisvLyAgIHVucmVhY2hhYmxlCisvLyA7IDxsYWJlbD46NAorLy8gICAuLi4g
Ly8gY29kZSBmb3IgdGhlIGNvbnRpbnVhdGlvbgorLy8KKy8vIFdoZXJlICdleGl0VGh1bmsxJyBp
cyB0aGUgSVIgdG8gZ2V0IHRoZSBleGl0IHRodW5rIGZvciAqdGhpcyogT1NSIGV4aXQuIEVhY2gg
T1NSCisvLyBleGl0IHdpbGwgYXBwZWFyIHRvIExMVk0gdG8gaGF2ZSBhIGRpc3RpbmN0IGV4aXQg
dGh1bmsuCisvLworLy8gTm90ZSB0aGF0IHRoaXMgZGlkbid0IGhhdmUgdG8gcGFzcyAnNScsICdv
Jywgb3IgJ2MnIHRvIHRoZSBleGl0IHRodW5rLiA1IGlzIGEKKy8vIGNvbnN0YW50IGFuZCB0aGUg
REZHIGFscmVhZHkga25vd3MgdGhhdCwgYW5kIGNhbiBhbHJlYWR5IHRlbGwgdGhlIE9TUiBleGl0
IG1hY2hpbmVyeQorLy8gd2hhdCB0aGF0IGNvbnRhbnQgaXMgYW5kIHdoaWNoIGJ5dGVjb2RlIHZh
cmlhYmxlcyAoaWYgYW55KSBpdCBuZWVkcyB0byBiZSBkcm9wcGVkCisvLyBpbnRvLiBUaGlzIGlz
IGNvbnZleWVkIHRvIHRoZSBleGl0IHN0YXRpY2FsbHksIHZpYSB0aGUgT1NSRXhpdCBkYXRhIHN0
cnVjdHVyZSBiZWxvdy4KKy8vIFNlZSB0aGUgY29kZSBmb3IgRXhpdFZhbHVlIGZvciBkZXRhaWxz
LiAnbycgaXMgYW4gYXJndW1lbnQsIGFuZCBhcmd1bWVudHMgYXJlIGFsd2F5cworLy8gImZsdXNo
ZWQiIC0gaWYgeW91IG5ldmVyIGFzc2lnbiB0aGVtIHRoZW4gdGhlaXIgdmFsdWVzIGFyZSBzdGls
bCBpbiB0aGUgYXJndW1lbnQKKy8vIHN0YWNrIHNsb3RzLCBhbmQgaWYgeW91IGRvIGFzc2lnbiB0
aGVtIHRoZW4gd2UgZWFnZXJseSBzdG9yZSB0aGVtIGludG8gdGhvc2Ugc2xvdHMuCisvLyAnYycg
aXMgZGVhZCBpbiBieXRlY29kZSwgYW5kIHRoZSBERkcga25vd3MgdGhpczsgd2Ugc3RhdGljYWxs
eSB0ZWxsIHRoZSBleGl0IHRodW5rCisvLyB0aGF0IGl0J3MgZGVhZCBhbmQgZG9uJ3QgaGF2ZSB0
byBwYXNzIGFueXRoaW5nLiBUaGUgZXhpdCB0aHVuayB3aWxsICJpbml0aWFsaXplIiBpdHMKKy8v
IHZhbHVlIHRvIFVuZGVmaW5lZC4KKy8vCisvLyBUaGlzIGFwcHJvYWNoIHRvIE9TUiBleGl0IGhh
cyBhIG51bWJlciBvZiB2aXJ0dWVzOgorLy8KKy8vIC0gSXQgaXMgYW4gZW50aXJlbHkgdW5zdXJw
cmlzaW5nIHJlcHJlc2VudGF0aW9uIGZvciBhIGNvbXBpbGVyIHRoYXQgYWxyZWFkeSBncm9rcwor
Ly8gICBDRkctbGlrZSBJUnMgZm9yIEMtbGlrZSBsYW5ndWFnZXMuIEFsbCBleGlzdGluZyBhbmFs
eXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zIGp1c3QKKy8vICAgd29yay4KKy8vCisvLyAtIEl0IGxl
bmRzIGl0c2VsZiBuYXR1cmFsbHkgdG8gbW9kZXJuIGFwcHJvYWNoZXMgdG8gY29kZSBtb3Rpb24u
IEZvciBleGFtcGxlLCB5b3UKKy8vICAgY291bGQgc2luayBvcGVyYXRpb25zIGZyb20gYWJvdmUg
dGhlIGV4aXQgdG8gYmVsb3cgaXQsIGlmIHlvdSBqdXN0IGR1cGxpY2F0ZSB0aGUKKy8vICAgb3Bl
cmF0aW9uIGludG8gdGhlIE9TUiBleGl0IGJsb2NrLiBUaGlzIGlzIGJvdGggbGVnYWwgYW5kIGRl
c2lyYWJsZS4gSXQgd29ya3MKKy8vICAgYmVjYXVzZSB0aGUgYmFja2VuZCBzZWVzIHRoZSBPU1Ig
ZXhpdCBibG9jayBhcyBiZWluZyBubyBkaWZmZXJlbnQgdGhhbiBhbnkgb3RoZXIsCisvLyAgIGFu
ZCBMTFZNIGFscmVhZHkgc3VwcG9ydHMgc2lua2luZyBpZiBpdCBzZWVzIHRoYXQgYSB2YWx1ZSBp
cyBvbmx5IHBhcnRpYWxseSB1c2VkLgorLy8gICBIZW5jZSB0aGVyZSBleGlzdHMgYSB2YWx1ZSB0
aGF0IGRvbWluYXRlcyB0aGUgZXhpdCBidXQgaXMgb25seSB1c2VkIGJ5IHRoZSBleGl0CisvLyAg
IHRodW5rIGFuZCBub3QgYnkgdGhlIGNvbnRpbnVhdGlvbiwgc2lua2luZyBvdWdodCB0byBraWNr
IGluIGZvciB0aGF0IHZhbHVlLgorLy8gICBIb2lzdGluZyBvcGVyYXRpb25zIGZyb20gYmVsb3cg
aXQgdG8gYWJvdmUgaXQgaXMgYWxzbyBwb3NzaWJsZSwgZm9yIHNpbWlsYXIKKy8vICAgcmVhc29u
cy4KKy8vCisvLyAtIFRoZSBuby1yZXR1cm4gdGFpbC1jYWxsIHRvIHRoZSBPU1IgZXhpdCB0aHVu
ayBjYW4gYmUgc3ViamVjdGVkIHRvIHNwZWNpYWxpemVkCisvLyAgIGNvZGUtc2l6ZSByZWR1Y3Rp
b24gb3B0aW1pemF0aW9ucywgdGhvdWdoIHRoaXMgaXMgb3B0aW9uYWwuIEZvciBleGFtcGxlLCBp
bnN0ZWFkCisvLyAgIG9mIGFjdHVhbGx5IGVtaXR0aW5nIGEgY2FsbCBhbG9uZyB3aXRoIGFsbCB0
aGF0IGdvZXMgd2l0aCBpdCAobGlrZSBwbGFjaW5nIHRoZQorLy8gICBhcmd1bWVudHMgaW50byBh
cmd1bWVudCBwb3NpdGlvbiksIHRoZSBiYWNrZW5kIGNvdWxkIGNob29zZSB0byBzaW1wbHkgaW5m
b3JtIHVzCisvLyAgIHdoZXJlIGl0IGhhZCBwbGFjZWQgdGhlIGFyZ3VtZW50cyBhbmQgZXhwZWN0
IHRoZSBjYWxsZWUgKGkuZS4gdGhlIGV4aXQgdGh1bmspIHRvCisvLyAgIGZpZ3VyZSBpdCBvdXQg
ZnJvbSB0aGVyZS4gSXQgY291bGQgYWxzbyB0ZWxsIHVzIHdoYXQgd2UgbmVlZCB0byBkbyB0byBw
b3Agc3RhY2ssCisvLyAgIGFsdGhvdWdoIGFnYWluLCBpdCBkb2Vzbid0IGhhdmUgdG87IGl0IGNv
dWxkIGp1c3QgZW1pdCB0aGF0IGNvZGUgbm9ybWFsbHkuIFRob3VnaAorLy8gICB3ZSBkb24ndCBz
dXBwb3J0IHRoaXMgeWV0LCB3ZSBjb3VsZDsgdGhlIG9ubHkgdGhpbmcgdGhhdCB3b3VsZCBjaGFu
Z2Ugb24gb3VyIGVuZAorLy8gICBpcyB0aGF0IHdlJ2QgbmVlZCBmZWVkYmFjayBmcm9tIHRoZSBi
YWNrZW5kIGFib3V0IHRoZSBsb2NhdGlvbiBvZiB0aGUgYXJndW1lbnRzCisvLyAgIGFuZCBhIGRl
c2NyaXB0aW9uIG9mIHRoZSB0aGluZ3MgdGhhdCBuZWVkIHRvIGJlIGRvbmUgdG8gcG9wIHN0YWNr
LiBUaGlzIHdvdWxkCisvLyAgIGludm9sdmUgc3dpdGNoaW5nIHRoZSBtX3ZhbHVlcyBhcnJheSB0
byB1c2Ugc29tZXRoaW5nIG1vcmUgYWtpbiB0byBWYWx1ZVJlY292ZXJ5CisvLyAgIHJhdGhlciB0
aGFuIHRoZSBjdXJyZW50IEV4aXRWYWx1ZSwgYWxiZWl0IHBvc3NpYmx5IHdpdGggc29tZSBoYWNr
cyB0byBiZXR0ZXIKKy8vICAgdW5kZXJzdGFuZCB0aGUga2luZHMgb2YgcGxhY2VzIHdoZXJlIHRo
ZSBMTFZNIGJhY2tlbmQgd291bGQgcHV0IHZhbHVlcy4KKy8vCisvLyAtIEl0IGNvdWxkIGJlIGV4
dGVuZGVkIHRvIGFsbG93IHRoZSBiYWNrZW5kIHRvIGRvIGl0cyBvd24gZXhpdCBob2lzdGluZywg
YnkgdXNpbmcKKy8vICAgaW50cmluc2ljcyAob3IgbWV0YS1kYXRhLCBvciBzb21ldGhpbmcpIHRv
IGluZm9ybSB0aGUgYmFja2VuZCB0aGF0IGl0J3Mgc2FmZSB0bworLy8gICBtYWtlIHRoZSBwcmVk
aWNhdGUgcGFzc2VkIHRvICdleGl0SWYoKScgbW9yZSB0cnV0aHkuCisvLworLy8gLSBJdCBjb3Vs
ZCBiZSBleHRlbmRlZCB0byBzdXBwb3J0IHdhdGNocG9pbnRzIChzZWUgd2Via2l0Lm9yZy9iLzEx
MzY0NykgYnkgbWFraW5nCisvLyAgIHRoZSBwcmVkaWNhdGUgcGFzc2VkIHRvICdleGl0SWYoKScg
YmUgYW4gaW50cmluc2ljIHRoYXQgdGhlIGJhY2tlbmQga25vd3MgdG8gYmUKKy8vICAgdHJ1ZSBh
dCBjb21waWxlLXRpbWUuIFRoZSBiYWNrZW5kIGNvdWxkIHRoZW4gdHVybiB0aGUgY29uZGl0aW9u
YWwgYnJhbmNoIGludG8gYQorLy8gICByZXBsYWNlYWJsZSBqdW1wLCBtdWNoIGxpa2UgdGhlIERG
RyBkb2VzLgorCitzdHJ1Y3QgT1NSRXhpdCA6IHB1YmxpYyBERkc6Ok9TUkV4aXRCYXNlIHsKKyAg
ICBPU1JFeGl0KAorICAgICAgICBFeGl0S2luZCwgVmFsdWVGb3JtYXQgcHJvZmlsZVZhbHVlRm9y
bWF0LCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLAorICAgICAgICBDb2RlT3JpZ2luLCBp
bnQgbGFzdFNldE9wZXJhbmQsIHVuc2lnbmVkIG51bWJlck9mQXJndW1lbnRzLAorICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkxvY2Fscyk7CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG1fY29kZTsKKyAgICAKKyAgICAvLyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIGV4aXQgY2Fs
bCBtYXkgYmUgYSB2YWx1ZSB3ZSB3aXNoIHRvIHByb2ZpbGUuCisgICAgLy8gSWYgdGhhdCdzIHRo
ZSBjYXNlLCB0aGUgZm9ybWF0IHdpbGwgYmUgbm90IEludmFsaWQgYW5kIHdlJ2xsIGhhdmUgYQor
ICAgIC8vIG1ldGhvZCBvZiBnZXR0aW5nIGEgdmFsdWUgcHJvZmlsZS4gTm90ZSB0aGF0IGFsbCBv
ZiB0aGUgRXhpdEFyZ3VtZW50J3MKKyAgICAvLyBhcmUgYWxyZWFkeSBhd2FyZSBvZiB0aGlzIHBv
c3NpYmxlIG9mZi1ieS1vbmUsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKyAgICAvLyBjb3JyZWN0
IHRoZW0uCisgICAgVmFsdWVGb3JtYXQgbV9wcm9maWxlVmFsdWVGb3JtYXQ7CisgICAgTWV0aG9k
T2ZHZXR0aW5nQVZhbHVlUHJvZmlsZSBtX3ZhbHVlUHJvZmlsZTsKKyAgICAKKyAgICAvLyBPZmZz
ZXQgd2l0aGluIHRoZSBleGl0IHN0dWJzIG9mIHRoZSBzdHViIGZvciB0aGlzIGV4aXQuCisgICAg
dW5zaWduZWQgbV9wYXRjaGFibGVDb2RlT2Zmc2V0OworICAgIAorICAgIGludCBtX2xhc3RTZXRP
cGVyYW5kOworICAgIAorICAgIE9wZXJhbmRzPEV4aXRWYWx1ZT4gbV92YWx1ZXM7CisgICAgCisg
ICAgQ29kZUxvY2F0aW9uSnVtcCBjb2RlTG9jYXRpb25Gb3JSZXBhdGNoKENvZGVCbG9jayogZnRs
Q29kZUJsb2NrKSBjb25zdDsKKyAgICAKKyAgICB2b2lkIGNvbnZlcnRUb0ZvcndhcmQoCisgICAg
ICAgIERGRzo6QmFzaWNCbG9jayosIERGRzo6Tm9kZSogY3VycmVudE5vZGUsIHVuc2lnbmVkIG5v
ZGVJbmRleCwKKyAgICAgICAgY29uc3QgRm9ybWF0dGVkVmFsdWUmLCBFeGl0QXJndW1lbnRMaXN0
JiBhcmd1bWVudHMpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExPU1JFeGl0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsYXRpb25J
bmZvLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4
aXRDb21waWxhdGlvbkluZm8uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NS
RXhpdENvbXBpbGF0aW9uSW5mb19oCisjZGVmaW5lIEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9f
aAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKwor
I2luY2x1ZGUgIkZUTEFiYnJldmlhdGlvbnMuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3N0cnVjdCBPU1JFeGl0Q29t
cGlsYXRpb25JbmZvIHsKKyAgICBPU1JFeGl0Q29tcGlsYXRpb25JbmZvKCkKKyAgICAgICAgOiBt
X3RodW5rQWRkcmVzcygwKQorICAgIHsKKyAgICB9CisgICAgCisgICAgTWFjcm9Bc3NlbWJsZXI6
OkxhYmVsIG1fdGh1bmtMYWJlbDsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UGF0Y2hhYmxlSnVtcCBt
X3RodW5rSnVtcDsKKyAgICBMVmFsdWUgbV90aHVua0FkZHJlc3M7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKKworI2VuZGlmIC8v
IEZUTE9TUkV4aXRDb21waWxhdGlvbkluZm9faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTE9TUkV4aXRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0Q29t
cGlsZXIuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmgiCisjaW5jbHVkZSAiREZHT1NSRXhpdFByZXBhcmF0aW9uLmgiCisjaW5j
bHVkZSAiRlRMQ0FyZ3VtZW50R2V0dGVyLmgiCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50Rm9y
T3BlcmFuZC5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0
LmgiCisjaW5jbHVkZSAiUmVwYXRjaEJ1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKK3N0YXRpYyB2b2lkIGNvbXBpbGVT
dHViKAorICAgIHVuc2lnbmVkIGV4aXRJRCwgT1NSRXhpdCYgZXhpdCwgSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0
KGdsb2JhbERhdGEsIGNvZGVCbG9jayk7CisgICAgCisgICAgLy8gTWFrZSBvdXJzZWx2ZXMgbG9v
ayBsaWtlIGEgcmVhbCBDIGZ1bmN0aW9uLgorICAgIGppdC5wdXNoKE1hY3JvQXNzZW1ibGVyOjpm
cmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOwor
ICAgIAorICAgIC8vIFRoaXMgaXMgYWN0dWFsbHkgZmFpcmx5IGVhc3ksIGV2ZW4gdGhvdWdoIGl0
IGlzIGhvcnJpYmx5IGdyb3NzLiBXZSBrbm93IHRoYXQKKyAgICAvLyBMTFZNIHdvdWxkIGhhdmUg
cGFzc2VzIHVzIGFsbCBvZiB0aGUgc3RhdGUgdmlhIGFyZ3VtZW50cy4gV2Uga25vdyBob3cgdG8g
Z2V0CisgICAgLy8gdGhlIGFyZ3VtZW50cy4gQW5kLCB3ZSBrbm93IGhvdyB0byBwb3Agc3RhY2sg
YmFjayB0byB0aGUgSklUIHN0YWNrIGZyYW1lLCBzb3J0CisgICAgLy8gb2Y6IHdlIGtub3cgdGhh
dCBpdCdzIHR3byBmcmFtZXMgYmVuZWF0aCB1cy4gVGhpcyBpcyB0ZXJyaWJsZSBhbmQgSSBmZWVs
CisgICAgLy8gYXNoYW1lZCBvZiBpdCwgYnV0IGl0IHdpbGwgd29yayBmb3Igbm93LgorICAgIAor
ICAgIENBcmd1bWVudEdldHRlciBhcmd1bWVudHMoaml0KTsKKyAgICAKKyAgICAvLyBGaXJzdCBy
ZWNvdmVyIG91ciBjYWxsIGZyYW1lIGFuZCB0YWcgdGhpbmdpZXMuCisgICAgYXJndW1lbnRzLmxv
YWROZXh0UHRyKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBqaXQubW92ZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpOworICAgIGppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoVGFnTWFzayksIEdQUkluZm86OnRhZ01hc2tSZWdpc3Rlcik7CisgICAgCisgICAgLy8gRG8g
c29tZSB2YWx1ZSBwcm9maWxpbmcuCisgICAgaWYgKGV4aXQubV9wcm9maWxlVmFsdWVGb3JtYXQg
IT0gSW52YWxpZFZhbHVlRm9ybWF0KSB7CisgICAgICAgIGFyZ3VtZW50cy5sb2FkTmV4dEFuZEJv
eChleGl0Lm1fcHJvZmlsZVZhbHVlRm9ybWF0LCBHUFJJbmZvOjpub25BcmdHUFIwKTsKKyAgICAg
ICAgCisgICAgICAgIGlmIChleGl0Lm1fa2luZCA9PSBCYWRDYWNoZSB8fCBleGl0Lm1fa2luZCA9
PSBCYWRJbmRleGluZ1R5cGUpIHsKKyAgICAgICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9
IGV4aXQubV9jb2RlT3JpZ2luRm9yRXhpdFByb2ZpbGU7CisgICAgICAgICAgICBpZiAoQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGUgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdp
biktPmdldEFycmF5UHJvZmlsZShjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKSB7CisgICAgICAg
ICAgICAgICAgaml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MoR1BSSW5mbzo6bm9u
QXJnR1BSMCwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIEdQUkluZm86Om5vbkFyZ0dQUjEp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIxLCBhcnJh
eVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOworICAgICAgICAgICAgICAg
IGppdC5sb2FkOChNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhHUFJJbmZvOjpub25BcmdHUFIxLCBT
dHJ1Y3R1cmU6OmluZGV4aW5nVHlwZU9mZnNldCgpKSwgR1BSSW5mbzo6bm9uQXJnR1BSMSk7Cisg
ICAgICAgICAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSwg
R1BSSW5mbzo6bm9uQXJnR1BSMik7CisgICAgICAgICAgICAgICAgaml0LmxzaGlmdDMyKEdQUklu
Zm86Om5vbkFyZ0dQUjEsIEdQUkluZm86Om5vbkFyZ0dQUjIpOworICAgICAgICAgICAgICAgIGpp
dC5vcjMyKEdQUkluZm86Om5vbkFyZ0dQUjIsIE1hY3JvQXNzZW1ibGVyOjpBYnNvbHV0ZUFkZHJl
c3MoYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZBcnJheU1vZGVzKCkpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKCEhZXhpdC5tX3ZhbHVlUHJvZmlsZSkK
KyAgICAgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om5vbkFyZ0dQUjAsIGV4aXQubV92YWx1
ZVByb2ZpbGUuZ2V0U3BlY0ZhaWxCdWNrZXQoMCkpOworICAgIH0KKyAgICAKKyAgICAvLyBTdGFy
dCBieSBkdW1waW5nIGFsbCBhcmd1bWVudCBleGl0IHZhbHVlcyB0byB0aGUgc3RhY2suCisgICAg
CisgICAgVmVjdG9yPEV4aXRBcmd1bWVudEZvck9wZXJhbmQsIDE2PiBzb3J0ZWRBcmd1bWVudHM7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gZXhpdC5tX3ZhbHVlcy5zaXplKCk7IGktLTspIHsKKyAg
ICAgICAgRXhpdFZhbHVlIHZhbHVlID0gZXhpdC5tX3ZhbHVlc1tpXTsKKyAgICAgICAgaW50IG9w
ZXJhbmQgPSBleGl0Lm1fdmFsdWVzLm9wZXJhbmRGb3JJbmRleChpKTsKKyAgICAgICAgCisgICAg
ICAgIGlmICghdmFsdWUuaXNBcmd1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIAorICAgICAgICBzb3J0ZWRBcmd1bWVudHMuYXBwZW5kKEV4aXRBcmd1bWVudEZvck9wZXJh
bmQodmFsdWUuZXhpdEFyZ3VtZW50KCksIG9wZXJhbmQpKTsKKyAgICB9CisgICAgc3RkOjpzb3J0
KHNvcnRlZEFyZ3VtZW50cy5iZWdpbigpLCBzb3J0ZWRBcmd1bWVudHMuZW5kKCksIGxlc3NlckFy
Z3VtZW50SW5kZXgpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzb3J0ZWRB
cmd1bWVudHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgRXhpdEFyZ3VtZW50Rm9yT3BlcmFuZCBh
cmd1bWVudCA9IHNvcnRlZEFyZ3VtZW50c1tpXTsKKyAgICAgICAgCisgICAgICAgIGFyZ3VtZW50
cy5sb2FkTmV4dEFuZEJveChhcmd1bWVudC5leGl0QXJndW1lbnQoKS5mb3JtYXQoKSwgR1BSSW5m
bzo6bm9uQXJnR1BSMCk7CisgICAgICAgIGppdC5zdG9yZTY0KEdQUkluZm86Om5vbkFyZ0dQUjAs
IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcihhcmd1bWVudC5vcGVyYW5kKCkpKTsKKyAgICB9
CisgICAgCisgICAgLy8gQm94IGFueXRoaW5nIHRoYXQgaXMgYWxyZWFkeSBvbiB0aGUgc3RhY2ss
IG9yIHRoYXQgaXMgYSBjb25zdGFudC4KKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBleGl0
Lm1fdmFsdWVzLnNpemUoKTsgaS0tOykgeworICAgICAgICBFeGl0VmFsdWUgdmFsdWUgPSBleGl0
Lm1fdmFsdWVzW2ldOworICAgICAgICBpbnQgb3BlcmFuZCA9IGV4aXQubV92YWx1ZXMub3BlcmFu
ZEZvckluZGV4KGkpOworICAgICAgICAKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mg
YWRkcmVzcyA9IEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcihvcGVyYW5kKTsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7CisgICAgICAgIGNhc2UgRXhpdFZhbHVl
RGVhZDoKKyAgICAgICAgICAgIGppdC5zdG9yZTY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQoSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpKSwgYWRkcmVzcyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgICAgIGpp
dC5zdG9yZTY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKHZh
bHVlLmNvbnN0YW50KCkpKSwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgICAgICAgICAgaml0LmxvYWQzMigKKyAg
ICAgICAgICAgICAgICBhZGRyZXNzLndpdGhPZmZzZXQoT0JKRUNUX09GRlNFVE9GKEVuY29kZWRW
YWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSksCisgICAgICAgICAgICAgICAgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgaml0Lm9yNjQoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJl
Z2lzdGVyLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJbmZv
OjpyZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBFeGl0
VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgICAgIGppdC5sb2FkRG91YmxlKGFkZHJl
c3MsIEZQUkluZm86OmZwUmVnVDApOworICAgICAgICAgICAgaml0LmJveERvdWJsZShGUFJJbmZv
OjpmcFJlZ1QwLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBqaXQuc3RvcmU2NChHUFJJ
bmZvOjpyZWdUMCwgYWRkcmVzcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBF
eGl0VmFsdWVBcmd1bWVudDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGhhbmRsZUV4aXRDb3VudHMoaml0LCBl
eGl0KTsKKyAgICByZWlmeUlubGluZWRDYWxsRnJhbWVzKGppdCwgZXhpdCk7CisgICAgCisgICAg
aml0LnBvcChNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIpOworICAgIGppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlciwgTWFjcm9Bc3NlbWJsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBqaXQucG9wKE1hY3JvQXNzZW1ibGVyOjpmcmFt
ZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0LnBvcChHUFJJbmZvOjpub25BcmdHUFIwKTsgLy8g
aWdub3JlIHRoZSByZXN1bHQuCisgICAgCisgICAgaWYgKGV4aXQubV9sYXN0U2V0T3BlcmFuZCAh
PSBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKSB7CisgICAgICAgIGppdC5sb2FkNjQo
CisgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoZXhpdC5tX2xhc3RTZXRP
cGVyYW5kKSwgR1BSSW5mbzo6Y2FjaGVkUmVzdWx0UmVnaXN0ZXIpOworICAgIH0KKyAgICAKKyAg
ICBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoaml0LCBleGl0KTsKKyAgICAKKyAgICBMaW5rQnVmZmVy
IHBhdGNoQnVmZmVyKCpnbG9iYWxEYXRhLCAmaml0LCBjb2RlQmxvY2spOworICAgIGV4aXQubV9j
b2RlID0gRklOQUxJWkVfQ09ERV9JRigKKyAgICAgICAgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCks
CisgICAgICAgIHBhdGNoQnVmZmVyLAorICAgICAgICAoIkZUTCBPU1IgZXhpdCAjJXUgKGJjIyV1
LCAlcykgZnJvbSAlcyIsCisgICAgICAgICAgICBleGl0SUQsIGV4aXQubV9jb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgsCisgICAgICAgICAgICBleGl0S2luZFRvU3RyaW5nKGV4aXQubV9raW5kKSwg
dG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSkpOworfQorCitleHRlcm4gIkMiIHZvaWQqIGNv
bXBpbGVGVExPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgZXhpdElEKQoreworICAg
IFNhbXBsaW5nUmVnaW9uIHNhbXBsaW5nUmVnaW9uKCJGVEwgT1NSIEV4aXQgQ29tcGlsYXRpb24i
KTsKKyAgICAKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9jaygpOwor
ICAgIAorICAgIEFTU0VSVChjb2RlQmxvY2spOworICAgIEFTU0VSVChjb2RlQmxvY2stPmdldEpJ
VFR5cGUoKSA9PSBKSVRDb2RlOjpGVExKSVQpOworICAgIAorICAgIEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CisgICAgCisgICAgT1NSRXhpdCYgZXhpdCA9
IGNvZGVCbG9jay0+Z2V0SklUQ29kZSgpLT5mdGwoKS0+b3NyRXhpdFtleGl0SURdOworICAgIAor
ICAgIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdChleGVjLCBleGl0Lm1fY29kZU9yaWdpbik7
CisgICAgCisgICAgY29tcGlsZVN0dWIoZXhpdElELCBleGl0LCBnbG9iYWxEYXRhLCBjb2RlQmxv
Y2spOworICAgIAorICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwor
ICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKAorICAgICAgICBleGl0LmNvZGVMb2NhdGlvbkZvclJl
cGF0Y2goY29kZUJsb2NrKSwgQ29kZUxvY2F0aW9uTGFiZWwoZXhpdC5tX2NvZGUuY29kZSgpKSk7
CisgICAgCisgICAgcmV0dXJuIGV4aXQubV9jb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUoRlRM
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPU1JFeGl0Q29tcGls
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9TUkV4aXRD
b21waWxlci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExP
U1JFeGl0Q29tcGlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMT1NSRXhp
dENvbXBpbGVyX2gKKyNkZWZpbmUgRlRMT1NSRXhpdENvbXBpbGVyX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdPcGVy
YXRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworLy8gVGFrZXMg
dGhlIGNhbGwgZnJhbWUgYW5kIHRoZSBpbmRleCBvZiB0aGUgZXhpdCwgYW5kIHJldHVybnMgdGhl
IGFkZHJlc3MgdG8KKy8vIGp1bXAgdG8uCitleHRlcm4gIkMiIHsKK3ZvaWQqIERGR19PUEVSQVRJ
T04gY29tcGlsZUZUTE9TUkV4aXQoRXhlY1N0YXRlKiwgdW5zaWduZWQgZXhpdElEKSBXVEZfSU5U
RVJOQUw7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMT1NSRXhpdENvbXBpbGVyX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNDgzMTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwx
MSArMzAsMTMgQEAKIAogI2lmIEVOQUJMRShGVExfSklUKQogCisjaW5jbHVkZSAiREZHQ29tbW9u
LmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2aWF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTEFic3RyYWN0
SGVhcFJlcG9zaXRvcnkuaCIKICNpbmNsdWRlICJGVExDb21tb25WYWx1ZXMuaCIKICNpbmNsdWRl
ICJGVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgiCiAjaW5jbHVkZSAiRlRMVHlwZWRQb2ludGVyLmgi
CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKIApAQCAtOTQsMTEgKzk2LDExIEBAIHB1YmxpYzoKICAgICAgICAgCiAg
ICAgICAgIExMVk1Qb3NpdGlvbkJ1aWxkZXJBdEVuZChtX2J1aWxkZXIsIGJsb2NrKTsKICAgICB9
Ci0gICAgTEJhc2ljQmxvY2sgbmV3QmxvY2soKQorICAgIExCYXNpY0Jsb2NrIG5ld0Jsb2NrKGNv
bnN0IGNoYXIqIG5hbWUgPSAiIikKICAgICB7CiAgICAgICAgIGlmICghbV9uZXh0QmxvY2spCi0g
ICAgICAgICAgICByZXR1cm4gYXBwZW5kQmFzaWNCbG9jayhtX2Z1bmN0aW9uKTsKLSAgICAgICAg
cmV0dXJuIGluc2VydEJhc2ljQmxvY2sobV9uZXh0QmxvY2spOworICAgICAgICAgICAgcmV0dXJu
IGFwcGVuZEJhc2ljQmxvY2sobV9mdW5jdGlvbiwgbmFtZSk7CisgICAgICAgIHJldHVybiBpbnNl
cnRCYXNpY0Jsb2NrKG1fbmV4dEJsb2NrLCBuYW1lKTsKICAgICB9CiAgICAgCiAgICAgTFZhbHVl
IHBhcmFtKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBnZXRQYXJhbShtX2Z1bmN0aW9uLCBpbmRl
eCk7IH0KQEAgLTEzNSwxOSArMTM3LDIwIEBAIHB1YmxpYzoKICAgICBMVmFsdWUgemVyb0V4dChM
VmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxkZXIsIHZh
bHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBpbnRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlw
ZSkgeyByZXR1cm4gYnVpbGRJbnRDYXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9CiAgICAg
TFZhbHVlIGNhc3RUb0ludDMyKExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gaW50Q2FzdCh2YWx1ZSwg
aW50MzIpOyB9CisgICAgTFZhbHVlIGludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkg
eyByZXR1cm4gYnVpbGRJbnRUb1B0cihtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIAog
ICAgIExWYWx1ZSBnZXQoTFZhbHVlIHJlZmVyZW5jZSkgeyByZXR1cm4gYnVpbGRMb2FkKG1fYnVp
bGRlciwgcmVmZXJlbmNlKTsgfQogICAgIExWYWx1ZSBzZXQoTFZhbHVlIHZhbHVlLCBMVmFsdWUg
cmVmZXJlbmNlKSB7IHJldHVybiBidWlsZFN0b3JlKG1fYnVpbGRlciwgdmFsdWUsIHJlZmVyZW5j
ZSk7IH0KICAgICAKICAgICBMVmFsdWUgbG9hZChUeXBlZFBvaW50ZXIgcG9pbnRlciwgTFR5cGUg
cmVmVHlwZSkKICAgICB7Ci0gICAgICAgIExWYWx1ZSByZXN1bHQgPSBnZXQoYnVpbGRJbnRUb1B0
cihtX2J1aWxkZXIsIHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOworICAgICAgICBMVmFsdWUg
cmVzdWx0ID0gZ2V0KGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwogICAgICAg
ICBwb2ludGVyLmhlYXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwog
ICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KICAgICB2b2lkIHN0b3JlKExWYWx1ZSB2YWx1
ZSwgVHlwZWRQb2ludGVyIHBvaW50ZXIsIExUeXBlIHJlZlR5cGUpCiAgICAgewotICAgICAgICBM
VmFsdWUgcmVzdWx0ID0gc2V0KHZhbHVlLCBidWlsZEludFRvUHRyKG1fYnVpbGRlciwgcG9pbnRl
ci52YWx1ZSgpLCByZWZUeXBlKSk7CisgICAgICAgIExWYWx1ZSByZXN1bHQgPSBzZXQodmFsdWUs
IGludFRvUHRyKHBvaW50ZXIudmFsdWUoKSwgcmVmVHlwZSkpOwogICAgICAgICBwb2ludGVyLmhl
YXAoKS5kZWNvcmF0ZUluc3RydWN0aW9uKHJlc3VsdCwgKm1faGVhcHMpOwogICAgIH0KICAgICAK
QEAgLTI0NCwxMCArMjQ3LDE4IEBAIHB1YmxpYzoKICAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2
YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0
KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KICAgICBMVmFsdWUgZXh0cmFj
dFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBidWlsZEV4dHJh
Y3RWYWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9CiAgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmVjdG9yVHlwZT4KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIGNv
bnN0IFZlY3RvclR5cGUmIHZlY3RvcikgeyByZXR1cm4gYnVpbGRDYWxsKG1fYnVpbGRlciwgZnVu
Y3Rpb24sIHZlY3Rvcik7IH0KICAgICBMVmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24pIHsgcmV0
dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIGZ1bmN0aW9uKTsgfQogICAgIExWYWx1ZSBjYWxsKExW
YWx1ZSBmdW5jdGlvbiwgTFZhbHVlIGFyZzEpIHsgcmV0dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIs
IGZ1bmN0aW9uLCBhcmcxKTsgfQogICAgIExWYWx1ZSBjYWxsKExWYWx1ZSBmdW5jdGlvbiwgTFZh
bHVlIGFyZzEsIExWYWx1ZSBhcmcyKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5j
dGlvbiwgYXJnMSwgYXJnMik7IH0KICAgICAKKyAgICBMVmFsdWUgY29udmVydFRvVGFpbENhbGwo
TFZhbHVlIGNhbGwpCisgICAgeworICAgICAgICBzZXRUYWlsQ2FsbChjYWxsLCBJc1RhaWxDYWxs
KTsKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQorICAgIAogICAgIHZvaWQganVtcChMQmFz
aWNCbG9jayBkZXN0aW5hdGlvbikgeyBidWlsZEJyKG1fYnVpbGRlciwgZGVzdGluYXRpb24pOyB9
CiAgICAgdm9pZCBicmFuY2goTFZhbHVlIGNvbmRpdGlvbiwgTEJhc2ljQmxvY2sgdGFrZW4sIExC
YXNpY0Jsb2NrIG5vdFRha2VuKSB7IGJ1aWxkQ29uZEJyKG1fYnVpbGRlciwgY29uZGl0aW9uLCB0
YWtlbiwgbm90VGFrZW4pOyB9CiAgICAgdm9pZCByZXQoTFZhbHVlIHZhbHVlKSB7IGJ1aWxkUmV0
KG1fYnVpbGRlciwgdmFsdWUpOyB9CkBAIC0yNjEsNiArMjcyLDExIEBAIHB1YmxpYzoKICAgICBM
QmFzaWNCbG9jayBtX25leHRCbG9jazsKIH07CiAKKyNkZWZpbmUgRlRMX05FV19CTE9DSyhvdXRw
dXQsIG5hbWVBcmd1bWVudHMpIFwKKyAgICAoTElLRUxZKCE6OkpTQzo6REZHOjp2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpIFwKKyAgICA/IChvdXRwdXQpLm5ld0Jsb2NrKCkgXAorICAgIDog
KG91dHB1dCkubmV3QmxvY2soKHRvQ1N0cmluZyBuYW1lQXJndW1lbnRzKS5kYXRhKCkpKQorCiB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE0ODMxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiRlRMQWJicmV2
aWF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExPU1JFeGl0
Q29tcGlsYXRpb25JbmZvLmgiCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAKIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKQEAgLTQ5LDYgKzUwLDcgQEAgcHVibGljOgogICAg
IExNb2R1bGUgbW9kdWxlOwogICAgIExWYWx1ZSBmdW5jdGlvbjsKICAgICBSZWZQdHI8SklUQ29k
ZT4gaml0Q29kZTsKKyAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhpdDsK
ICAgICAKICAgICB2b2lkIGR1bXBTdGF0ZShjb25zdCBjaGFyKiB3aGVuKTsKIH07CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorCisjaWYgRU5B
QkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJERkdHUFJJbmZvLmgiCisjaW5jbHVkZSAiREZHRlBS
SW5mby5oIgorI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkxpbmtC
dWZmZXIuaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5hbWVzcGFjZSBERkc7CisKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlciBqaXQ7CisgICAgCisgICAgLy8gUHJldGVu
ZCB0aGF0IHdlJ3JlIGEgQyBjYWxsIGZyYW1lLgorICAgIGppdC5wdXNoKE1hY3JvQXNzZW1ibGVy
OjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7CisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBNYWNyb0Fzc2VtYmxlcjo6ZnJhbWVQb2ludGVyUmVnaXN0ZXIp
OworICAgIGppdC5wdXNoKEdQUkluZm86OnJlZ1QwKTsKKyAgICBqaXQucHVzaChHUFJJbmZvOjpy
ZWdUMCk7CisgICAgCisgICAgc2l6ZV90IHNjcmF0Y2hTaXplID0gc2l6ZW9mKEVuY29kZWRKU1Zh
bHVlKSAqIChHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzICsgRlBSSW5mbzo6bnVt
YmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CisgICAgU2NyYXRjaEJ1ZmZlciogc2NyYXRjaEJ1ZmZl
ciA9IGdsb2JhbERhdGEtPnNjcmF0Y2hCdWZmZXJGb3JTaXplKHNjcmF0Y2hTaXplKTsKKyAgICBF
bmNvZGVkSlNWYWx1ZSogYnVmZmVyID0gc3RhdGljX2Nhc3Q8RW5jb2RlZEpTVmFsdWUqPihzY3Jh
dGNoQnVmZmVyLT5kYXRhQnVmZmVyKCkpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpCisgICAgICAgIGpp
dC5zdG9yZTY0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSwgYnVmZmVyICsgaSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEZQUkluZm86Om51bWJlck9mQXJndW1lbnRSZWdp
c3RlcnM7ICsraSkgeworICAgICAgICBqaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cihidWZmZXIgKyBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0ZXJzICsgaSksIEdQ
UkluZm86Om5vbkFyZ0dQUjEpOworICAgICAgICBqaXQuc3RvcmVEb3VibGUoRlBSSW5mbzo6dG9B
cmd1bWVudFJlZ2lzdGVyKGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGVsbCBHQyBtYXJrIHBoYXNlIGhvdyBtdWNoIG9mIHRoZSBzY3JhdGNoIGJ1ZmZlciBp
cyBhY3RpdmUgZHVyaW5nIGNhbGwuCisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW1QdHIoc2NyYXRjaEJ1ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25B
cmdHUFIxKTsKKyAgICBqaXQuc3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIo
c2NyYXRjaFNpemUpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKworICAgIC8vIGFyZ3VtZW50IDAg
aXMgYWxyZWFkeSB0aGUgY2FsbCBmcmFtZS4KKyAgICBqaXQubW92ZShHUFJJbmZvOjpub25BcmdH
UFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGZ1
bmN0aW9uQ2FsbCA9IGppdC5jYWxsKCk7CisgICAgCisgICAgLy8gTWFrZSBzdXJlIHRoYXQgd2Un
cmUgbm90IHVzaW5nIHRoZSByZXR1cm4gcmVnaXN0ZXIgaWYgaXQncyBhbiBhcmd1bWVudCByZWdp
c3Rlci4KKyAgICBqaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgCisgICAgLy8gUHJlcGFyZSBmb3IgdGFpbCBjYWxsLgorICAgIGppdC5w
b3AoR1BSSW5mbzo6bm9uQXJnR1BSMSk7CisgICAgaml0LnBvcChHUFJJbmZvOjpub25BcmdHUFIx
KTsKKyAgICBqaXQucG9wKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgCisgICAgaml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoc2NyYXRjaEJ1
ZmZlci0+YWN0aXZlTGVuZ3RoUHRyKCkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICBqaXQu
c3RvcmVQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCksIEdQUkluZm86Om5vbkFy
Z0dQUjEpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBGUFJJbmZvOjpudW1i
ZXJPZkFyZ3VtZW50UmVnaXN0ZXJzOyArK2kpIHsKKyAgICAgICAgaml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW1QdHIoYnVmZmVyICsgR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJl
Z2lzdGVycyArIGkpLCBHUFJJbmZvOjpub25BcmdHUFIxKTsKKyAgICAgICAgaml0LmxvYWREb3Vi
bGUoR1BSSW5mbzo6bm9uQXJnR1BSMSwgRlBSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsK
KyAgICB9CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IEdQUkluZm86Om51bWJlck9mQXJn
dW1lbnRSZWdpc3RlcnM7ICsraSkKKyAgICAgICAgaml0LmxvYWQ2NChidWZmZXIgKyBpLCBHUFJJ
bmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIAorICAgIGppdC5qdW1wKEdQUkluZm86
Om5vbkFyZ0dQUjApOworICAgIAorICAgIExpbmtCdWZmZXIgcGF0Y2hCdWZmZXIoKmdsb2JhbERh
dGEsICZqaXQsIEdMT0JBTF9USFVOS19JRCk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlv
bkNhbGwsIGNvbXBpbGVGVExPU1JFeGl0KTsKKyAgICByZXR1cm4gRklOQUxJWkVfQ09ERShwYXRj
aEJ1ZmZlciwgKCJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEZUTFRodW5rc19oCisjZGVmaW5lIEZUTFRodW5rc19oCisKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU0dsb2JhbERhdGE7
CisKK25hbWVzcGFjZSBGVEwgeworCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVy
YXRpb25UaHVua0dlbmVyYXRvcihKU0dsb2JhbERhdGEqKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExUSHVu
a3NfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZUZvcm1hdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9y
bWF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExWYWx1ZUZvcm1hdC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpGVEw7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZUZvcm1hdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChm
b3JtYXQpIHsKKyAgICBjYXNlIEludmFsaWRWYWx1ZUZvcm1hdDoKKyAgICAgICAgb3V0LnByaW50
KCJJbnZhbGlkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SW50MzI6
CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVGb3JtYXRVSW50MzI6CisgICAgICAgIG91dC5wcmludCgiVUludDMyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgb3V0LnByaW50
KCJCb29sZWFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlRm9ybWF0SlNWYWx1
ZToKKyAgICAgICAgb3V0LnByaW50KCJKU1ZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlRm9ybWF0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVGb3JtYXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlRm9ybWF0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlRm9ybWF0X2gKKyNkZWZpbmUg
RlRMVmFsdWVGb3JtYXRfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoRlRMX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIE5vdGUgdGhhdCB0aGlzIGlzIGF3a3dhcmRseSBz
aW1pbGFyIHRvIERhdGFGb3JtYXQgaW4gb3RoZXIgcGFydHMgb2YgSlNDLCBleGNlcHQgdGhhdAor
Ly8gdW5saWtlIERhdGFGb3JtYXQgYW5kIGxpa2UgVmFsdWVSZWNvdmVyeSwgaXQgZGlzdGluZ3Vp
c2hlcyBiZXR3ZWVuIFVJbnQzMiBhbmQgSW50MzIuCisKK2VudW0gVmFsdWVGb3JtYXQgeworICAg
IEludmFsaWRWYWx1ZUZvcm1hdCwKKyAgICBWYWx1ZUZvcm1hdEludDMyLAorICAgIFZhbHVlRm9y
bWF0VUludDMyLAorICAgIFZhbHVlRm9ybWF0Qm9vbGVhbiwKKyAgICBWYWx1ZUZvcm1hdEpTVmFs
dWUsCisgICAgVmFsdWVGb3JtYXREb3VibGUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpG
VEwKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6RlRMOjpWYWx1ZUZvcm1hdCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExWYWx1ZUZvcm1hdF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExWYWx1ZVNvdXJjZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMVmFs
dWVTb3VyY2UuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CisKK3ZvaWQgVmFsdWVTb3VyY2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgIGNhc2UgU291cmNlTm90U2V0Ogor
ICAgICAgICBvdXQucHJpbnQoIlNvdXJjZU5vdFNldCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBWYWx1ZUluSlNTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJWYWx1ZUluSlNTdGFjayIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluSlNTdGFjazoKKyAgICAgICAgb3V0
LnByaW50KCJJbnQzMkluSlNTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3Vi
bGVJbkpTU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlSW5KU1N0YWNrIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlSW5Mb2NhbHM6CisgICAgICAgIG91dC5wcmludCgi
VmFsdWVJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMkluTG9jYWxz
OgorICAgICAgICBvdXQucHJpbnQoIkludDMySW5Mb2NhbHMiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQm9vbGVhbkluTG9jYWxzOgorICAgICAgICBvdXQucHJpbnQoIkJvb2xlYW5Jbkxv
Y2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGVJbkxvY2FsczoKKyAgICAg
ICAgb3V0LnByaW50KCJEb3VibGVJbkxvY2FscyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBcmd1bWVudHNTb3VyY2U6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRzU291cmNlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNvdXJjZUlzRGVhZDoKKyAgICAgICAgb3V0LnBy
aW50KCJTb3VyY2VJc0RlYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSGF2ZU5vZGU6
CisgICAgICAgIG91dC5wcmludCgiTm9kZSgiLCBub2RlKCksICIpIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVmFsdWVTb3VyY2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFZhbHVlU291cmNlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTFZhbHVlU291cmNlX2gKKyNkZWZpbmUgRlRM
VmFsdWVTb3VyY2VfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUo
RlRMX0pJVCkKKworI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKworZW51bSBWYWx1ZVNvdXJjZUtpbmQgeworICAgIFNvdXJjZU5vdFNl
dCwKKyAgICBWYWx1ZUluSlNTdGFjaywKKyAgICBJbnQzMkluSlNTdGFjaywKKyAgICBEb3VibGVJ
bkpTU3RhY2ssCisgICAgVmFsdWVJbkxvY2FscywKKyAgICBJbnQzMkluTG9jYWxzLAorICAgIEJv
b2xlYW5JbkxvY2FscywKKyAgICBEb3VibGVJbkxvY2FscywKKyAgICBBcmd1bWVudHNTb3VyY2Us
CisgICAgU291cmNlSXNEZWFkLAorICAgIEhhdmVOb2RlCit9OworCitjbGFzcyBWYWx1ZVNvdXJj
ZSB7CitwdWJsaWM6CisgICAgVmFsdWVTb3VyY2UoKQorICAgICAgICA6IG1fdmFsdWUoU291cmNl
Tm90U2V0KQorICAgIHsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoVmFs
dWVTb3VyY2VLaW5kIGtpbmQpCisgICAgICAgIDogbV92YWx1ZShraW5kKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgZXhwbGljaXQgVmFsdWVTb3VyY2UoREZHOjpOb2RlKiBub2RlKQorICAgICAg
ICA6IG1fdmFsdWUoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4obm9kZSkpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBWYWx1ZVNvdXJjZUtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV92YWx1ZSA8IHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oSGF2ZU5vZGUpKQorICAgICAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlU291cmNlS2luZD4obV92YWx1ZSk7CisgICAgICAg
IHJldHVybiBIYXZlTm9kZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25z
dCB7IHJldHVybiBraW5kKCkgIT0gU291cmNlTm90U2V0OyB9CisgICAgCisgICAgREZHOjpOb2Rl
KiBub2RlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSGF2ZU5vZGUp
OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PERGRzo6Tm9kZSo+KG1fdmFsdWUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICB1aW50cHRyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEVOQUJMRShGVExfSklUKQorCisjZW5kaWYgLy8gRlRMVmFsdWVTb3VyY2Vf
aAorCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L0NoYW5nZUxvZwkocmV2aXNpb24gMTQ4MzQ2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdv
cmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wNC0xMiAgRmlsaXAgUGl6bG8gIDxm
cGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIGZvdXJ0aFRpZXI6IEZUTCBzaG91bGQgaGF2ZSBP
U1IgZXhpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTEzNjIzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBGaW5hbGx5IG1ha2UgdG9DU3RyaW5nKCkgc29tZXdoYXQgdmFyaWFkaWMuCisKKyAg
ICAgICAgKiB3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaDoKKyAgICAgICAgKFdURik6CisgICAgICAg
IChXVEY6OnRvQ1N0cmluZyk6CisKIDIwMTMtMDMtMzEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTEzNjU2CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TdHJpbmdQcmludFN0cmVhbS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgJKHJldmlzaW9uIDE0
ODMxNikKKysrIFNvdXJjZS9XVEYvd3RmL1N0cmluZ1ByaW50U3RyZWFtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTYwLDYgKzYwLDIwIEBAIENTdHJpbmcgdG9DU3RyaW5nKGNvbnN0IFQmIHZhbHVlKQog
ICAgIHN0cmVhbS5wcmludCh2YWx1ZSk7CiAgICAgcmV0dXJuIHN0cmVhbS50b0NTdHJpbmcoKTsK
IH0KK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMj4KK0NTdHJpbmcgdG9DU3RyaW5n
KGNvbnN0IFQxJiB2YWx1ZTEsIGNvbnN0IFQyJiB2YWx1ZTIpCit7CisgICAgU3RyaW5nUHJpbnRT
dHJlYW0gc3RyZWFtOworICAgIHN0cmVhbS5wcmludCh2YWx1ZTEsIHZhbHVlMik7CisgICAgcmV0
dXJuIHN0cmVhbS50b0NTdHJpbmcoKTsKK30KK3RlbXBsYXRlPHR5cGVuYW1lIFQxLCB0eXBlbmFt
ZSBUMiwgdHlwZW5hbWUgVDM+CitDU3RyaW5nIHRvQ1N0cmluZyhjb25zdCBUMSYgdmFsdWUxLCBj
b25zdCBUMiYgdmFsdWUyLCBjb25zdCBUMyYgdmFsdWUzKQoreworICAgIFN0cmluZ1ByaW50U3Ry
ZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0ucHJpbnQodmFsdWUxLCB2YWx1ZTIsIHZhbHVlMyk7Cisg
ICAgcmV0dXJuIHN0cmVhbS50b0NTdHJpbmcoKTsKK30KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
IFN0cmluZyB0b1N0cmluZyhjb25zdCBUJiB2YWx1ZSkK
</data>
<flag name="review"
          id="219768"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>